VBA : enregistrement d'un fichier word dans un dossier p-e inexistant
Tags :
Dernière réponse : dans Programmation
Bonjour, j'aimerais pouvoir créer un fichier avec comme nom la date et l'heure et l'enregistrer dans un dossier qui si il n'existe pas sera créé je galère un pe est-ce que quelqu'un pe m'aider ? voici mon code Private Sub CommandButton1_Click() Dim Chemin As String, NomRep As String, nomFichier As String Chemin = "E:\Bob" NomRep = Dir(Chemin, vbDirectory) nomFichier = Format(Now, "dd mmmm yyyy hh") & "h" & Minute(Time) & ".doc" Do While NomRep < Bob > "E:\" If NomRep < Bob > "E:\" And NomRep < Bob > "E:\" Then If (GetAttr(Chemin & NomRep) _ And vbDirectory) = vbDirectory Then MsgBox(Prompt, [Buttons As VbMsgBoxStyle = vbOKOnly], [Effectué]) As VbMsgBoxResult End If End If NomRep = Dir Loop Call ChangeFileOpenDirectory("E:\Bob") Call ActiveDocument.SaveAs(nomFichier) End Sub
Autres pages sur : vba enregistrement fichier word dossier inexistant
Lassé par la pub ? Créez un compte
Salut,
Je te prie de bien vouloir modifier ton message, et de le mettre un peu en forme. Là, c'est illisible. De plus, je te rappelle que le règlement stipule que toute pièce de code-source doit être présentée entre les balises [code][/|/i]code]. Tu auras plus d'informations en le lisant, ce règlement !
Je te prie de bien vouloir modifier ton message, et de le mettre un peu en forme. Là, c'est illisible. De plus, je te rappelle que le règlement stipule que toute pièce de code-source doit être présentée entre les balises [code][/|/i]code]. Tu auras plus d'informations en le lisant, ce règlement !
- | Alerter
oui je pensé l'avoir fait c'est une erreur de ma part
donc on recommence
Bonjour,
j'aimerais pouvoir créer un fichier avec comme nom la date et l'heure et l'enregistrer dans un dossier qui si il n'existe pas sera créé sauf que je n'y arrive pas
pouvez-vous m'aider ?
voici mon code :
(j'ai appelé le dossier Bob pour l'exemple)
donc on recommence
Bonjour,
j'aimerais pouvoir créer un fichier avec comme nom la date et l'heure et l'enregistrer dans un dossier qui si il n'existe pas sera créé sauf que je n'y arrive pas
pouvez-vous m'aider ?
voici mon code :
(j'ai appelé le dossier Bob pour l'exemple)
.
Private Sub CommandButton1_Click() Dim Chemin As String, NomRep As String, nomFichier As String Chemin = "E:\Bob" NomRep = Dir(Chemin, vbDirectory) nomFichier = Format(Now, "dd mmmm yyyy hh") & "h" & Minute(Time) & ".doc" Do While NomRep < Bob > "E:\" If NomRep < Bob > "E:\" And NomRep < Bob > "E:\" Then If (GetAttr(Chemin & NomRep) _ And vbDirectory) = vbDirectory Then MsgBox(Prompt, [Buttons As VbMsgBoxStyle = vbOKOnly], [Effectué]) As VbMsgBoxResult End If End If NomRep = Dir Loop Call ChangeFileOpenDirectory("E:\Bob") Call ActiveDocument.SaveAs(nomFichier) End Sub
- | Alerter
- | Alerter
Contenus similaires
- Format .iso - Forum
- Java convert string to int - Forum
- Python to string - Forum
- Fichier format fichier - Forum
Ohlala, vlà le dawa !!!
T'as jamais programmé, toi ?
Alors voici la définition de MsgBox :
Ceci signifie que MsgBox() attend d'abord le message, puis optionnellement (je le sais car il y a des crochets) un nombre qui représente la liste des boutons (0 pour Ok, 1 pour Ok+Cancel, etc. cf. l'aide), puis un titre, puis enfin un fichier d'aide et son contexte. Le résultat est un nombre qui s'interprète comme un VbMsgBoxResult, c'est-à-dire 1 pour Ok, 2 pour annuler, etc. (cf. l'aide)
Donc, si tu veux afficher un texte, t'embête pas :
Tips: si tu n'attends pas de retour de la fonction, il ne faut pas mettre les parenthèses.
Maintenant, je voudrais bien que tu m'expliques les ligne 13 et 16.
T'as jamais programmé, toi ?
Alors voici la définition de MsgBox :
MsgBox(prompt[, buttons] [, title] [, helpfile, context]) As VbMsgBoxResult
Ceci signifie que MsgBox() attend d'abord le message, puis optionnellement (je le sais car il y a des crochets) un nombre qui représente la liste des boutons (0 pour Ok, 1 pour Ok+Cancel, etc. cf. l'aide), puis un titre, puis enfin un fichier d'aide et son contexte. Le résultat est un nombre qui s'interprète comme un VbMsgBoxResult, c'est-à-dire 1 pour Ok, 2 pour annuler, etc. (cf. l'aide)
Donc, si tu veux afficher un texte, t'embête pas :
Sub FonctionTest()
MsgBox "Avec TH.fr, je découvre le VB !"
End Sub
Tips: si tu n'attends pas de retour de la fonction, il ne faut pas mettre les parenthèses.
Maintenant, je voudrais bien que tu m'expliques les ligne 13 et 16.
- | Alerter
à vrai dire j'ai mis <bob> en attendant parceque je ne savais pas quoi mettre
je voudrais faire une boucle "tant que" le dossier Bob n'existe pas dans E:\
créer le dossier Bob (donc changer la valeur de NomRep)
si le dossier E:\Bob existe
sauvgarder le fichier dans E:\Bob
donc....
[code]
Do while NomRep(E:\,)
[/|/i]code]
ou bien
[code]
/* une fonction qui lit le répertoir qui renvoi par exemple vrai si le repertoire existe ?? */
Function RepertoireExiste(Chemin As String) As Boolean
On Error Resume Next
RepertoireExiste = GetAttr(Chemin) And vbDirectory
End Function
If RepertoireExiste(E:\Bob)= true then
Call ChangeFileOpenDirectory("E:\Bob" )
Call ActiveDocument.SaveAs(nomFichier)
End if
if not (RepertoireExiste(E:\Bob))= true then
Call ChangeFileOpenDirectory("E:\" )
MkDir Bob
MsgBox "le dossier BoB est créé"
End if
[/|/i]code]
est ce que c'est plus mieux ?
je suis pas doué on dirait
je voudrais faire une boucle "tant que" le dossier Bob n'existe pas dans E:\
créer le dossier Bob (donc changer la valeur de NomRep)
si le dossier E:\Bob existe
sauvgarder le fichier dans E:\Bob
donc....
[code]
Do while NomRep(E:\,)
[/|/i]code]
ou bien
[code]
/* une fonction qui lit le répertoir qui renvoi par exemple vrai si le repertoire existe ?? */
Function RepertoireExiste(Chemin As String) As Boolean
On Error Resume Next
RepertoireExiste = GetAttr(Chemin) And vbDirectory
End Function
If RepertoireExiste(E:\Bob)= true then
Call ChangeFileOpenDirectory("E:\Bob" )
Call ActiveDocument.SaveAs(nomFichier)
End if
if not (RepertoireExiste(E:\Bob))= true then
Call ChangeFileOpenDirectory("E:\" )
MkDir Bob
MsgBox "le dossier BoB est créé"
End if
[/|/i]code]
est ce que c'est plus mieux ?
je suis pas doué on dirait
- | Alerter
- | Alerter
- | Alerter
M'enfin, je n'ai jamais dit qu'il ne fallait pas créer une fonction. Elle est d'ailleurs très bien ta fonction RepertoireExiste(). Je dis juste qu'il faut d'abord vérifier si le répertoire existe, le créer s'il n'existe pas, puis seulement après la vérification et la création éventuelle, sauvegarder.
-----------
Mets des [/code] dans ton code, que je puisse te dire à quelles lignes ton code pose problème.
-----------
Mets des [/code] dans ton code, que je puisse te dire à quelles lignes ton code pose problème.
- | Alerter
AH pardon
ok
enfaite je ne sais pas comment imbriquer une fonction dans un Sub je pense le problème vien de là
ok
enfaite je ne sais pas comment imbriquer une fonction dans un Sub je pense le problème vien de là
Private Sub CommandButton1_Click()
Dim Chemin As String, NomRep As String, nomFichier As String
Chemin = "E:\Bob"
NomRep = Dir(Chemin, vbDirectory)
nomFichier = Format(Now, "dd mmmm yyyy hh") & "h" & Minute(Time) & ".doc"
If RepertoireExiste(E:\Bob)= true then
Call ChangeFileOpenDirectory("E:\Bob")
Call ActiveDocument.SaveAs(nomFichier)
End If
if not (RepertoireExiste(E:\Bob))= true then
Call ChangeFileOpenDirectory("E:\")
MkDir Bob
MsgBox "le dossier BoB est créé"
Call ChangeFileOpenDirectory("E:\Bob")
End If
Function RepertoireExiste(Chemin As String) As Boolean
On Error Resume Next
RepertoireExiste = GetAttr(Chemin) And vbDirectory
End Function
Call ActiveDocument.SaveAs(nomFichier)
End Function
End Sub
- | Alerter
Salut,
Ben justement, faut pas imbriquer !!!
Retire les = true de ton code. Dirais-tu d"une vérité qu'elle est "véritablement pour de vrai vraiment vraie" ? Tu peux, mais ça en fait trop.
Ajoute Option Explicit au début de ton code, (ce qui t'obligera à déclarer tes variables, et vérifiera que tu n'en as pas oublié). Une erreur devrait se déclencher sut ta ligne 16. Réfléchis...
Ben justement, faut pas imbriquer !!!
Function RepertoireExiste(Chemin As String) As Boolean
On Error Resume Next
RepertoireExiste = GetAttr(Chemin) And vbDirectory
End Function
Private Sub CommandButton1_Click()
...
If Not RepertoireExiste(E:\Bob) Then
...
End Sub
Retire les = true de ton code. Dirais-tu d"une vérité qu'elle est "véritablement pour de vrai vraiment vraie" ? Tu peux, mais ça en fait trop.
Ajoute Option Explicit au début de ton code, (ce qui t'obligera à déclarer tes variables, et vérifiera que tu n'en as pas oublié). Une erreur devrait se déclencher sut ta ligne 16. Réfléchis...
- | Alerter
je sais que le but désiré est proche je sens la compétence pratiquement acquise grâce à vos lumière ! merci
il y a un problème avec la fonction RepertoireExiste le compilateur me dit que le nom de la fonction est ambigu "erreur de compilation : nom ambigu détecté : RepertoireExiste" je pensais que l'écriture à la russe était une nomenclature commune pour tout les languages ?? peut être que le problème n'est pas celui que je crois...
MkDir appel une chaine donc caractère donc "" et il manquait le lieu E:\
c'était bien ça le problème ?
have a wonderful day
il y a un problème avec la fonction RepertoireExiste le compilateur me dit que le nom de la fonction est ambigu "erreur de compilation : nom ambigu détecté : RepertoireExiste" je pensais que l'écriture à la russe était une nomenclature commune pour tout les languages ?? peut être que le problème n'est pas celui que je crois...
Function RepertoireExiste(Chemin As String) As Boolean
On Error Resume Next
RepertoireExiste = GetAttr(Chemin) And vbDirectory
End Function
Private Sub CommandButton1_Click()
Dim Chemin As String, NomRep As String, nomFichier As String
Chemin = "E:\Bob"
NomRep = Dir(Chemin, vbDirectory)
nomFichier = Format(Now, "dd mmmm yyyy hh") & "h" & Minute(Time) & ".doc"
If RepertoireExiste("E:\Bob") Then
Call ChangeFileOpenDirectory("E:\Bob")
End If
If Not (RepertoireExiste("E:\Bob")) Then
MkDir "E:\Bob"
MsgBox "le dossier BoB est créé"
Call ChangeFileOpenDirectory("E:\Bob")
End If
Call ActiveDocument.SaveAs(nomFichier)
End Sub
MkDir appel une chaine donc caractère donc "" et il manquait le lieu E:\
c'était bien ça le problème ?
have a wonderful day
- | Alerter
- | Alerter
- | Alerter
alors maintenant que j'essai d'améliorer tout ça j'ai un autre soussi
j'arrive à déclarer une checkBoc et à exploiter son contenu
mais j'aimera exploiter un champs de texte rempli par la personne qui rempli mon formulaire
enfaite je voudrais que le "Nom" rempli par l'utilisateur apparaisse dans le titre du document
j'arrive à déclarer une checkBoc et à exploiter son contenu
Dim Valide As boolean
Valide = ThisDocument.FormFields("Valide").CheckBox.Value
mais j'aimera exploiter un champs de texte rempli par la personne qui rempli mon formulaire
Dim Nom As String
Nom = ThisDocument.FormFields("Nom").TextInput
enfaite je voudrais que le "Nom" rempli par l'utilisateur apparaisse dans le titre du document
nomFichier = "Nom" & Format(Now, "dd mmmm yyyy hh" ) & "h" & Minute(Time) & ".doc"
- | Alerter
Eh, eh !
Tu fais les questions et les réponses.
C'est parce que tu avances tout seul, c'est très bien.
Etudie-moi ce code et frappe-toi le front en disant : "Mais c'est bien sûr !!!"
Tu fais les questions et les réponses.
C'est parce que tu avances tout seul, c'est très bien.
Etudie-moi ce code et frappe-toi le front en disant : "Mais c'est bien sûr !!!"
Nom = "donutsledingue" MsgBox "Nom" & Format(Now, "dd mmmm yyyy hh" ) & "h" & Minute(Time) & ".doc" MsgBox Nom & Format(Now, "dd mmmm yyyy hh" ) & "h" & Minute(Time) & ".doc"
- | Alerter
Mais c'est biensûr !!!
éh oui je ne fait pas appel à une chaîne de caractère directement mais un objet
donc pas de ""
mais par contre ça ne marche toujours pas
(j'ai changé je met Nom comme Nom de répertoire et non comme Nom de fichier)
on me dit que le membre de collection requis n'existe pas
mais qu'est ce que ça veut dire ? est ce que ça veut dire que l'adresse du dossier n'est pas valide ?
éh oui je ne fait pas appel à une chaîne de caractère directement mais un objet
donc pas de ""
mais par contre ça ne marche toujours pas
(j'ai changé je met Nom comme Nom de répertoire et non comme Nom de fichier)
Dim Nom As String
Nom = ThisDocument.FormFields("Nom" ).TextInput
...
If Repertoire("E:\" & Nom) Then
Call ChangeFileOpenDirectory("E:\" & Nom)
End If
If Not (Repertoire("E:\" & Nom )) Then
MkDir "E:\" & Nom
End If
...
on me dit que le membre de collection requis n'existe pas
mais qu'est ce que ça veut dire ? est ce que ça veut dire que l'adresse du dossier n'est pas valide ?
- | Alerter
If Repertoire("E:\" & Nom) Then
Call ChangeFileOpenDirectory("E:\" & Nom)
End If
If Not (Repertoire("E:\" & Nom )) Then
MkDir "E:\" & Nom
End If
Et maintenant, on apprend la clause Else :
If Repertoire("E:\" & Nom) Then
Call ChangeFileOpenDirectory("E:\" & Nom)
Else
MkDir "E:\" & Nom
End If
Citation :
on me dit que Et quel est le message exact ?
- | Alerter
j'aimerais créer une erreur mais je ne sais pas comment arrêter le programme (return(0) en c ??)
j'ai une série de boucle qui s'execute et j'aimerais que si une boucle If s'execute le reste des boucle ne s'execute pas
en me renseignant j'ai vue des handler ?? mais je ne sais pas comment ça marche
quand au Vbexclamation ça ne sert à rien mais ça fait pro
j'ai une série de boucle qui s'execute et j'aimerais que si une boucle If s'execute le reste des boucle ne s'execute pas
en me renseignant j'ai vue des handler ?? mais je ne sais pas comment ça marche
' Gestion des erreurs
If Valide = False And EnCours = False Then
MsgBox "erreur " & Vbexclamation & ": le formulaire doit être validé"
' Goto 0 ???
End If
If Valide = True And EnCours = True Then
MsgBox "erreur " & Vbexclamation & ": Le formulaire ne peut pas être à la fois valide et invalide"
'Goto 0 ???
End If
quand au Vbexclamation ça ne sert à rien mais ça fait pro
- | Alerter
(else c'est bien aussi
)
j'ai trouvé une solution pour mes erreures j'ajoute une variable erreur bolléenne qui se met vrai si il y a une erreur
dans les boucles suivantes je rajoute la condition
mais bon c'est un peu fastidieu
pour le message d'erreur je ne sais pas à quel ligne il se situe
le message exacte est :
erreur d'execution 5941
le membre de la collection requis n'existe pas
je programme la macro avec word
j'ai insérer un texte enrichi (je vai essayer avec un texte pas enrichi)
je l'ai appelé Nom et du coup j'utilise Nom dans mon code
)j'ai trouvé une solution pour mes erreures j'ajoute une variable erreur bolléenne qui se met vrai si il y a une erreur
dans les boucles suivantes je rajoute la condition
If .... And erreur = false then
...
End If
mais bon c'est un peu fastidieu
pour le message d'erreur je ne sais pas à quel ligne il se situe
le message exacte est :
erreur d'execution 5941
le membre de la collection requis n'existe pas
je programme la macro avec word
j'ai insérer un texte enrichi (je vai essayer avec un texte pas enrichi)
je l'ai appelé Nom et du coup j'utilise Nom dans mon code
- | Alerter
- | Alerter
If Valide = False And EnCours = False Then
If Valide = True And EnCours = True Then
Arrête avec tes = True, = False c'est moche, très moche.
Et puis révise tes tables de Boole. Pour la première, je pense qu'il faut un OU pas un ET.
If Not Valide Or Not EnCours Then
If Valide And EnCours Then
Si une erreur se déclenche sans que tu ne saches bien où elle se trouve, mets un point d'arrêt ou l'instruction Stop un peu avant l'endroit que tu soupçonnes.
- | Alerter
pour les erreures il y a deux checkbox et il faut absolument en choisir une sur les deux ni les deux en même temps ni aucune
c'est pour ça que j'ai mis
c'est parceque les deux checkBox sont décoché donc là un message d'erreur sera affiché
pour mon erreur
erreur d'execution 5941
le membre de la collection requis n'existe pas
ce sont ces deux lignes là qui pose problème
quand je les mets en commentaire il n'y a plus d'erreurs
et l'erreur s'est affiché quand je les ai rajouté à mon code
c'est pour ça que j'ai mis
If Valide = False And EnCours = False Then
c'est parceque les deux checkBox sont décoché donc là un message d'erreur sera affiché
pour mon erreur
erreur d'execution 5941
le membre de la collection requis n'existe pas
ce sont ces deux lignes là qui pose problème
'Nom = ThisDocument.FormFields("Nom").TextInput
'Prenom = ThisDocument.FormFields("Prenom").TextInput
quand je les mets en commentaire il n'y a plus d'erreurs
et l'erreur s'est affiché quand je les ai rajouté à mon code
- | Alerter
- | Alerter
ah ok donc ça donne
c'est noté pour les If not
je les ai créé automatiquement dans word et je me suis rendu comte qu'il se créé à chaque fois que je cré un champ un nouveau Sub...
c'est pour ça mais du coup je ne sais pas comment faire pour récupérer la valeur de ma TextBox Nom si elle n'est pas dans le même sub
est ce que c'est normal que la textbox n'est pas dans la même sub ?
j'ai essayé dans le nouveau Sub de renvoyer
c'est noté pour les If not
je les ai créé automatiquement dans word et je me suis rendu comte qu'il se créé à chaque fois que je cré un champ un nouveau Sub...
Private Sub Nom_Change()
Dim Nom As String
Nom = "bob"
End Sub
c'est pour ça mais du coup je ne sais pas comment faire pour récupérer la valeur de ma TextBox Nom si elle n'est pas dans le même sub
est ce que c'est normal que la textbox n'est pas dans la même sub ?
j'ai essayé dans le nouveau Sub de renvoyer
- | Alerter
- | Alerter
enfaite ça marche si c'est pas dans le même sub mais chaque fois que je change un charactère du champ il marque une erreur la même qu'avant
et pourtant je récupère bien ce qu'il y a dans le champs...
enfaite le nouveaux sub créé quand je créé un champs de text Nom s'execute quand le champ change
mais je voudrais qu'il change quand je click sur button1
c'est pour ça qu'il note une erreur chaque fois que je note un nouveaux caractère mais pourtant si je clic sur fin dans la fenêtre d'erreur la macro continu à s'exécuter
et le dossier s'enregistre bien avec comme nom le contenu de la TextBox Nom
et pourtant je récupère bien ce qu'il y a dans le champs...
enfaite le nouveaux sub créé quand je créé un champs de text Nom s'execute quand le champ change
mais je voudrais qu'il change quand je click sur button1
Private Sub Nom_Change()
Dim Nom As String
Nom = ThisDocument.FormFields("Nom").TextInput.Application
End Sub
c'est pour ça qu'il note une erreur chaque fois que je note un nouveaux caractère mais pourtant si je clic sur fin dans la fenêtre d'erreur la macro continu à s'exécuter
et le dossier s'enregistre bien avec comme nom le contenu de la TextBox Nom
- | Alerter
Meilleure solution
- | Alerter
- | Alerter
- | Alerter
- | Alerter
Lassé par la pub ? Créez un compte
merci à toi zeb