Partage
  • Partager sur Facebook
  • Partager sur Twitter

[EXCEL] Macro création de répertoire

Répertoires, sous répertoires, avec ajout de dossiers référents

Sujet résolu
    30 juillet 2020 à 19:17:11

    Bonjour à tous et toutes,

    Cela fais plusieurs jours que je bute, sur le même sujet, je m'approche de la solution mais mes connaissances me font défaut.

    Voici mon objectif:

    A partir d'un tableau EXCEL, contenant 5 colonnes, je souhaiterais pouvoir créer des répertoires en fonction de la colonne A, puis des sous répertoires à partir de la colonne B en arborescence jusqu’à E.

    Exemple à partir de cette image:

    En exécutant la macro, les dossiers A1, A2, A3, A4 et A5 sont créer.

    Dans le dossier A1, j'ai un sous dossier B1

    Dans le sous dossier B1, j'ai le sous sous dossier C1

    Dans le sous sous sous dossier C1, j'ai le sous sous sous sous dossier D1

    Et dans le sous sous sous sous dossier D1, j'ai le sous sous sous sous sous dossier E1

    Et cela donc pour les 5 dossiers initialement créer (A1, A2, A3, A4 et A5)

    Enfin, il faudrait que les dossiers créer à partir de la Colonne E, intègre des dossiers qui n'existe pas dans mon tableau, que l'on va appeler par exemple dossier 1, dossier 2, dossier 3.

    C'est 3 dossiers sont des dossiers référent.

    Merci d'avance pour votre aide.

    Bonne soirée.

    • Partager sur Facebook
    • Partager sur Twitter
      31 juillet 2020 à 12:16:58

      Montre nous ton code, si tu as commencé, pour voir où ça peut bloquer (en modifiant les éventuelles données sensibles).
      Il me semble qu'il manque une information: le répertoire de base (à moins que dans Ax, tu indiques le chemin complet du répertoire; ou que tu le définisses ou le récupères ailleurs).
      Sans donner de code, le principe pour moi serait de parcourir chaque ligne(1ère boucle sur les lignes) et de créer les répertoires en parcourant les colonnes (2nde boucle imbriqué dans la 1ère) et pour finir, créer tes 3 derniers dossiers.
      • Partager sur Facebook
      • Partager sur Twitter
        4 août 2020 à 9:56:24

        Voici le code utilisé et que je n'arrive pas à modifier, je précise par la même occasion que je travail sous Excel 2007.

        Option Explicit
        Sub CreationRepertoires()
            Dim DossierDeDepart As String
            Dim lig As Long, col As Long, i As Long
            On Error Resume Next
            DossierDeDepart = ActiveWorkbook.Path & "\"
            'ou chemin de ton choix par exemple
            'DossierDeDepart = "D:\"
            For i = 1 To Cells(1, Columns.Count).End(xlToLeft).Column
                MkDir DossierDeDepart & Cells(1, i)
                For col = 1 To Cells(2, Columns.Count).End(xlToLeft).Column
                    MkDir DossierDeDepart & Cells(1, i) & "\" & Cells(2, col).Value
                    For lig = 3 To Cells(Rows.Count, col).End(xlUp).Row
                        MkDir DossierDeDepart & Cells(1, i) & "\" & Cells(2, col).Value & "\" & Cells(lig, col).Value
                    Next
                Next
            Next
        End Sub
        



        • Partager sur Facebook
        • Partager sur Twitter
          7 août 2020 à 14:29:47

          Bonjour,

          Ton tableau il est en 2D, et toi tu veux créer des dossiers imbriqués en te balladant sur les colonnes.

          Donc tu fais une double boucle for d'abord sur les lignes, puis sur les colonnes. Enfin tu as juste qu'a enregistrer où tu es arrivé dans le chemin pour continuer d'imbriquer à chaque colonne. Et tu réinitialise le chemin pour chaque ligne (histoire de reprendre à la racine)

          ca donne un truc comme ça je pense (si j'ai bien compris):

          Option Explicit
          Sub CreationRepertoires()
              Dim DossierDeDepart As String
              Dim lig As Long, col As Long, i As Long
              On Error Resume Next
              DossierDeDepart = ActiveWorkbook.path & "\"
              'ou chemin de ton choix par exemple
              'DossierDeDepart = "D:\"
              
              For i = 1 To Cells(1, Columns.Count).End(xlToLeft).Column
                  Dim path As String
                  path = "\" & Cells(1, i).Value
                  MkDir DossierDeDepart & path
                  Dim j As Integer
                  For j = 2 To Cells(Rows.Count, 1).End(xlUp).Row
                      path = path & "\" & Cells(j, i).Value
                      MkDir DossierDeDepart & path
                  Next
                  If (i = 5) Then 'dossier spe pour juste le dernier
                          MkDir DossierDeDepart & path & "\dosser spé last 1"
                          MkDir DossierDeDepart & path & "\dosser spé last 2"
                          MkDir DossierDeDepart & path & "\dosser spé last 3"
                  End If
              Next
          End Sub
          

          et pour tes dossiers spéciaux tu fais une exception quand tu es à la colonne E

          A+

          EDIT : j'avais compris dans l'autre sens, j'ai update le code 
          Tu voulais faire tes sous-dossiers en itérant sur les lignes, donc la double boucle for il faut d'abord sur les colonnes, puis les lignes. Le raisonnement reste le meme. Je suis juste plus très sûr dans quel sens le faire, l'image me porte à confusion voilà dans l'autre sens néanmoins:

          Option Explicit
          Sub CreationRepertoires()
              Dim DossierDeDepart As String
              Dim lig As Long, col As Long, i As Long
              On Error Resume Next
              DossierDeDepart = ActiveWorkbook.path & "\"
              'ou chemin de ton choix par exemple
              'DossierDeDepart = "D:\"
              
              For i = 1 To Cells(Rows.Count, 1).End(xlUp).Row
                  Dim path As String
                  path = "\" & Cells(i, 1).Value
                  MkDir DossierDeDepart & path
                  Dim j As Integer
                  For j = 2 To Cells(1, Columns.Count).End(xlToLeft).Column
                      path = path & "\" & Cells(i, j).Value
                      MkDir DossierDeDepart & path
                      
                      If (j = 5) Then 'dossier spe pour chaque E
                              MkDir DossierDeDepart & path & "\dosser spé 1"
                              MkDir DossierDeDepart & path & "\dosser spé 2"
                              MkDir DossierDeDepart & path & "\dosser spé 3"
                      End If
                  Next
              Next
          End Sub
          



          -
          Edité par WexyR 7 août 2020 à 14:51:09

          • Partager sur Facebook
          • Partager sur Twitter
          Si je suis tête en l'air, c'est par habitude de viser le sommet
            14 août 2020 à 15:36:27

            WexyR

            Merci pour ton retour,

            on ce rapproche tres fortement de ce que je recherche, en effet, j'ai utilisé un terme inapproprié, ce ne sont pas 3 dossiers que je veux utiliser en dossierdedepart mais plutôt 3 fichiers.

            Je suis en plein travail, donc je ne me suis pas encore penché sur le code, si jamais je repasse avant toi, je partagerais mon code, sinon je suis preneur pour ton retour sur le sujet, mais a première vue, c'est la ligne 6 qu'il faut modifier pour appeler des fichiers et non des dossiers.

            En tout cas merci beaucoup pour ce premier retour, tu as tapé dans le mille.

            • Partager sur Facebook
            • Partager sur Twitter
              17 août 2020 à 11:43:35

              Wolfy81100 a écrit:

               ce ne sont pas 3 dossiers que je veux utiliser en dossierdedepart mais plutôt 3 fichiers.


              euh, un fichier ne peut pas contenir de dossier, ou je n'ai pas compris un truc.

              Ce que je crois comprendre de ton code:
              ligne1 : ce sont les dossiers de base par rapport au chemin du fichier excel

              dans chacun de ses dossiers, on créé les sous-répertoires de la ligne 2 et dans chacun des sous-répertoires, on crée les sous-dossiers des lignes sous la colonne correspondante.
              En suivant ta capture en exemple, dans le chemin défini par la case A1, on a les sous-répertoires "01 A0", "02 bidder list" (qui lui a des sous-répertoires "bidder1" et bidder2"), "03 offres" (qui a les sous-répertoires "bidder1" et "bidder2"), "04 TCO" , "05 commande" (qui a les répertories "01 cde de base", "02 annexes" etc, et dans chacun de ces sous-dossiers, on y met les dossiers référents ), et idem pour "06 progress".
              Si j'ai bien compris ?

              • Partager sur Facebook
              • Partager sur Twitter
                17 août 2020 à 15:41:45

                Umfred,

                Dans l'exemple donnée cela va donnée la hiérarchie suivante:

                Dossier "A1"

                      Sous-Dossier "B1"

                            Sous-Dossier "C1"

                                  Sous-Dossier "D1"

                                        Sous-Dossier "E1"

                                              Fichier 1

                                              Fichier 2

                                              Fichier 3

                Bien entendu cela ce répercute pour l'ensemble des lignes (idem pour A2, A3,...)

                A l'heure actuelle le code de WexyR fonctionne parfaitement pour la création des répertoires, ce qu'il me manque, c'est l'ajouter des 3 fichiers dans le répertoire de la colonne "E"

                • Partager sur Facebook
                • Partager sur Twitter
                  17 août 2020 à 17:14:26

                  Je parlais de ton exemple concret, qui semble légèrement différent de la demande initiale (dans le fichier excel que tu nous présente, j'ai l'impression (à tort, peut-être) que les répertoires s'organisent:

                  (A1)

                      01 A0

                      02 bidder list

                          bidder1

                          bidder2

                      03 offres

                          bidder1

                          bidder2

                     04 TCO

                     05 Commande

                         01 cde de base

                             fichier1

                             fichier2

                             fichier3

                  et non pas

                  (A1)

                      01 A0

                          02 bidder list

                              03 offres

                                 04 TCO

                                    05 Commande

                                        06 Progress

                                             fichier1

                                             fichier2

                                             fichier3

                                        2 YSPL

                                             fichier1

                                             fichier2

                                             fichier3

                                      [...]

                                    01 cde de base

                                        06 Progress

                                             fichier1

                                             fichier2

                                             fichier3

                                        2 YSPL

                                             fichier1

                                             fichier2

                                             fichier3

                                      [...]

                                  [...]

                  Pour l'ajout du fichier, au lieu des MkDir DossierDeDepart & path & "\dosser spé 1", il faut faire FileCopy CheminSource & "\" & NomFichier1,  DossierDeDepart & path & "\" & NomFichier1 pour chacun des fichiers (on fait une copie des fichiers à partir d'un répertoire source)

                  -
                  Edité par umfred 17 août 2020 à 17:27:55

                  • Partager sur Facebook
                  • Partager sur Twitter
                    18 août 2020 à 17:27:22

                    Umfred,

                    Je viens de tenter d'insérer ton code dans le code précèdant, mais je n'arrive pas à faire fonctionner la copie des fichiers:

                    Option Explicit
                    Sub CreationRepertoires()
                        Dim DossierDeDepart As String
                        Dim CheminSource As String
                        Dim lig As Long, col As Long, i As Long
                        On Error Resume Next
                        DossierDeDepart = ActiveWorkbook.path & "\"
                        'ou chemin de ton choix par exemple
                        'DossierDeDepart = "D:\"
                         
                        For i = 1 To Cells(Rows.Count, 1).End(xlUp).Row
                            Dim path As String
                            path = "\" & Cells(i, 1).Value
                            MkDir DossierDeDepart & path
                            Dim j As Integer
                            For j = 2 To Cells(1, Columns.Count).End(xlToLeft).Column
                                path = path & "\" & Cells(i, j).Value
                                MkDir DossierDeDepart & path
                                 
                                If (j = 5) Then 'dossier spe pour chaque E
                                        FileCopy CheminSource & "\" & "fichier1.xls", DossierDeDepart & path & "\" & "fichier1.xls"
                                        FileCopy CheminSource & "\" & "fichier2.xlsx", DossierDeDepart & path & "\" & "fichier2.xlsx"
                                        FileCopy CheminSource & "\" & "fichier3.xlsx", DossierDeDepart & path & "\" & "fichier3.xlsx"
                                End If
                            Next
                        Next
                    End Sub

                    Lors de l'insertion de ton code, le logiciel me remonter l'information comme quoi la variable n'était pas renseigné.

                    Du coup j'ai ajouter la ligne

                    "Dim CheminSource As String"

                    En début de script, mais ce n'est peut être pas la bonne solution.

                    J'ai également testé de mettre des "\" avant les noms de fichier, mais cela n'a à mon avis aucune incidence si ce n'est la prise en compte de répertoire par rapport au chemin voulu.

                    Edit: C'est bon j'ai trouvé, j'avais légèrement oublié d'informé ou ce trouver les fichiers à copier.

                    Je vais faire quelques test avant de revenir vers vous avec le code final, afin que la communauté puisse profiter du script si besoin.

                    Concernant ce code, quel modification doit être apporté si je souhaite arrêter la création de sous répertoire à la colonne "C" par exemple? mais que les colonnes "D" et "E" sont quand meme complétés.

                    Merci à vous 2.

                    Petite question optionnelle.

                    est il possible si je rajoute des colonnes, afin de compléter automatiquement un des fichiers xls avec des valeurs.

                    Imaginons que je veuille ajouter une liste de prénom dans la colonne "F" pour que le "fichier 1" soit remplit avec les valeurs de cette colonne.

                    -
                    Edité par Wolfy81100 19 août 2020 à 8:23:23

                    • Partager sur Facebook
                    • Partager sur Twitter

                    [EXCEL] Macro création de répertoire

                    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                    × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                    • Editeur
                    • Markdown