Macro création d'un dossier
Le
Jocelyne
Bonjour à tous,
Je suis débutante en VBA et je tente de créer une macro qui permet de créer
un dossier si celui-ci n'existe pas et ne fais rien si le dossier existe.
Le résultat que j'obtiens : elle fonctionne si le dossier n'existe pas mais
pas en ce qui concerne la partie si le dossier existe.
Voici une partie de la macro.
'Annonce la création du dossier avec la possibilité de canceller l'action
Response = MsgBox("Un dossier au nom de " & Chr(34) & StrConv(NomRep,
vbProperCase) & StrConv(PrenomRep, vbProperCase) & _
" " & Format(DateNaisRep, "yyyy-mm-dd") & Chr(34) & " sera créé.",
vbOKCancel, "Création du dossier")
If Response = vbCancel Then
MsgBox "Vous avez annulé la création du dossier.", vbExclamation
Exit Sub 'Arrete la procédure complète
Else
'Si le dossier n'existe pas, le dossier est créé, sinon la procédure se
termine.
If Dir$(Chemin & StrConv(NomRep, vbProperCase) & StrConv(PrenomRep,
vbProperCase) & " " & Format(DateNaisRep, "yyyy-mm-dd"), vbDirectory) =
vbNullString Then
'Le dossier n'existe pas alors C'EST ICI QUE CA PLANTE LORSQUE LE
DOSSIER EXISTE. LA MACRO FAIT CETTE LIGNE PLUTOT QUE DE SAUTER À ELSE.
MkDir (StrConv(NomRep, vbProperCase) & StrConv(PrenomRep, vbProperCase)
& " " & Format(DateNaisRep, "yyyy-mm-dd"))
Else
'Le dossier existe alors
MsgBox ("Le dossier existe déjà. Vérifiez les données" _
& " dans le formulaire et recommencez.")
Exit Sub
End If
End If
********
Est-ce quelqu'un serait assez gentil pour me dire qu'est-ce qui cloche dans
la macro et m'aider à la rendre fonctionnelle? Ça fait quelques jours déjà
que j'essaie de trouver la logique mais je ne vois plus clair.
Merci de votre aide.
Je suis débutante en VBA et je tente de créer une macro qui permet de créer
un dossier si celui-ci n'existe pas et ne fais rien si le dossier existe.
Le résultat que j'obtiens : elle fonctionne si le dossier n'existe pas mais
pas en ce qui concerne la partie si le dossier existe.
Voici une partie de la macro.
'Annonce la création du dossier avec la possibilité de canceller l'action
Response = MsgBox("Un dossier au nom de " & Chr(34) & StrConv(NomRep,
vbProperCase) & StrConv(PrenomRep, vbProperCase) & _
" " & Format(DateNaisRep, "yyyy-mm-dd") & Chr(34) & " sera créé.",
vbOKCancel, "Création du dossier")
If Response = vbCancel Then
MsgBox "Vous avez annulé la création du dossier.", vbExclamation
Exit Sub 'Arrete la procédure complète
Else
'Si le dossier n'existe pas, le dossier est créé, sinon la procédure se
termine.
If Dir$(Chemin & StrConv(NomRep, vbProperCase) & StrConv(PrenomRep,
vbProperCase) & " " & Format(DateNaisRep, "yyyy-mm-dd"), vbDirectory) =
vbNullString Then
'Le dossier n'existe pas alors C'EST ICI QUE CA PLANTE LORSQUE LE
DOSSIER EXISTE. LA MACRO FAIT CETTE LIGNE PLUTOT QUE DE SAUTER À ELSE.
MkDir (StrConv(NomRep, vbProperCase) & StrConv(PrenomRep, vbProperCase)
& " " & Format(DateNaisRep, "yyyy-mm-dd"))
Else
'Le dossier existe alors
MsgBox ("Le dossier existe déjà. Vérifiez les données" _
& " dans le formulaire et recommencez.")
Exit Sub
End If
End If
********
Est-ce quelqu'un serait assez gentil pour me dire qu'est-ce qui cloche dans
la macro et m'aider à la rendre fonctionnelle? Ça fait quelques jours déjà
que j'essaie de trouver la logique mais je ne vois plus clair.
Merci de votre aide.

Poser une question


[Réponse faite sur le forum public Word :
news://msnews.microsoft.com/ microsoft.public.fr.word ]
C'est le vbNullString, il faut mettre "", ce qui n'est pas la même
chose.
Et si je peux me permettre un conseil, utilisez des variables
instermédiaires comme :
Dim NomRep As string
NomRep = Chemin & StrConv(NomRep, vbProperCase) & StrConv(PrenomRep,
vbProperCase & " " & Format(DateNaisRep, "yyyy-mm-dd")
debug.print "Nom du dossier " & NomRep
If Dir$(NomRep) , vbDirectory) = "" then
'Le dossier n'existe pas a
MkDir NomRep
Else
'Le dossier existe alors
MsgBox ("Le dossier " & nomrep " &existe déjà. Vérifiez les
données" _
& " dans le formulaire et recommencez.")
Exit Sub
End If
C'est plus fiable et plus facilie à déboguer et maintenir (utilisation
du debug.print).
--
A+
J'ai remplacé l'instruction vbNullString par des "" mais ça ne fonctionnait
toujours pas. Alors, j'ai suivi vos conseils sur l'utilisation de variables
intermédiaires et ça fonctionne très bien.
Est-ce que je peux me permettre une autre question?
J'ai une autre macro qui utilise le contenu des mêmes variables NomRep,
PrenomRep, etc. pour créer le nom du fichier.
J'ai lu qu'on pouvait mettre des variables publiques pour pouvoir les
utiliser dans plusieurs procédures. J'ai essayé mais je n'arrive pas à
comprendre comment faire.
1. J'ai essayé en mettant les variables dans la zone de déclarations.
2. J'ai essayé aussi en mettant static lors de la déclarations.
Il y a quelque chose que j'ignore pour obtenir le bon résultat. Alors, pour
la macro je répète toutes les mêmes instructions pour obtenir mes variables.
Encore une fois merci.
Jocelyne
"Geo" a écrit :
Il faut les déclarer avant le premier Sub ou function,
en gros on a :
Option Explicit
Dim MaVariablePublique as String
....
Sub MaFonction()
MaVariablePublique = "Ma chaîne de caractères"
' Appel d'un autre Sub
MaSousFonction
' ici MaVariablePublique est égale à "Modification"
End sub
Sub MaSousFonction()
' ici MaVariablePublique est égale à "Ma chaîne de caractères"
' si ce Sub a été appelé par MaFonction, sinon c'est une chaine vide
Debug.Print MaVariablePublique
MaVariablePublique = "Modification"
End sub
Mais à chaque fin d'exécution de la macro principale (MaFonction)
La variable publique comme les variables locales sont rééinitialisées.
Si vous lancez une macro puis une autre, par exemple ici MaFonction
puis MaSousFonction, la valeur de la variable publique est perdue.
Si c'est ça votre problème, on peut vous proposer une solution avec les
variables de document.
C'est un peu délicat à utiliser, on les utilise principalement pour les
procédures récursives (aie le gros mot !).
N'hésitez pas à poser des questions, on se fera un plaisir d'essayer
d'y répondre.
--
A+
Je vais te donner un lien vers un tuto sur la déclaration des variables et
leur durée de vie.
http://heureuxoli.developpez.com/of...d/vba-all/
http://heureuxoli.developpez.com/of...page=page5
Pardon Geo.
Aie pas sur la tête.
--
Heureux-oli
Si rien n'est mentionné pour le code, c'est que j'en suis l'auteur.
http://heureuxoli.developpez.com/
http://word.developpez.com/
----------------------------------------------------------------------------------
"Jocelyne" news:
là-dessus.
Jocelyne
"heureux-oli" a écrit :