Recherche de sous dossier en vba

Résolu/Fermé
anthony - 21 janv. 2011 à 21:27
 melanie1324 - 3 févr. 2011 à 08:46
Bonjour,

quel code faut il pour ouvrir le sous dossier correspondant à la valeur d'une textbox ?
j'ai un dossier commun dans lequel se trouve différents sous dossiers dont le nom correspondant aux valeurs que la textbox peut afficher
valeur textbox 1245
dossier global : C:\Users\thony\Desktop
et dans le dossier D1230_1265 on trouve le dossier 1245

voici le chemin complet quand on arrive au niveau voulu
C:\Users\thony\Desktop\D1230_1265\1245

A voir également:

19 réponses

j'ai fait une erreur, c'est celui-ci :

Private Sub CommandButton5_Click()
Dim QuelFichier
Dim serie As String
serie = TextBox2
quelfichier = Dir "X:\CAD\Export_Data\Fichiers_Testeurs\" & serie & "\Map everest.wcf"
If quelfichier <> "" Then
MsgBox QuelFichier
Else
MsgBox "Vous n'avez pas sélectionné de fichier"
End If
End Sub
1
Pour un sous dossier, tu peux t'arrêter à :
quelfichier = Dir "X:\CAD\Export_Data\Fichiers_Testeurs\" & serie
0
merci pour tes réponses. le truc c'est que je ne connais pas le répertoire contenant le dossier ayant le nom de la textbox2
X:\CAD\Export_Data\Fichiers_Testeurs\D1275_1299\1293

partie des répertoires fixes : X:\CAD\Export_Data\Fichiers_Testeurs\
textbox2 = 1293
par contre D1275_1299 serait le dossier D900_924 si textbox2=900
donc la recherche se fait sur un nom contenu dans un répertoire variable
0
Bonjour,
tu mets la valeur de ta textbox dans une variable :

varibale = textbox(....)
et quand tu écris pour ouvrir ton fichier :
"C:\Users\thony\Desktop\D1230_1265\" & variable
0
Bonjour,

j'ai bien peur de ne pas être au niveau requis :-(
voici le code que j'ai écrit mais ça plante (runtime error 76, path not find)

Private Sub CommandButton5_Click()
Dim QuelFichier
Dim serie As String
serie = TextBox2
ChDrive ("X") 'lettre du lecteur sur lequel on cherche.
ChDir "X:\CAD\Export_Data\Fichiers_Testeurs" & serie
QuelFichier = Application.GetOpenFilename("Map everest,*.wcf")
If QuelFichier <> False Then
MsgBox QuelFichier
Else
MsgBox "Vous n'avez pas sélectionné de fichier"
End If
End Sub

le fichier a trouver se trouve dans un sous dossier variable selon la valeur de la textbox
0
Re,
Essaie avec ce code la :

Private Sub CommandButton5_Click()
Dim QuelFichier
Dim serie As String
serie = TextBox2
quelfichier = Dir "X:\CAD\Export_Data\Fichiers_Testeurs\" & serie & "\Map everest.wcf"
If dir <> "" Then
MsgBox QuelFichier
Else
MsgBox "Vous n'avez pas sélectionné de fichier"
End If
End Sub
0
bonsoir,

ca serait possible d'écrire le code, si vos dossiers étaient
DXXX_1299

car le code serait :
quelfichier = Dir "X:\CAD\Export_Data\Fichiers_Testeurs\D" & serie & "_1299"

sauf que vous c'est DXXX_001, DXXX_002...
vous avez bcp de dossiers?
0
il y a environ 50 dossiers du type DXXX_XXX et dans chacun de ces dossiers autant de sous dossiers que la série entre les deux chiffres
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Bonjour,

Private Sub CommandButton5_Click()
Dim QuelFichier
Dim serie As String
dim fso As Object, Dossier As Object
Dim sousRep As Object, Flder As Object

serie = TextBox2
'définit ton répertoire de travail
LeDossier = "X:\CAD\Export_Data\Fichiers_Testeurs\"
quelfichier = ""
Set fso = CreateObject("Scripting.FileSystemObject")
Set Dossier = fso.GetFolder(LeDossier)
'examen du répertoire courant
For Each Flder In Dossier.subfolders 'pour chacun de tes sous dossiers
if left(flder,len(serie)+2+len(LeDossier) = Ledossier & "\D" & serie
quelfichier =1
end if

Next


If quelfichier <> "" Then
MsgBox QuelFichier
Else
MsgBox "Vous n'avez pas sélectionné de fichier"
End If

end sub

Ca va parcourir tous tes sous dossiers. est-ce que ca marche?
0
Au cas ou, avant le if left...
écrit :
a = left(flder,len(serie)+2+len(LeDossier)
b = Ledossier & "\D" & serie

et appuie sur F8, lorsque tu a spassé ces deux lignes, positionne ta souris sur a et b et regarde à quoi c'est égal.
Pour info :
len(x) = nombre de caractères d'une variable
left(x,y) = prend la gauche de la variable sur y caractères

exemepl : left("abcd",1 ) = "a"
left("abc",3) = "abc"
0
merci à toi de prendre du temps pour m'aider
je te joins le fichier, ça sera plsu simple pour toi pour contrôler.
http://www.cijoint.fr/cjlink.php?file=cj201101/cijEB3QweK.xls
j'ai intégré ton code dans le bouton 6, comme ça tu vois ce que j'avais essayé auparavant avec le bouton 5
0
a = "X:\CAD\Export_Data\Fichiers_Testeurs\D1"
b = "X:\CAD\Export_Data\Fichiers_Testeurs\\D1"
j'ai enlevé le \ dans la formule de b
il semble que la recherche se fasse car il y a quelques secondes de latence et il m'affiche la boîte de dialogue m'indiquant que je n'ai sélectionné aucun fichier
0
Bonjour,
j'ai fait une petite erreur :
remplace cette ligne :
if left(flder,len(serie)+2+len(LeDossier) = Ledossier & "\D" & serie

par
if left(flder,len(serie)+2+len(LeDossier) = Ledossier & "D" & serie

Le mieux est que tu fasses des tests et vois si ca marche car je vais pas avoir bcp de temps aujourd'hui pour regarder ton fichier.
Dis moi si ca te donne le résultat escompté.
0
a = "X:\CAD\Export_Data\Fichiers_Testeurs\D1600_"
b = "X:\CAD\Export_Data\Fichiers_Testeurs\D1293"
et il faudrait que ce soit X:\CAD\Export_Data\Fichiers_Testeurs\D1275_1299\1293
0
par contre je me rends compte qu'il y a une logique de nomenclature des dossiers après X:\CAD\Export_Data\Fichiers_Testeurs\
c'est par série, ça commence avec le premier dossier
D750_774
D775_799
D800_824 .....

D2625_2649
D2650_2674

donc on a une série de 24, est ce que ça peut aider à définir dans quel répertoire trouver le dossier = textbox2 ?
0
Oui, ca aide beaucoup plus :

Private Sub CommandButton5_Click()
Dim QuelFichier
Dim serie As String
serie = TextBox2
variable = 750
QuelFichier = "X:\CAD\Export_Data\Fichiers_Testeurs\ D"

Do While variable < 999999999
If Dir(QuelFichier & variable & "_" & variable + 24 & "\" & serie & "\Map everest.wcf") <> "" Then

variables = variable
variable = 999999999 + 1

End If
variable = variable + 1
Loop

If variables <> "" Then
MsgBox "X:\CAD\Export_Data\Fichiers_Testeurs\D" & variables & "_" & variables + 24 & "\" & serie & "\Map everest.wcf"
Else
MsgBox "Vous n'avez pas sélectionné de fichier"
End If
End Sub

On devrait y arriver non?
0
il cherche mais rien ne se passe rien même après 5 minutes
0
Bonjour,

entre Do While variable < 999999999 et

If Dir(QuelFichier & variable & "_" & variable + 24 & "\" & serie & "\Map everest.wcf")

ajoute a = QuelFichier & variable & "_" & variable + 24 & "\" & serie & "\Map everest.wcf"

fait F8.
La valeur de a est-elle conforme à tes dossiers?
0
hello
ça m'affiche X:\CAD\Export_Data\Fichiers_Testeurs\D750_754\1296
au lieu de X:\CAD\Export_Data\Fichiers_Testeurs\D1275_1299\1296
donc visiblement il ne fait pas le recherche sur les dossiers en D
en si en fait je commence à réfléchir, en fait c'est bon, il inscrit bien la bonne nomenclature et c'est ensuite que la boucle va se faire
0
re
j'ai modifié ton code et je commence à comprendre pourquoi tu m'as fait rajouter la ligne
a = ......
j'ai intégré un break point après le loop et j'ai fait du pas à pas en regardant la valeur que prend a à chaque tour.
donc ça basculait de 750, 751, 752
du coup j'ai modifié le +1 en +25 et j'obtiens les noms de dossiers comme dans mon répertoire
End If
variable = variable + 25
Loop

j'ai enlevé le break point et lancé la macro. il y a le sablier et ça ne répond plus :-(
0
je pense comprendre en faisant le pas à pas, en fait la boucle perdure sans vérifier que 1293 (valeur textbox) est bien dans le dossier D1275_1299
la boucle se poursuit.
que faut il écrire pour lui faire comprendre qu'on est dans le bon dossier et que la boucle s'arrête pour ouvrir ce dossier 1293 dans le répertoire D1275_1299 ?
0
pour que la boucle s'arrête :
tu dis variables = variable (pour enregistrer la bonne valeur)
et que variable = 999999999 + 1

mais la macro est longue parce que la boucle tourne jusqu'à ce qu'à
variable soit supérieur à 999999999

tu peux modifier ce chiffre et mettre la valeur que tu veux.

Dir(QuelFichier & variable & "_" & variable + 24 & "\" & serie & "\Map everest.wcf") ==> regarde si le fichier Map everest.wcf est dans le dossier quelfichier\valeurvariable_valeurvariable+24

a adapter.
0
Voici ce que j'ai fait

Private Sub CommandButton7_Click()
Dim QuelFichier
Dim serie As String
serie = TextBox2
variable = 750
QuelFichier = "X:\CAD\Export_Data\Fichiers_Testeurs\D"

Do While variable < 999999999
a = QuelFichier & variable & "_" & variable + 24 & "\" & serie & "\"
If serie <= variable + 24 Then
Application.Dialogs(xlDialogOpen).Show a
Else

End If

variable = variable + 25
Loop

End Sub

le truc c'est que ça m'ouvre bien la fenêtre de sélection mais pas dan sle répertoire qu'on vient de définir, ça ouvre dans "mes documents" (sauf que j'ai les extensions xls alors qu'il me faudrait seulement les fichiers en .wcf) et la fenêtre s'ouvre perpétuellement comme si ça bouclait dessus.

je ne sais pas si j'utilise les bons codes, le but étant d'ouvrir le dossier ayant le nom de la textbox2
0
Private Sub CommandButton7_Click()
Dim QuelFichier
Dim serie As String
serie = TextBox2
variable = 750
QuelFichier = "X:\CAD\Export_Data\Fichiers_Testeurs\D"

Do While variable < 999999999
a = QuelFichier & variable & "_" & variable + 24 & "\" & serie & "\"
If dir(a,vbdirectory)<>"" Then


chdir (a)
Application.Dialogs(xlDialogOpen).Show
Else

End If

variable = variable + 25
Loop

End Sub

Je n'ai pas trouvé pour l'extension. désolée
0
je susi navré pour le temps que je te prends car tu dosi avoir bien plus urgent à faire.
en tous les cas je te remercie de ton aide car les choses ont considérablement avancé grâce à toi.

c'est étrange, ça m'ouvre bien l'explorer mais dns le dossier "mes documents"
et quand je fais annuler sur la fenêtre de l'explorer, ça fait planter excel
0
voilà ce que j'ai fait et là pas trop de soucis
Private Sub CommandButton7_Click()
Dim QuelFichier
Dim serie As String
Dim trouve
serie = textbox2
variable = 750
QuelFichier = "X:\CAD\Export_Data\Fichiers_Testeurs\D"

Do While variable < 999999999
a = QuelFichier & variable & "_" & variable + 24 & "\" & serie & "\"
If serie <= variable + 24 Then
'If Dir(a, vbDirectory) <> "" Then
ChDrive ("X")

ChDir (a)
trouve = Application.GetOpenFilename("Map everest,*.wcf", , Ouvrir)
'Application.Dialogs(xlDialogOpen).Show
Else

End If

variable = variable + 25
Loop

End Sub

quand je fixe uen valeur serie = 960 ça ne fait plus planter excel en utilisant getOpenFileName et je peux lui préciser l'extension.
et j'ai rajouté chdrive avant chdir, ça m'ouvre bien le dossier
par contre quand je fais serie = textbox2 ça me dit que le path n'est pas trouvable et en effet quand je regarde la valeur de a il reste bloqué sur le dossier D750_774 alors que la valeur est 2622, en fait visiblement la boucle ne se fait plus
je ne comprends plus rien
0
re,

il faudrait avant le end sub que tu écrives
quelfichier =""
serie =""
a =""
variable = ""
et vois si ca le refait. Sinon, j'ai pas d'explications.

J'essaie de t'aider un maximum mais c'est pas évident!
0
et regarde la valeur de trouve en pas à pas (F8) si ca se trouve, y unpb sur l'une des variables.
0
j'ai rajouté ce que tu m'as demandé et j'arrive à ça
quelfichier OK
serie OK
a OK (j'ai bien le bon dossier et sous dossier)
variable OK (ici 900 pour serie = 921)
par contre l'explorer ne s'ouvre pas sur le bon dossier
0
second essai avec serie = 1294
toutes les valeurs de contrôle sont bonnes mais le dossier qui s'ouvre n'est pas le bon et ça freeze excel, t'es obligé d'aller dans le gestionnaire de tâche pour refermer
0
ok c'est résolu
effectivement excel plantait car la boucle ne finissait jamais.
j'ai inséré un EXIT SUB
Application.Dialogs(xlDialogOpen).Show
exit sub
Else

Merci infiniment melanie1324, tu es une chef ;-) car la boucle pour trouver le dossier parent c'est topissime
0
Je suis désolée que ca ait pris autant de temps. J'ai cru qu'on allait jamais y arrivé. C'est pas évident à distance.
en tout cas, heureuse que tu ais obtenu le résultat escompté.
0
en tous les cas tu es tenace et je t'en remercie
0
Bonsoir Mélanie

les utilisateurs sont tombés sur le cas qui déroge ^^
textbox 2 = 1451
Ce répertoire existe X:\CAD\Export_Data\Fiches_liaison\D1450_1474
par contre il n'y a pas de sous dossier 1451 existant, la macro leur a affiché une erreur 52, bad name or number et du coup la panique car ne sachant pas quoi faire.
comment éviter que le débuguer s'affiche avec cette erreur et qu'à la place j'ai un message prévenant que le dossier ayant le nom de la textbox2 n'existe pas ?


Private Sub CommandButton5_Click()
Dim QuelFichier
Dim serie As String
Dim trouve
serie = TextBox2
variable = 750 'correspond au n° du premier dossier
QuelFichier = "X:\CAD\Export_Data\Fiches_liaison\D" 'répertoire contenant les dossiers

Do While variable < 9999
a = QuelFichier & variable & "_" & variable + 24 & "\" & serie & "\" 'défini la structure des répertoire de recherche
If Dir(a, vbDirectory) <> "" Then
ChDrive ("X") 'précise le disque dans lequel chercher
ChDir (a) 'précise les répertoires dans lesquels se placer

trouve = Application.GetOpenFilename("Map pdf,*.pdf", , Ouvrir) 'ouvre la fenêtre d'exploration avec l'extension du fichier précisée

Exit Sub 'met fin à la macro sans quoi excel plante
Else

End If

variable = variable + 25 'définit la valeur qu'il faut ajouter pour passer au dossier suivant
Loop

Exit Sub 'met fin à la macro sans quoi excel plante
End Sub


juste par curiosité. quand le dossier existe, ça m'ouvre donc la fenêtre avec les fichiers en pdf accessible, par contre quand je sélectionne celui que je veux et je fais "open" rien ne se passe. pour que je puisse accéder au fichier dans acrobat, je dosi faire clic droit et open et là ça s'ouvre. que faut il faire pour que ça s'ouvre directement sans le clic droit ?

merci à toi si tu as le temps de voir
0
Bonjour,

Pour ta seonde question, le mieux est que tu recherches sur google "ouvrir pdf vba excel" je pense que tu touveras le code correspondant (j'ai pas le temps de le faire)

sinon modifie ta macro comme suit :
Private Sub CommandButton5_Click()
Dim QuelFichier
Dim serie As String
Dim trouve
serie = TextBox2
variable = 750 'correspond au n° du premier dossier
QuelFichier = "X:\CAD\Export_Data\Fiches_liaison\D" 'répertoire contenant les dossiers

Do While variable < 9999
a = QuelFichier & variable & "_" & variable + 24 & "\" & serie & "\" 'défini la structure des répertoire de recherche
If Dir(a, vbDirectory) <> "" Then
ChDrive ("X") 'précise le disque dans lequel chercher
ChDir (a) 'précise les répertoires dans lesquels se placer

trouve = Application.GetOpenFilename("Map pdf,*.pdf", , Ouvrir) 'ouvre la fenêtre d'exploration avec l'extension du fichier précisée

if trouve = "" then
msgbox ("Vous n'avez sélectionné aucun fichier")
end if

Exit Sub 'met fin à la macro sans quoi excel plante
Else

End If

variable = variable + 25 'définit la valeur qu'il faut ajouter pour passer au dossier suivant
Loop

Exit Sub 'met fin à la macro sans quoi excel plante
End Sub
0
hello
ça ne donne rien, ça serait valable si on avait l'exploreur et qu'on ne sélectionnait aucun fichier.
là le pb rencontré, c'est que le dossier cherché n'existe pas et il faudrait un msgbox qui indique "ce dossier n'existe pas"
je n'arrive pas à savoir comment le traduire et où le placer sinon j'ai la boucle qui ne se fait plus en m'indiquant "loop without do"
0
juste par curiosité si tu écris :
ChDrive ("X") 'précise le disque dans lequel chercher
ChDir (a) 'précise les répertoires dans lesquels se placer

zz = chdir(a)

A quoi est égal zz quand le dossier n'existe pas?
Il me semble à ""
si c'est le cas

if chdir(a) = "" then
msgbox("dossier inexistant")
else
trouve =....
end if
0
il me dit que c'est une expected function or variable
j'ai écrit zz = dir(a) et là plus d'erreur
a = X:\CAD\Export_Data\Fiches_liaison\D9975_9999\1451
0
Bonjour,

le plussimple, envois ton fichier sur ci-joint.fr
0
j'ai trouvé une parade en rajoutant en début de code
on error goto erreur

et avant le end sub j'ai indiqué
erreur :
msgbox ("Le dossier de la série " & serie & " n'existe pas !")
du coup ça pallie le débogueur mais maintenant si un autre bug pointe son nez il n'y a plus moyen de connaître le type d'erreur.
mais je ne suis pas inquiet, c'est un très bon code que tu as fait là :-)

là j'ai pas la bonne version du prgramme, si tu veux vraiment y jeter un oeil je peux te l'envoyer demain
0
http://www.cijoint.fr/cjlink.php?file=cj201102/cijRC3TqRx.xls
0
C'est aussi une solution.
J'ai essayé de faire de mon mieux et hier, j'avais pas bcp de temps.
Mais si maintenant tout est nickel. Tant mieux.
et c'est dans des cas comme le tien qu'on apprend le langage vba et ca sert toujours crois moi
0