IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Macro création Dossier\Sous-dossier en concaténant des cellule d'une ligne [XL-365]


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Janvier 2015
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Transports

    Informations forums :
    Inscription : Janvier 2015
    Messages : 57
    Points : 34
    Points
    34
    Par défaut Macro création Dossier\Sous-dossier en concaténant des cellule d'une ligne
    Bonjour,

    Sur la base du tableau ci-joint j'aimerais créer une macro permettant de créer sur un partage réseau (\\myshare) un dossier et son sous dossier pour chaque ligne selon la règle suivante :

    \\myshare\Tableau1[contrat]\Tableau1[folder]

    Du coup je me demandais s'il y avait moyen de déclarer une variable ayant pour valeur : \\myshare\Tableau1[contrat]\Tableau1[folder]
    Puis de demander à VBA de vérifier l'existence de ce chemin et de créer le dossier "Tableau1[contrat]" et le sous dossier "Tableau1[folder]" le cas échéant.


    Merci d'avance pour votre aide
    Fichiers attachés Fichiers attachés

  2. #2
    Membre chevronné Avatar de Thumb down
    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2019
    Messages
    1 419
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juin 2019
    Messages : 1 419
    Points : 2 178
    Points
    2 178
    Par défaut
    Bonjour,
    si le ou les sous dossier existe c'est pas grave!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Sub test()
      With CreateObject("Wscript.Shell")
        .Run "cmd /c mkdir c:\Toto\Toto\Toto\Toto\Toto\Toto\Toto"
     End With
    End Sub

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Janvier 2015
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Transports

    Informations forums :
    Inscription : Janvier 2015
    Messages : 57
    Points : 34
    Points
    34
    Par défaut
    Bonjour,

    Merci pour ta réponse.
    Mais comment je déclare le contenu de mes cellules ?

    Merci encore

  4. #4
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 927
    Points
    55 927
    Billets dans le blog
    131
    Par défaut
    Salut.

    Tu peux itérer sur les cellules de la colonne de ton tableau grâce aux références structurées. Du coup, voici qui pourrait convenir:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    Sub test()
      Dim Path As String
      Dim r As Range
     
      Path = "c:\data\temp\"
      For Each r In Range("tableau1[folder]")
        CreateFolder Path & r.Value
      Next
    End Sub
     
    Function CreateFolder(Path As String) As Long
      With CreateObject("Wscript.Shell")
        .Run "cmd /c mkdir " & Path
     End With
    End Function
    Bien entendu, tu pourrais aussi renseigner la racine dans une cellule Excel (idéalement nommée) pour ne pas saisir la valeur en dur dans ton code.


    @Thumb: pour l'astuce
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  5. #5
    Membre chevronné Avatar de Thumb down
    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2019
    Messages
    1 419
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juin 2019
    Messages : 1 419
    Points : 2 178
    Points
    2 178
    Par défaut
    Pierre je viens de vérifier et shell suffit!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Shell "cmd /c mkdir '" & Path  & r.Value & "'"

  6. #6
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 927
    Points
    55 927
    Billets dans le blog
    131
    Par défaut
    Salut Thumb,

    J'espère que tu vas bien...

    J'avais testé avec un simple Shell mais j'ai dû mal m'y prendre, car ça ne fonctionnait pas et ça m'ouvrait la fenêtre de commande. Je viens de reprendre le code et tout baigne...


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Sub test()
      Dim Path As String
      Dim r As Range
     
      Path = "c:\data\temp\"
      For Each r In Range("tableau1[folder]")
        Shell "cmd /c mkdir " & Path & r.Value
      Next
    End Sub

    Merci d'avoir vérifié de ton côté
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  7. #7
    Membre chevronné Avatar de Thumb down
    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2019
    Messages
    1 419
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juin 2019
    Messages : 1 419
    Points : 2 178
    Points
    2 178
    Par défaut
    Citation Envoyé par Pierre Fauconnier Voir le message
    Salut Thumb,

    J'espère que tu vas bien...

    De mon côté, Shell ne plante pas mais ne crée rien... Par contre, il ouvre la fenêtre de commande... Alors que la solution avec Wscript.Shell fonctionne bien...
    oui ça fonctionne pas en réseau ma conclusion était prématuré!

    pour moi!

  8. #8
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 927
    Points
    55 927
    Billets dans le blog
    131
    Par défaut
    Pas de

    Essayer et faire des tests ne mérite pas de moinsser, surtout sur des trucs délicats comme les chemins d'accès réseau ...

    De plus, je n'étais pas en chemin réseau mais en local avec le chemin donné dans mon code...

    Yapluka attendre que Sami_xite nous dise comment ça s'est passé de son côté
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  9. #9
    Nouveau membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Janvier 2015
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Transports

    Informations forums :
    Inscription : Janvier 2015
    Messages : 57
    Points : 34
    Points
    34
    Par défaut
    Bonjour Pierre, Thumb,

    J'ai testé vos 2 codes et je confirme que cela fonctionne parfaitement.
    Néanmoins je ne retrouve pas l'arborescence souhaitée, j'ai dû mal m'exprimer
    Pour faire simple sur chaque ligne de mon tableau j'ai une valeur contrat en colonne contrat (tableau1[contrat] ) et une valeur folder (tableau1[folder] )
    J'aimerais que pour chaque ligne la macro créée le dossier nommé selon la valeur contrat puis le sous dossier correspondant à la valeur folder
    Petite précision : Le contrat n'est pas unique, le folder est une valeur unique

    Exemple

    Pièce jointe 595202

    Devra créer: \\myshare\amazon\folder_amazon
    \\myshare\amazon\folder_amazon2
    \\myshare\fnac\folder_fnac
    \\myshare\cultura\folder_cultura

    Merci à vous 2
    Images attachées Images attachées  

  10. #10
    Membre chevronné Avatar de Thumb down
    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2019
    Messages
    1 419
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juin 2019
    Messages : 1 419
    Points : 2 178
    Points
    2 178
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Sub test()
    Const Path As String = "[folder]\[comment]\[contrat]"
    With ThisWorkbook.Sheets("Feuil1")
        For i = 2 To .Range("A1").CurrentRegion.Rows.Count
              CreateFolder Replace(Replace(Replace(Path, "[folder]", .Cells(i, "A")), "[comment]", .Cells(i, "B")), "[contrat]", .Cells(i, "C"))
        Next
     
    End With
    End Sub
    Function CreateFolder(Path As String) As Long
      With CreateObject("Wscript.Shell")
        .Run "cmd /c mkdir " & Path
     End With
    End Function

  11. #11
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 927
    Points
    55 927
    Billets dans le blog
    131
    Par défaut
    Salut

    Tu dois simplement constituer le chemin du dossier en incluant d'abord le contrat puis le folder. Sur base du tableau structuré illustré plus tôt et en utilisant les références structurées pour ne pas "verrouiller" le tableau en A1:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    Sub test()
      Dim Path As String
      Dim i As Long
     
      Path = "c:\data\temp\"
      For i = 1 To Range("tableau1").Rows.Count
        CreateFolder Path & Range("tableau1[contrat]")(i).Value & "\" & Range("tableau1[folder]")(i).Value
      Next
    End Sub
     
    Function CreateFolder(Path As String) As Long
      With CreateObject("Wscript.Shell")
        .Run "cmd /c mkdir " & Path
     End With
    End Function
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  12. #12
    Nouveau membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Janvier 2015
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Transports

    Informations forums :
    Inscription : Janvier 2015
    Messages : 57
    Points : 34
    Points
    34
    Par défaut
    Bonjour Pierre, Thumb

    Lorsque j'execute la macro j'ai effectivement tout un tas de fenêtre DOS qui s'affichent, moyen de ne pas l'afficher ?
    Si la valeur contrat ou folder contient un espace le nom du dossier est tronqué.
    Ex : contrat : amazon france
    Il me crée le répertoire amazon

    Merci et bon WE !!!

  13. #13
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 927
    Points
    55 927
    Billets dans le blog
    131
    Par défaut
    Au départ, j'avais accepté l'idée du Shell qui crée tout le chemin s'il n'existe pas, mais je vais proposer le code suivant, qui va repartir du root et tester l'existence des dossiers, toujours avec le même tableau de départ. On part de l'idée que le Root existe. Du coup, plus de fenêtres de commande intempestives et les espaces passent sans soucis . De plus, on reste dans du VBA pur, ce que je préfère à l'appel d'outils extérieurs lorsque l'on peut s'en passer

    Nom : 2021-04-10_195358.png
Affichages : 174
Taille : 7,7 Ko

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub CreateFolder()
      Dim Root As String
      Dim i As Long
      Dim Path As String
     
      Root = "c:\Data\Temp\Contrats\"
      For i = 1 To Range("t_folders").Rows.Count
        Path = Root & Range("t_Folders[Contrat]")(i).Value
        If Dir(Path, vbDirectory) = "" Then MkDir Path
        Path = Path & "\" & Range("t_folders[Folder]")(i).Value
        If Dir(Path, vbDirectory) = "" Then MkDir Path
      Next
    End Sub
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  14. #14
    Nouveau membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Janvier 2015
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Transports

    Informations forums :
    Inscription : Janvier 2015
    Messages : 57
    Points : 34
    Points
    34
    Par défaut
    Merci Pierre, c'est exactement ce qu'il me fallait
    Une dernière question : Comment exclure la création de dossier si t_Folders[Contrat] est vide ?
    J'ai essayé en mettant : If i.value <> "" mais j'ai une erreur de compilation

    Muchas Gracias

  15. #15
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 927
    Points
    55 927
    Billets dans le blog
    131
    Par défaut
    i est un entier long qui pointe sur chaque ligne du tableau grâce à la boucle. Tu dois donc t'en servir dans la boucle pour tester la valeur de la colonne Contrat de la ième ligne du tableau. Si j'ai bien compris ta demande, tu peux donc encadrer le process d'un test sur la cellule contrat.

    Voici le code commenté

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    Sub CreateFolder()
      Dim Root As String
      Dim i As Long
      Dim Path As String
     
      Root = "c:\Data\Temp\Contrats\" ' Chemin de départ
      For i = 1 To Range("t_folders").Rows.Count ' On boucle avec i de 1 à Nbre de lignes du tableau
        If Range("t_Folders[Contrat]")(i).Value <> "" Then ' On teste si la cellule Contrat n'est pas vide pour la ligne sur laquelle la boucle passe
          Path = Root & Range("t_Folders[Contrat]")(i).Value ' On récupère le nom du contrat pour reconstituer le nom du chemin
          If Dir(Path, vbDirectory) = "" Then MkDir Path ' On teste si ce dossier existe. Si non, on le crée
          Path = Path & "\" & Range("t_folders[Folder]")(i).Value ' On complète le chemin avec le nom du folder
          If Dir(Path, vbDirectory) = "" Then MkDir Path ' On teste si le dossier existe. S'il n'existe pas, on le crée 
        End If
      Next ' On passe à la ligne suivante jusqu'à la dernière
    End Sub

    La mécanique mise en place va donc boucler sur i qui va passer de 1 à 6 sur base du tableau illustré précédemment. Il faut bien noter que i pointe vers les lignes du tableau. Donc lorsque i vaut 1, on pointe vers la première ligne du tableau qui, toujours sur base de l'exemple, est en ligne 2 de la feuille. C'est tout l'intérêt de travailler avec des tableaux structurés. Tu peux les déplacer où tu veux sans toucher au code car les i bouclent sur les lignes du tableau et pas de la feuille.

    Voilà une illustration qui montre que quelle que soit la place du tableau, les indices des lignes ne changent pas. Ca donne beaucoup de souplesse au code.

    Nom : 2021-04-11_201055.png
Affichages : 176
Taille : 98,6 Ko
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  16. #16
    Nouveau membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Janvier 2015
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Transports

    Informations forums :
    Inscription : Janvier 2015
    Messages : 57
    Points : 34
    Points
    34
    Par défaut
    Bonjour Pierre,

    Merci d'avoir pris le temps de m'expliquer le fonctionnement, du coup je commence à mieux comprendre
    J'ai adapté ton code de la manière suivante pour automatiser la création d'un sous dossier "GENERAL" et d'autres sous dossiers dans celui-ci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    Sub CreateContract()
      Dim Root As String
      Dim i As Long
      Dim g As String
      Dim sf As Range
      Dim Path As String
      Dim gPath As String
     
     
      Root = "\\myshare\"
      g = "GENERAL"
      For i = 1 To Range("Folders").Rows.Count
        Path = Root & Range("Folders[Contract_Folder]")(i).Value
        If Range("Folders[Contract_Folder]")(i).Value <> "" Then
        If Dir(Path, vbDirectory) = "" Then MkDir Path
        gPath = Path & "\" & g
        If Dir(gPath, vbDirectory) = "" Then MkDir gPath
        For Each sf In Range("subcontract")
        Path = gPath & "\" & sf.Value
        If Dir(Path, vbDirectory) = "" Then MkDir Path
        Next
      Next
    End Sub
    Mais j'ai une erreur "Next without For" . J'ai vraiment du mal avec les boucles en VBA

    Merci et bonne journée

  17. #17
    Expert éminent
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Points : 7 149
    Points
    7 149
    Billets dans le blog
    7
    Par défaut
    Salut,

    Si je peux me permettre 'intervenir dans cette discussion de haut vol pour répondre à la dernière question.

    Il doit te manquer une instruction End If ou bien Next ...
    D'où l'importance de
    - bien indenter son code (=décaler le contenu des blocs If, Next, Do...)
    - préciser dans l'instruction Next le paramètre pris en compte (For Each c...Next c).
    Et ce même si celui-ci est tacite. Le code n'en sera que plus lisible et, partant, plus aisément modifiable

    Une indication

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    Option Explicit
     
    Sub CreateContract()
     
    Dim Root As String
    Dim i As Long
    Dim g As String
    Dim sf As Range
    Dim Path As String
    Dim gPath As String
     
    Root = "\\myshare\"
    g = "GENERAL"
    For i = 1 To Range("Folders").Rows.Count
            Path = Root & Range("Folders[Contract_Folder]")(i).Value
            If Range("Folders[Contract_Folder]")(i).Value <> "" Then
                    If Dir(Path, vbDirectory) = "" Then MkDir Path
                    gPath = Path & "\" & g
                    If Dir(gPath, vbDirectory) = "" Then MkDir gPath
                    For Each sf In Range("subcontract")
                            Path = gPath & "\" & sf.Value
                            If Dir(Path, vbDirectory) = "" Then MkDir Path
                    Next sf
            End If
    Next i
     
    End Sub
    J'ai bien dit "indication", car je n'ai pas cherché à connaître la logique du développement, du moins pour l'instant.

    Bien Cordialement.

    Marcel

    Dernier billet:
    Suppression des doublons d'un tableau structuré, gestion d'un array

    Pas de messagerie personnelle pour vos questions, s'il vous plaît. La réponse peut servir aux autres membres. Merci.


  18. #18
    Nouveau membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Janvier 2015
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Transports

    Informations forums :
    Inscription : Janvier 2015
    Messages : 57
    Points : 34
    Points
    34
    Par défaut
    Bonjour Pierre, MarcelG

    Désolé pour le retour tardif suite à un petit soucis perso ( rien à voir avec la Covid ).
    Merci pour votre aide précieuse, problème résolu

    Bon WE prolongé

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2016] concaténer des cellules d'une colonne avec un séparateur
    Par slakhdine dans le forum Excel
    Réponses: 8
    Dernier message: 16/07/2019, 20h31
  2. [Toutes versions] Macro création dossiers et sous dossiers
    Par ExcelLiod dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 19/01/2018, 11h46
  3. Réponses: 7
    Dernier message: 11/10/2011, 17h54
  4. [Java] Données des valeurs des cellules d'une ligne [Tableau]
    Par SoGeek dans le forum Interfaces Graphiques en Java
    Réponses: 3
    Dernier message: 17/04/2010, 15h40
  5. VBA EXCEL : Concaténation des cellules d'une colonne
    Par kikaillo dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 09/07/2007, 17h37

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo