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 :

VBA recherche de sous-dossier avec nom incrémenté [XL-2013]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Femme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Avril 2017
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 35
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2017
    Messages : 3
    Par défaut VBA recherche de sous-dossier avec nom incrémenté
    Bonjour à tous,

    Je suis nouvelle sur le forum et débutante en VBA.

    J'ai un dossier dont les sous dossier ont tous la même structure en termes de contenu.
    Chacun de ces sous dossiers possède un incrément dans leur nom.
    Exemple : "000_Exemple" "001_Exemple1"

    Je voudrais un code VBA qui me recherche le dossier avec le plus grand incrément. Le nom "Exemple" pourra également contenir un grand nombre donc si possible, l'idéal serait de localiser le début du nom du dossier.

    Une fois le sous-dossier localisé, je souhaite accéder à un "sous-sous-dossier" dont le nom sera toujours le même puis récupérer des données dans un fichier Word.

    J'espère avoir été claire.
    J'ai fait deux ou trois recherches sur internet et j'ai écrit ce début de code:


    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
     Sub Find_folder()
     
                Dim FSO As Scripting.FileSystemObject
                Dim Fol As Folder
                Dim i As Integer
                Dim Subfol As Folder
     
                'Activation of FSO
                Set FSO = New Scripting.FileSystemObject
                'Access to folder
                If FSO.FolderExists("W:\Mon chemin vers le dossier source") Then
                    Set Fol = FSO.GetFolder("W:\HL_Business_Development\Transfer\BD - Aerospace & Aviation\Test Cell\04_Manufacturing_Process\04_Manufacturing_Data\02_Build_Job_Data")
                Else
                    MsgBox "The folder doesn't exist"
                End If
     
                For Each Subfol In Fol
    Et là c'est le drame, je bloque... Comment trouver l'incrément le plus grand dans le nom de plusieurs dossiers?

    Si vous avez aussi des conseils pour les étapes suivantes, je suis preneuse !

    Par avance, un grand merci pour m'avoir lue et pour les éventuelles réponses !

    Raphaelle

  2. #2
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Citation Envoyé par raph6490 Voir le message
    J'ai un dossier dont les sous dossier ont tous la même structure en termes de contenu.
    Chacun de ces sous dossiers possède un incrément dans leur nom.
    Exemple : "000_Exemple" "001_Exemple1"

    Je voudrais un code VBA qui me recherche le dossier avec le plus grand incrément. Le nom "Exemple" pourra également contenir un grand nombre donc si possible, l'idéal serait de localiser le début du nom du dossier.
    Passer par le FileSystem, c'est bien. Mais si on peut l'éviter, c'est mieux.
    La fonction Dir() est très salutaire pour appliquer ce précepte.


    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
    Dim Lim As Integer, Num As Integer
    Dim Nom As String, NomLim As String
     
    Nom = Dir("W:\Mon chemin vers le dossier source", vbDirectory)
    If Nom = "" Then Exit Sub
    Lim = CInt(Left(Nom, 3))
    NomLim = Nom
     
    Do
        Nom = Dir("")
        If Nom = "" Then Exit Do
        Num = CInt(Left(Nom, 3))
        If Lim < Num Then
            Lim = Num
            NomLim = Nom
        End If
    Loop
     
    MsgBox "Le fichier ayant le plus grand incrément est " ; NomLim
    C'est du code fait à l'arrache, non testé. Il faudra donc peut-être le débuguer.

    https://msdn.microsoft.com/fr-fr/lib.../gg278779.aspx

  3. #3
    Candidat au Club
    Femme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Avril 2017
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 35
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2017
    Messages : 3
    Par défaut Debug
    Merci beaucoup pour ton aide !

    Malheureusement il y a un bug que je n'arrive pas à résoudre.
    Il se situe en gras ci-dessous. On dirait que la fonction CInt ne parvient pas à convertir le nom du dossier...

    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 Button1_Click()
    
    Dim Lim As Integer, Num As Integer
    Dim Nom As String, NomLim As String
     
    Nom = Dir("W:\Chemin fichier source", vbDirectory)
    If Nom = "" Then Exit Sub
    Lim = CInt(Left(Nom, 3))
    NomLim = Nom
     
    Do
        Nom = Dir("")
        If Nom = "" Then Exit Do
        Num = CInt(Left(Nom, 3))
        If Lim < Num Then
            Lim = Num
            NomLim = Nom
        End If
    Loop
     
    MsgBox ("Le fichier ayant le plus grand incrément est " & NomLim)
    
    End Sub
    Sais-tu comment le débuguer?

    Merci encore !
    Raphaelle

  4. #4
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Citation Envoyé par raph6490 Voir le message
    Malheureusement il y a un bug que je n'arrive pas à résoudre.
    Il se situe en gras ci-dessous. On dirait que la fonction CInt ne parvient pas à convertir le nom du dossier...
    Est-ce que tu as essayé de regarder le contenu de la variable "Nom" ?

    Je t'ai donné le principe mais il faudrait quand même que tu y mettes un peu du tien...

  5. #5
    Expert confirmé
    Avatar de kiki29
    Homme Profil pro
    ex Observeur CGG / Analyste prog.
    Inscrit en
    Juin 2006
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : ex Observeur CGG / Analyste prog.

    Informations forums :
    Inscription : Juin 2006
    Messages : 6 132
    Par défaut
    Salut, je m'immisce dans la discussion, à tenter en testant ...
    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 Test()
    Dim vDossier As Variant
    Dim flag As Boolean
    Dim sDossier As String
    Dim iMax As Long, iNum As Long
     
        sDossier = ThisWorkbook.Path & "\"
        iMax = -999
        flag = True
        vDossier = Dir(sDossier, vbDirectory)
     
        While flag = True
            If vDossier = "" Then
                flag = False
            Else
                If IsNumeric(Left$(vDossier, 3)) Then
                    iNum = CLng(Left$(vDossier, 3))
                    If iNum > iMax Then iMax = iNum
                End If
                vDossier = Dir()
            End If
        Wend
     
        MsgBox Format(iNum, "000")
    End Sub
    Sinon juste pour info ( on revient à FSO ... ) et il serait à élaguer car lourd pour ta demande, à voir si curieuse : liste des fichiers avec visualisation de l'arborescence .

  6. #6
    Candidat au Club
    Femme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Avril 2017
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 35
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2017
    Messages : 3
    Par défaut
    Wahou ! Ton code fonctionne.
    Merci beaucoup !

    Je peux continuer avec mes étapes suivantes.

    Encore merci pour votre aide !

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

Discussions similaires

  1. [OL-2010] Rechercher sous-dossier avec inputbox + Créer sous-dossier en VBA
    Par lauraholt dans le forum VBA Outlook
    Réponses: 0
    Dernier message: 12/12/2016, 17h27
  2. [Batch] Liste des sous-dossiers avec leur nom et le nombre de fichier inclus
    Par sencha dans le forum Scripts/Batch
    Réponses: 5
    Dernier message: 05/02/2015, 10h27
  3. [Batch] Recherche documents puis copie avec nom du dossier
    Par Vincss dans le forum Scripts/Batch
    Réponses: 11
    Dernier message: 19/05/2010, 10h30
  4. [BATCH] Recherche dans sous-dossiers
    Par tonf dans le forum Scripts/Batch
    Réponses: 9
    Dernier message: 13/08/2008, 15h17
  5. [VBA-E]Comparaison sous Excel avec 3 feuilles
    Par zidrouz dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 04/04/2006, 10h49

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