Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Comment briser une chaine de caractères représentant l'arboresen ce de dossier ?

9 réponses
Avatar
Lolo
Bonjour à tous

Soit une variable myPath = "C:\Dossier01\Dossier02\Dossier03\Dossier04"

J'aimerais créer ce dossiers ainsi que ses sous-dossiers alors qu'aucun d'eux n'existe préalablement, ce via VBA.

Seulement, si j'utilise la commande "MkDir", je suis obligé d'abord de créer Dossier01, puis Dossier02,etc (car pour faire 'MkDir "C:\Dossier01\Dossier02\Dossier03\Dossier04"', cette commande ne s'adressant qu'à Dossier04, il faut avoir préablablement créer les autres dossiers ... et faire d'autant de MkDir qu'il y a de sous-répertoires, pfffff)

Donc pour ce faire, je devrais faire une recherche dans la variable myPath du caractère "\" pour extraire les noms de dossiers à créer l'un après l'autre.... Qqn pour m'aider? Ou me trouver une solution plus directe que ce "MkDir" ?

Merci d'avance!!!

9 réponses

Avatar
Emcy
Salut,

utilises la commande split


-----Message d'origine-----
Bonjour à tous

Soit une variable myPath = "C:Dossier01Dossier02
Dossier03Dossier04"


J'aimerais créer ce dossiers ainsi que ses sous-
dossiers alors qu'aucun d'eux n'existe préalablement, ce

via VBA.

Seulement, si j'utilise la commande "MkDir", je suis
obligé d'abord de créer Dossier01, puis Dossier02,etc

(car pour faire 'MkDir "C:Dossier01Dossier02Dossier03
Dossier04"', cette commande ne s'adressant qu'Ã
Dossier04, il faut avoir préablablement créer les
autres dossiers ... et faire d'autant de MkDir qu'il y a
de sous-répertoires, pfffff)

Donc pour ce faire, je devrais faire une recherche dans
la variable myPath du caractère "" pour extraire les

noms de dossiers à créer l'un après l'autre.... Qqn
pour m'aider? Ou me trouver une solution plus directe que
ce "MkDir" ?

Merci d'avance!!!
.



Avatar
Lolo
Je vois la commande Split, mais j'ignore comment récupérer ce que j'extrais... Peux-tu me donner un exemple stp? merci :-

----- Emcy a écrit : ----

Salut

utilises la commande spli


-----Message d'origine----
Bonjour à tou
Soit une variable myPath = "C:Dossier01Dossier0
Dossier03Dossier04


J'aimerais créer ce dossiers ainsi que ses sous
dossiers alors qu'aucun d'eux n'existe préalablement, ce


via VBA
Seulement, si j'utilise la commande "MkDir", je suis
obligé d'abord de créer Dossier01, puis Dossier02,etc


(car pour faire 'MkDir "C:Dossier01Dossier02Dossier0
Dossier04"', cette commande ne s'adressant qu'Ã
Dossier04, il faut avoir préablablement créer les
autres dossiers ... et faire d'autant de MkDir qu'il y a
de sous-répertoires, pfffff
Donc pour ce faire, je devrais faire une recherche dans
la variable myPath du caractère "" pour extraire les


noms de dossiers à créer l'un après l'autre.... Qqn
pour m'aider? Ou me trouver une solution plus directe que
ce "MkDir"
Merci d'avance!!






Avatar
Emcy
Sub Test()

Dim MonTableau As Variant
Dim MonChemin As String

MonChemin = "c:TotoTataTiti"

MonTableau = Split(MonChemin, "")

For i = 0 To UBound(MonTableau)
MsgBox (MonTableau(i))
Next i

End Sub

ça te va ?



-----Message d'origine-----
Je vois la commande Split, mais j'ignore comment
récupérer ce que j'extrais... Peux-tu me donner un

exemple stp? merci :-)

----- Emcy a écrit : -----

Salut,

utilises la commande split


-----Message d'origine-----
Bonjour Ãf tous
Soit une variable myPath = "C:Dossier01Dossier02
Dossier03Dossier04"


J'aimerais crÃf©er ce dossiers ainsi que ses
sous-



dossiers alors qu'aucun d'eux n'existe
prÃf©alablement, ce

via VBA.
Seulement, si j'utilise la commande "MkDir", je
suis



obligÃf© d'abord de crÃf©er Dossier01, puis
Dossier02,etc

(car pour faire 'MkDir "C:Dossier01Dossier02
Dossier03

Dossier04"', cette commande ne s'adressant qu'Ãf
Dossier04, il faut avoir prÃf©ablablement crÃf©er
les

autres dossiers ... et faire d'autant de MkDir
qu'il y a

de sous-rÃf©pertoires, pfffff)
Donc pour ce faire, je devrais faire une
recherche dans



la variable myPath du caractÃf¨re "" pour
extraire les

noms de dossiers Ãf crÃf©er l'un aprÃf¨s
l'autre.... Qqn

pour m'aider? Ou me trouver une solution plus
directe que

ce "MkDir" ?
Merci d'avance!!!
.


.






Avatar
Lolo
ça me va... j'avais fini par trouver par moi-même mais merci !! :-)

Voici donc le code avec gestion d'erreur à ceux qui ça intéresse (création de sous-répertoire pour enregistrement du fichier ouvert)


Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)

Application.DisplayAlerts = False
On Error Resume Next

myPath = "C:Dossier01Dossier02Dossier03" 'peut faire référence à une cellule nommée aussi ;-)

Dim Tableau As Variant
Tableau = Split(myPath, "", -1)
Chemin = Tableau(0)

For i = 1 To UBound(Tableau) Step 1
Chemin = Chemin & "" & Tableau(i)
MkDir Chemin
Next

ChDir myPath

.........
End Sub
Avatar
gilbert
Bonjour Lolo

Est-ce que cela peut faire

Sub creadossier()
racine = "D:"
'dossier => donner une valeur avec ce que vous désirez _
comme nom de dossier
For i = 1 To 4
MkDir (racine & "dossier" & (i))
rep = (racine & "dossier" & (i))
racine = rep & ""
Next
End Sub

ou

Sub créadossiersdif()
racine = "D:"
nbdossier = InputBox("Indiquez le nombre de dossiers à créér", "Nombre de
dossiers", "4")
If nbdossier = "" Then Exit Sub
If nbdossier < 1 Then GoTo erreur
For i = 1 To 4
dossier = InputBox("Donnez un nom au dossier n°" & i, "Nom de Dossier",
"Dossier")
If dossier = "" Then Exit For
MkDir (racine & dossier) ' & (i))
rep = (racine & dossier) ' & (i))
racine = rep & ""
Next
msg = "Les Dossiers :" + vbCrLf
msg = msg + racine + vbCrLf
msg = msg + "ont été créés"
MsgBox msg
Exit Sub
erreur:
MsgBox "Le nombre de dossiers est incorrect"
End Sub




--
Gilbert
+---------------------------------------------------------------------------
---------------------------+
supprimer 'stpspam' à mon adresse de messagerie pour me joindre directement
. SVP
+---------------------------------------------------------------------------
---------------------------+
"Lolo" a écrit dans le message de
news:
Bonjour à tous

Soit une variable myPath = "C:Dossier01Dossier02Dossier03Dossier04"

J'aimerais créer ce dossiers ainsi que ses sous-dossiers alors qu'aucun
d'eux n'existe préalablement, ce via VBA.


Seulement, si j'utilise la commande "MkDir", je suis obligé d'abord de
créer Dossier01, puis Dossier02,etc (car pour faire 'MkDir

"C:Dossier01Dossier02Dossier03Dossier04"', cette commande ne s'adressant
qu'à Dossier04, il faut avoir préablablement créer les autres dossiers ...
et faire d'autant de MkDir qu'il y a de sous-répertoires, pfffff)

Donc pour ce faire, je devrais faire une recherche dans la variable myPath
du caractère "" pour extraire les noms de dossiers à créer l'un après

l'autre.... Qqn pour m'aider? Ou me trouver une solution plus directe que ce
"MkDir" ?

Merci d'avance!!!


Avatar
Michel Pierron
Bonsoir Lolo;
La procédure ci-dessous crée l'ensemble des directories définis dans Test
Private Declare Function MakeSureDirectoryPathExists _
Lib "imagehlp.dll" (ByVal lpPath As String) As Boolean

Function MkDirAll(PathToCreate As String) As Boolean
On Error GoTo Failed
MkDirAll = MakeSureDirectoryPathExists(PathToCreate)
Exit Function
Failed:
MsgBox Err.Number & vbLf & Err.Description, 48
MkDirAll = False
End Function

Sub Test()
If MkDirAll("C:TestIfItCreatedThisDirectoryStructure") Then
MsgBox "Created directory structure !", 64
End If
End Sub

MP

"Lolo" a écrit dans le message de
news:
Bonjour à tous

Soit une variable myPath = "C:Dossier01Dossier02Dossier03Dossier04"

J'aimerais créer ce dossiers ainsi que ses sous-dossiers alors qu'aucun
d'eux n'existe préalablement, ce via VBA.


Seulement, si j'utilise la commande "MkDir", je suis obligé d'abord de
créer Dossier01, puis Dossier02,etc (car pour faire 'MkDir

"C:Dossier01Dossier02Dossier03Dossier04"', cette commande ne s'adressant
qu'à Dossier04, il faut avoir préablablement créer les autres dossiers ...
et faire d'autant de MkDir qu'il y a de sous-répertoires, pfffff)

Donc pour ce faire, je devrais faire une recherche dans la variable myPath
du caractère "" pour extraire les noms de dossiers à créer l'un après

l'autre.... Qqn pour m'aider? Ou me trouver une solution plus directe que ce
"MkDir" ?

Merci d'avance!!!


Avatar
Alain CROS
Bonjour.

Il manque un "" à la fin.

MakeSureDirectoryPathExists "C:TestIfItCreatedThisDir
ectoryStructure"

Cette fonction retourne théoriquement faux quand une
partie des répertoires existe déjà mais elle me retourne
toujours vrai.

Alain CROS.

-----Message d'origine-----
Mmmmm je pense qu'il y a une erreur de déclaration dans
ton code :-/

.



Avatar
Michel Pierron
Bonjour Alain; sauf échec lors de la création, cette fonction retourne toujours
vrai puisque si le chemin mentionné existe, c'est tout bon et dans le cas
contraire, chemin incomplet ou inexistant, la fonction crée les manques.
MP

"Alain CROS" a écrit dans le message de
news:688701c3e62c$6b06c0a0$
Bonjour.

Il manque un "" à la fin.

MakeSureDirectoryPathExists "C:TestIfItCreatedThisDir
ectoryStructure"

Cette fonction retourne théoriquement faux quand une
partie des répertoires existe déjà mais elle me retourne
toujours vrai.

Alain CROS.

-----Message d'origine-----
Mmmmm je pense qu'il y a une erreur de déclaration dans
ton code :-/

.



Avatar
Alain CROS
Bonjour Michel

Pourtant la doc ...

Each directory specified is created, if it does not
already exist. If only some of the directories are
created, the function will return FALSE.

Alain CROS.

-----Message d'origine-----
Bonjour Alain; sauf échec lors de la création, cette
fonction retourne toujours

vrai puisque si le chemin mentionné existe, c'est tout
bon et dans le cas

contraire, chemin incomplet ou inexistant, la fonction
crée les manques.

MP

"Alain CROS" a écrit dans le message de
news:688701c3e62c$6b06c0a0$
Bonjour.

Il manque un "" à la fin.

MakeSureDirectoryPathExists "C:TestIfItCreatedThisDi
r

ectoryStructure"

Cette fonction retourne théoriquement faux quand une
partie des répertoires existe déjà mais elle me retourne
toujours vrai.

Alain CROS.

-----Message d'origine-----
Mmmmm je pense qu'il y a une erreur de déclaration dans
ton code :-/

.




.