Création arborescence

Résolu
Mazhe Messages postés 17 Date d'inscription mardi 24 octobre 2006 Statut Membre Dernière intervention 15 novembre 2006 - 8 nov. 2006 à 16:17
Mazhe Messages postés 17 Date d'inscription mardi 24 octobre 2006 Statut Membre Dernière intervention 15 novembre 2006 - 15 nov. 2006 à 13:51
Plop all,

Y'a moyen d'utiliser une commande permettant de créer une arborescence ?

Je m'explique :

C:\temp existe
C:\Temp\PDR n'existe pas
C:`\Temp\Pdr\DC n'existe pas
C:\Temp\Pdr\DC\Qualif n'existe pas

Comment puis-je procéder pour créer ces 3 dossiers (pdr, dc et qualif) et donc cette arborescence...Mkdir et createfolder tels que je les connais (donc peu) ne me le permettent pas.

j'ai fais un truc du style :
set source = c:\temp\pdr\dc\qualif
mkdir (source)

mais que nenni... Enfin, ça revient au même quoi...

Z'avez une solution pour un débutant comme moi siouplait ?

D'avance un grand merci

22 réponses

cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
8 nov. 2006 à 16:25
Il faut utiliser l'api MakeSureDirectoryPathExist.

Private Declare Function MakeSureDirectoryPathExists Lib"imagehlp.dll" (ByVal lpPath As String) As Long

Private Sub Form_Load()
'KPD-Team 2000
'URL: http://www.allapi.net/
'E-Mail: KPDTeam@Allapi.net
'create the directory "c:\this\is\a\test\directory", if it doesn't exist already
MakeSureDirectoryPathExists "c:\this\is\a\test\directory"
End Sub

---- Sevyc64  (alias Casy) ----<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #
3
cs_JMO Messages postés 1854 Date d'inscription jeudi 23 mai 2002 Statut Membre Dernière intervention 24 juin 2018 27
8 nov. 2006 à 17:51
 Bonjour à tous....

Un exemple avec fso.
Il y a surement plus simple avec un wend ou un do until.

Const racine = "d:\Temp"
MsgBox Verif_Folder(racine),,"Vérification du répertoire"



Function Verif_Folder(rac)
Dim fso : Set fso = CreateObject("Scripting.FileSystemObject")
If Not fso.FolderExists(rac) Then
       'Msgbox "la racine n existe pas"
       Set fso = Nothing
       Exit Function
   Else
   'MsgBox "la racine existe"
   Dim ext(3), i, f, result
   ext(0) = "Pdr"
   ext(1) = "DC"
   ext(2) = "Qualif"
   Dim tab : tab = Array(ext(0), ext(1), ext(2)) 
  
   For i = 0  To UBound(tab)
       result = result & tab(i)
       'MsgBox rac & result
       If Not fso.FolderExists(rac & result) Then Set f = fso.CreateFolder(rac & result)
   Next
   Verif_Folder = rac & result
End If
Set fso = Nothing
End Function










jean-marc
3
cs_JMO Messages postés 1854 Date d'inscription jeudi 23 mai 2002 Statut Membre Dernière intervention 24 juin 2018 27
8 nov. 2006 à 18:07
 Re,

Une petite erreur, pas la peine de passer par un second tableau.

   Dim ext(3), i, f, result
   ext(0) = "Pdr"
   ext(1) = "DC"
   ext(2) = "Qualif"
  
   For i = 0  To UBound(ext)
       result = result & ext(i)
       'MsgBox rac & result
       If Not fso.FolderExists(rac & result) Then Set f = fso.CreateFolder(rac & result)
   Next

....jean-marc
3
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
9 nov. 2006 à 09:24
Oui Mazhe

Le Private Declare, tu le met au tout début du fichier, avant la première ligne de code (et si necessaire en remplaçant Private par Public)

Ensuite tu fais ceci :

Private Sub Copier_Click()
    If Fso.FolderExists(Dest) = True Then
   
        Call Fso.CopyFolder(Dest & "*", DestOld, True)
        Call Fso.CopyFolder(Source & "*", Dest, True)
      
    Else
   
       <strike>Fso.CreateFolder (Dest)</strike>
       MakeSureDirectoryPath (Dest)
      
        Call Fso.CopyFolder(Dest & "*", DestOld, True)
        Call Fso.CopyFolder(Source & "*", Dest, True)
   
    End If Set Fso = Nothing

End Sub

PS: Attention à DestOld qui doit lui aussi exister avant la copie

---- Sevyc64  (alias Casy) ----<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #
3

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
9 nov. 2006 à 09:43
Vérifie bien que tu as le "" à la fin du chemin sinon le dernier dossier n'est pas créer : Dest = "c:\temp\pdr\dc\qualif \
"

Dest = "c:\temp\pdr\dc\qualif" ne marche pas

---- Sevyc64  (alias Casy) ----<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #
3
Mazhe Messages postés 17 Date d'inscription mardi 24 octobre 2006 Statut Membre Dernière intervention 15 novembre 2006
8 nov. 2006 à 16:33
Merky Casy...

Ceci étant, j'colle ça où ? ^^
0
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
8 nov. 2006 à 16:37
La ligne Declare, tu la met au début de la feuille ou tu vas utiliser ta fonction et avant le code. Ou le mieux, tu la met dans un module en remplacçant Private par Public, elle sera dispo pour l'ensemble du projet comme ça.

Le reste du code n'est qu'un exemple pour montrer ce que ça fait.

Pour toi, dans ton code, tu remplace juste MkDir par MakeSureDirectoryPathExist

---- Sevyc64  (alias Casy) ----<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #
0
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
8 nov. 2006 à 18:16
Ben oui Jean-Marc, il y a plus simple. La solution que je donne, tout est fait en 1 seule ligne

MakeSureDirectoryPathExist TonChemin

Essaye l'exemple donné dans ma première réponse

---- Sevyc64  (alias Casy) ----<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #
0
cs_JMO Messages postés 1854 Date d'inscription jeudi 23 mai 2002 Statut Membre Dernière intervention 24 juin 2018 27
8 nov. 2006 à 18:21
 Re,
Merci casy,
mais je script en vbs (fso, wsh,wmi....).

jean-marc
0
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
8 nov. 2006 à 18:38
t'as pas accès aux API en vbs ???

---- Sevyc64  (alias Casy) ----<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #
0
Mazhe Messages postés 17 Date d'inscription mardi 24 octobre 2006 Statut Membre Dernière intervention 15 novembre 2006
9 nov. 2006 à 09:11
Bon, pour jouer un peu plus mon BôOlay, en fait, j'ai un bouton "Copier" qui dit ceci :

Private Sub Copier_Click()
    If Fso.FolderExists(Dest) = True Then
   
        Call Fso.CopyFolder(Dest & "*", DestOld, True)
        Call Fso.CopyFolder(Source & "*", Dest, True)
      
    Else
   
        Fso.CreateFolder (Dest)
      
        Call Fso.CopyFolder(Dest & "*", DestOld, True)
        Call Fso.CopyFolder(Source & "*", Dest, True)
   
    End If


Set Fso = Nothing


End Sub

Rien de bien compliqué en soi mais je l'insère à la place de la ligne en gras le MakeSure... ?
Est-ce que je peux la déclarer comme ceci :

Private Declare Function MakeSureDirectoryPathExists Lib"imagehlp.dll" (ByVal lpPath As String) As Long

Private Sub Form_Load()

       MakeSureDirectoryPathExists (Dest)
End Sub
0
Mazhe Messages postés 17 Date d'inscription mardi 24 octobre 2006 Statut Membre Dernière intervention 15 novembre 2006
9 nov. 2006 à 09:27
Et ben suis-je bête... >_<

Je te remercie beaucoup, j'm'en va essayer ça de suite....

(veuillez m'excuser pour mes questions de nôOb, mes dernières notions de Vb datent de 1998 -___-' )
0
Mazhe Messages postés 17 Date d'inscription mardi 24 octobre 2006 Statut Membre Dernière intervention 15 novembre 2006
9 nov. 2006 à 09:38
Mais lorsque je lance mon "appli", j'ai un "chemin d'accès introuvable".

En vérifiant, le MakeSure me créé bien C:\TEMP\PDR\DC mais il me manque le QUALIF. J'ai pourtant bien spécifié ma variable Dest en tant que :

Dest = "c:\temp\pdr\dc\qualif"

Y'a un paramètre en + pour cette fonction ?

(Arf...La touche F1 est mon amie... J'y retourne) ^^
0
Mazhe Messages postés 17 Date d'inscription mardi 24 octobre 2006 Statut Membre Dernière intervention 15 novembre 2006
9 nov. 2006 à 09:46




0
cs_JMO Messages postés 1854 Date d'inscription jeudi 23 mai 2002 Statut Membre Dernière intervention 24 juin 2018 27
9 nov. 2006 à 12:27
 Bonjour à tous....

J'ai fait une recherche google une "imagehlp.dll".
Il s'avère que cette dll est "parfois, souvent", verolée.
J'en reviens donc à "mon" script fonctionnel, qui est
facilement adaptable en vb6 (ajout des As...)

jean-marc
0
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
9 nov. 2006 à 13:32
Plus de précision Jean-Marc ????

Perso j'ai jamais eu de soucis avec.

---- Sevyc64  (alias Casy) ----<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #
0
cs_JMO Messages postés 1854 Date d'inscription jeudi 23 mai 2002 Statut Membre Dernière intervention 24 juin 2018 27
9 nov. 2006 à 13:37
 Bonjour à tous....
bonjour Casy
ex: http://www.faqoe.com/rep/err8.htm
D'autres messages mettent en cause Outlook".

jean-marc
0
Mazhe Messages postés 17 Date d'inscription mardi 24 octobre 2006 Statut Membre Dernière intervention 15 novembre 2006
9 nov. 2006 à 16:22
Donc, merky beaucoup...

Ceci étant, voici mon niou problème :
______________________________________
Private Sub Copier_Click()
    If Fso.FolderExists(Dest) = True Then
   
        If MsgBox("Etes vous sur de vouloir copie " & Source & " vers " & Dest, vbQuestion + vbYesNo, "Confiramtion") = vbYes Then
                MsgBox ("Copie en cours")
                Call Fso.CopyFolder(Dest & "*", DestOld, True)
                Call Fso.CopyFolder(Source & "*", Dest, True)
                MsgBox ("copie terminée")
...
_______________________________________

Donc, en cliquant sur "Oui" de la msgbox demandant confirmation, je souhaiterais avoir juste une fenêtre indiquant "Copie en cours"... La msgbox que j'ai mis en gras le fait bien mais demande que l'on clic sur le bouton OK pour lancer la copie.... Or, étant donné qu'il y a quelques fichiers à copier, on a l'impression que l'appli a buggé.

Y parait qu'insérer une progressbar, c'est un peu miséreux donc, je voulais juste avoir un message "copie en cours" puis, une fois fini la msgbox "Copie terminée"...

Comment puis-je faire siouplait ?

Ah Ah ! chui chiant hein :)

Bien à vous.
0
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
9 nov. 2006 à 17:47
Il faut que tu te crée ta propre fenêtre pour ça.
tu un .shox pour l'afficher à la place de la msgbox, et un unload à la place de la seconde msgbox.

---- Sevyc64  (alias Casy) ----<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #
0
Mazhe Messages postés 17 Date d'inscription mardi 24 octobre 2006 Statut Membre Dernière intervention 15 novembre 2006
15 nov. 2006 à 11:11
Ben en fait, j'ai fais ceci :

If MsgBox("Etes vous sur de vouloir copie " & Source & " vers " & Dest, vbQuestion + vbYesNo, "Confiramtion") = vbYes Then
                cec.Show 1
               
                Unload Me
                MsgBox ("copie terminée")
       
        End If

Dans la feuille cec, j'ai créé un "label" : Copie en cours...

Mais niveau code de la copie, je sais pas trop comment faire...

A l'origine, c'était ceci :

If MsgBox("Etes vous sur de vouloir copie " & Source & " vers " & Destination, vbQuestion + vbYesNo, "Confiramtion") = vbYes Then
             
        Call Fso.CopyFolder(Dest & "*", DestOld, True)
        Call Fso.CopyFolder(Source & "*", Dest, True)
   
End If

Mais je souhaitais avoir une fenêtre indiquant "copie en cours" pendant la copie (pour éviter que l'on croit que ça plante) et qui se ferme pour laisser apparaitre un "copie terminée"...

En recopiant les Call Fso.copyfolder.... dans la feuille CeC, bien entendu, les variables ne sont pas reconnues (dest, destold, etc...)

Pouvez-vous m'aider siouplait ? :)
0
Rejoignez-nous