Microsoft 365 Créer un sous-dosser par Client

Usine à gaz

XLDnaute Barbatruc
Supporter XLD
Bonjour à toutes et à tous,

Je me tourne vers nos ténors pour la création de sous dossiers (1 par Client) et je ne vois pas vraiment comment automatiser en codage.

J'ai 2 dossiers pour les Clients :
- Factures qui contient environ 2000 factures,
- Relevés Situation Packs qui contient environ 3500 relevés,

Que ce soit les factures ou les relevés, le nom des fichiers commence toujours pas le nom du Client :
- Truc Sylvie 20210908 Votre Fact Achat Pack,
- Machin Jean-Luc - 18122017 Votre achat Pack Rest 14 RdV,
- Autre Danièle 12082016 2 100,

Pour une bien meilleure visibilité, j'aimerais les regrouper en sous-dossiers clients, c'est dire créer dans le dossier.
- Factures des sous-dossiers au nom de chaque client,
- Relevés des sous-dossiers au nom de chaque client,
ce qui donnerait, photo jointe :
1670517524265.png

Je pourrais le faire avec mes petites mains lol mais pour presque 6000 documents, je vais y passer le reste de ma vie.

Auriez-vous une solution = clic et youpi, c'est fait lol 🤣😇
Ce serait génial, mais est-ce possible ?
Merci déjà pour m'avoir lu...
:)
 
Dernière édition:
Solution
Bonjour Lionel, le forum,

Après avoir créé les sous-dossiers avec la macro du post #19 il est facile d'annuler l'opération en détruisant les sous-dossiers avec cette macro :
VB:
Sub Detruire_dossiers()
Dim chemin$, a, fso As Object, dossier, sf As Object, fichier As Object
chemin = ThisWorkbook.Path & "\"
a = Array("Factures", "Relevés Situation Packs")
Set fso = CreateObject("Scripting.FileSystemObject")
For Each dossier In a
    For Each sf In fso.GetFolder(chemin & dossier).SubFolders
        For Each fichier In sf.Files
            fso.MoveFile chemin & dossier & "\" & sf.Name & "\" & fichier.Name, chemin & dossier & "\" & fichier.Name
        Next fichier
        RmDir chemin & dossier & "\" & sf.Name 'supprime le sous-dossier
Next...

TooFatBoy

XLDnaute Barbatruc
hors dans une boucle sur fichier pour récupérer le nomprenom daniel et sylvie ça ira mais jean luc on va avoir un problème avec le tiret tout du moins il faudra trifouiller le string pour éliminer le tiret avant la date
et je suppose que l'on va trouver encore d'autres trucs du genre dans le nommage de tes fichiers
Je n'ai pas compris : c'est hors d'une boucle, ou c'est dans une boucle ???

Pas compris non plus, si boucle il y a, pourquoi faire une boucle sur un fichier ?
Que doit faire cette boucle sur ce fichier ? Est-ce pour extraire nom, prénom, etc. ?


Ce n'est pas "nomprenom", c'est "nom prénom" séparés par une espace.
De même, ce n'est pas "jean luc", c'est "Jean-Luc" non pas en deux mots mais en un seul mot comme les autres prénoms, ce qui simplifie donc le traitement, logiquement.


Tu me sembles compliquer les choses. Nan ?
Ceci dit, je serais bien incapable de faire ce que demande Lionel, donc peut-être faut-il effectivement compliquer les choses pour qu'elles soient au final plus simples à traiter. 🤔
 

job75

XLDnaute Barbatruc
Bonjour Lionel et les autres,

Télécharge le fichier et les 2 dossiers zippés joints dans le même répertoire (le bureau).

La macro n'est guère compliquée :
VB:
Sub Creer_dossiers()
Dim chemin$, a, fso As Object, dossier, fichier As Object, nom$, i%, nouveauchemin
chemin = ThisWorkbook.Path & "\"
a = Array("Factures", "Relevés Situation Packs")
Set fso = CreateObject("Scripting.FileSystemObject")
For Each dossier In a
    For Each fichier In fso.GetFolder(chemin & dossier).Files
        nom = fichier.Name
        For i = 1 To Len(nom)
            If IsNumeric(Mid(nom, i, 1)) Then
                nom = Left(nom, i - 1)
                nom = Trim(Replace(nom, "-", " "))
                nouveauchemin = chemin & dossier & "\" & nom & "\"
                If Dir(nouveauchemin, vbDirectory) = "" Then MkDir nouveauchemin 'crée le sous-dossier
                fso.MoveFile chemin & dossier & "\" & fichier.Name, nouveauchemin & fichier.Name
                Exit For
            End If
Next i, fichier, dossier
End Sub
A+
 

Pièces jointes

  • Dossier.zip
    51 KB · Affichages: 13

TooFatBoy

XLDnaute Barbatruc
Pour tester j'ai créé dans le 1er dossier 2000 factures nommées Nom0001.xlsx à Nom2000.xlsx

Et dans le 2ème dossier 3500 relevés nommés Nom0001.xlsx à Nom3500.xlsx.

La macro du post #19 s'exécute chez moi en 20 secondes.
Tu peux déjà prévoir la macro inverse pour la semaine prochaine quand Yoyo se sera rendu compte que c'était une erreur de compliquer l'accès aux fichiers... 😅


[edit] Quoi que... vu que c'est se compliquer la tâche, ça risque de lui plaire. ;) [/edit]
 

Bernard_XLD

XLDnaute Barbatruc
Membre du Staff
Re,
C'est bien... inutile
Si Lionel trouve ces dossiers plus pratiques pour lui, c'est de toute façon lui qui va les utiliser et c'est sa discussion.
🎶 Chacun fait fait fait s'qui lui plait plait plait. 🎶
C'est tout à fait cela ! et également, rien n'oblige à lui répondre ou à lui apporter une solution si le principe ne plait pas.

Cordialement, @+
 

TooFatBoy

XLDnaute Barbatruc
rien n'oblige à lui répondre ou à lui apporter une solution si le principe ne plait pas.
On est parfaitement d'accord : si le principe ne plait pas, et même si le principe plait, on n'est pas obligé de répondre.

Mais on peut aussi essayer d'aider quand on n'est pas d'accord avec le principe.
Je l'ai souvent fait, comme tout le monde ici je pense. ;)
D'où, d'une part mon conseil de normaliser ses noms de fichiers, et d'autre part ma question sur les formats actuels de ses noms de fichiers.

Ceci dit, après avoir réfléchi (si si, ça m'arrive parfois), le format importe peu puisque les fichiers sont déjà dans deux dossiers.
 
Dernière édition: