Rentrer le chemin de plusieurs fichiers dans des variables automatiquement

Bonjour,

Je suis actuellement entrain d'effectuer une macro ou je dois récupérer pouvoir environ 1000 fichier (un peu moins). j'aimerai eviter de rentrer le chemin des fichiers dans des variables manuellement. Je détaille, il y a un dossier "rapport" dans lequel il y a 1000 sous dossiers portant des nom avec un numéro (ex:010-ZAZEE) comportant le fichiers à récupérer portant un noms de type *LUOP_VGH_A*_97979 (ce que j'ai mis entre les étoiles ne varie pas). Mon but serait donc soit de récupérer plusieurs fichier avec les numéros des sous- dossier à la demande de l'utilisateur et de les mettre dans un tableau pour pouvoir manipulé les fichiers 1 par1 soit de faire la même chose mais l'utilisateur rentrerai une plage de numéros (ex: de 10 à 20 ).

Si vous comprenez pas tout, pouvoir mettre le chemin des fichiers dans des variables en balayant le dossier sera déjà pas mal ! :)

Merci beaucoup

bonjour,

une proposition de macro à adapter

prévoir une feuille sur laquelle on introduit le nom du répertoire racine (ex: d:\documents\rapport\) en B1 et en B2 la liste des numéros de répertoire à sélectionner (séparés par une virgule ou un - pour les intervalles, ex : 10,20,30-100 pour sélectionner les répertoires 10,20 et de 30 à 100)

liste des fichiers sur la même feuille

Sub aargh()
    Dim tabdossier(1 To 2000)
    With Sheets("feuil1") '<- à adapter nom de la feuille sur laquelle chercher l'info
        dossierracine = .Range("B1")
        textsousdossier = .Range("B2")
        textsousdossier = Split(textsousdossier, ",")
        k = 3
' on remplit un tableau avec tous les répertoires se trouvant sous le répertoire racine
        nd = Dir(dossierracine, vbDirectory)
        Do While nd <> ""
            ctrd = ctrd + 1
            tabdossier(ctrd) = dossierracine & nd
            nd = Dir()
        Loop
'on sélectionne les répertoires qui correspondent aux numéros
        For i = LBound(textsousdossier) To UBound(textsousdossier)
            If InStr(textsousdossier(i), "-") > 0 Then
                dossier = Split(textsousdossier(i), "-")
                d1 = dossier(0)
                d2 = dossier(1)
            Else
                d1 = textsousdossier(i)
                d2 = d1
            End If
            For j = d1 To d2
                For d = 1 To ctrd
                    rep = tabdossier(d)
                    If rep Like "*" & j & "*" Then
                        nf = Dir(rep & "\LUOP_VGH_A*") ' on vérifie si le fichier contenant ces caractères est présent dans ce répertoire
                        If nf <> "" Then
                            k = k + 1
                            .Cells(k, 1) = rep & "\" & nf ' on affiche le chemin complet du fichier
                            Exit For
                        End If
                        End If
                    Next d
            Next j
        Next i
    End With
End Sub

Merci beaucoup pour ta réponse, je vais tester cela, juste une question les numéros je les mets en B1 à la suite du chemin ?

et en B2 je met quoi?

Bonjour,

un oubli de ma part, les numéros sont à mettre en B2

j'ai essayé tout à l'heure, mais le programme ne renvoie rien, il s'exécute sans erreur et même en l'exécutant pas à pas je ne comprends pas ou il met les chemins. Désolé..

En vous remerciant

bonsoir,

c'est que j'ai mal compris tes explications ... Voici un exemple d'exécution sur base de ce que j'ai compris.

13dignis.xlsm (48.86 Ko)

Ok je vois ça fonctionne très bien, petit bémol , si je rentre en B2 "30"pour obtenir le rapport 30, ça va me sortir le rapport 024-AF2530 soit le 24, surement parce que c'est le premier rapport qui contient le nombre 30, il n'y a pas moyen de faire en sorte que la macro regarde que le début du nom ?

Sinon merci beaucoup vous me faites gagner de temps j'apprends beaucoup! Je pense réutiliser les cellules avec les chemin afin de mettre les chemins dans des variables à présent.

Encore merci

Sachant que quand le numéro de pièce est à 2 chiffres le dossier est écris avec un 0 au début du type 024-A6730

il faudrait alors regarder que les 3 premiers caractères ou regarder les caractères avant "-"

bonjour,

j'avais un doute sur ce cas, mais tu as clarifié

remplace alors cette instruction

 If rep Like "*" & j & "*" Then

par

 If rep Like  Format(j,"000") & "-*" Then

je me suis penché sur l'opérateur like j'ai pas trouvé, la ligne que vous m'avez conseillé ne fonctionne le programme ne renvoit rien :(

il n'y a pas possibilité de regarder juste les 3 premiers caractères ?

bonjour,

erreur de ma part j'ai répondu trop vite. voici

 If rep Like dossierracine & Format(j, "000") & "-*" Then

ça fonctionne parfaitement merci beaucoup pour ton aide précieuse! Je vais maintenant pouvoir finir ma macro je recréerai un forum si je ne trouve pas de cas similaire à un futur problème rencontré !

Bonne continuation!

Rechercher des sujets similaires à "rentrer chemin fichiers variables automatiquement"