Rechercher un fichier en VBA dans un dossier

super pompier -  
Polux31 Messages postés 6917 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,
Et bon appetit à ceux qui s'apretent à manger.

Je suis sue excel et visual basic en vba (logique...).
J'ai une base de données où j'ai une série de pièces. Si je clique sur cette pièce, j'ouvre un autre fichier qui me montre un plan de l'outil (jusqu'ici tout va bien)

Seuleument, les plans sont dans un dossier principal, lui même contient des dossiers qui contiennent encore des dossiers... Certes, c'est a peu pres ordonné (La piece C123456.top est dans le dossier C123000\C123400\ ).
Il y a un autre problème, cestains fichier sont en .jpeg ou .emf ou.top...

Je souhaiterais donc savoir comment faire dans un premier temps une recherche du fichier dans les dossier au lieu de décortiquer le nom de la piece pour retrouver un chemin tres long...
Et dans un second temps arriver à deviner l'extension pour ouvrir le programme aproprié (si c'est .top, j'ouvre TopSolid)...

Pour info, je suis super pompier certes, mais supernovice VBA...

Merci à ceux qui pourraient m'aider. Je suis au travail
A voir également:

15 réponses

Polux31 Messages postés 6917 Date d'inscription   Statut Membre Dernière intervention   1 204
 
Bonjour voilà un exemple de recherche de fichier dans un répertoire principal et dans les sous-repertoires:

Private Sub CommandButton1_Click()
Dim i As Long
Dim fs
Set fs = Application.FileSearch
With fs
    .LookIn = "C:\Plans"
    .SearchSubFolders = True
    .Filename = "C123456.*"   'Mettre ici la variable contenant le n° de plan
    If .Execute() > 0 Then
        MsgBox "There were " & .FoundFiles.Count & _
         " file(s) found."
        For i = 1 To .FoundFiles.Count
            MsgBox .FoundFiles(i)
        Next i
    Else
        MsgBox "There were no files found."
    End If
End With

End Sub


A toi de l'adapter à ton application

;o)

polux
2
lermite222 Messages postés 8724 Date d'inscription   Statut Contributeur Dernière intervention   1 191
 
Bonjour Polux,
Pas mettre la charrue avant les boeufs.. :-D
D'abord trouver le chemim complet + le nom..
0
Polux31 Messages postés 6917 Date d'inscription   Statut Membre Dernière intervention   1 204 > lermite222 Messages postés 8724 Date d'inscription   Statut Contributeur Dernière intervention  
 
je ne mets pas la charrue avant les boeufs ... il suffit de tester le bout de code.

Avec le numéro de l'outil, on cherche le numéro de plan dans des sous répertoires, si j'ai bien compris.
Ici je fais une recherche avec l'extention .* par exemple et les msgbox affiche de nombre de fichiers trouvé et ensuite affiche le chemin d'accès, toujours pour l'exemple ... il suffit d'adapter le code pour récupérer le bon fichier et l'ouvrir avec le bon outil, le select case est une solution.
0
lermite222 Messages postés 8724 Date d'inscription   Statut Contributeur Dernière intervention   1 191
 
Bonjour,
pour la recherche fichier je ne comprend pas ton exposé.
Pour savoir quoi ouvrir tu peu employer un Select Case..

Supposons le nom du fichier dans la variable Txt..
dim E as string
    E=right(Txt,3)
    Select case E
    Case "jpg"
        'ouvrir jpeg
    case "top"
        'ouvrir top
    Case "bmp"
         'ouvrir bmp
    Ens Select

A+
0
super pompier
 
Excuse moi, je vais essayer de me reprendre.
J'ai un outil C123456. A cet outil correspond un plan. Ce plan est dans un dossier. Seulement, ce dossier est dans un autre grand dossier qui regroupe tous les plan (environ 10000 plans).
Je souhaite donc rechercher dans ce grand dossier les fichier dont le nom est C123456. Il peut y avoir des plans en .bmp .jpeg... et ensuite l'ouvrir avec la bonne application.

Voici ma construction que je souhaiterais:

Chercher dans le grand dossier le fichier contenant "C123456"
Si un fichier est trouvé, analyser son chemin et son extension.
Si il y en a plusieurs portant ce nom là, prendre en priorité l'extension .dft, puis .top puis .jpeg
Suivant son extension, ouvrir l'application appropriée (Word, TopSolid...).

Me comprend tu mieux? et promi, je retourne en cours de français après...
Merci
0
lermite222 Messages postés 8724 Date d'inscription   Statut Contributeur Dernière intervention   1 191
 
OK, ca y est j'ai compris, mais pour éviter de se disperser dit moi de quel facon tu explore le répertoir, sinon j'ai bien une solution.
0

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

Posez votre question
super pompier
 
Merci de t'interesser à mon problème.
Voila. Il y a un répertoire principal
R:\TECHNIQUE\USINAGES-\PLANS_DES_OUTILS_COUPANTS

Les outils sont ensuite classés suivant leurs codes.
Par exemple, l'outil C123456 se situera dans le dossier
R:\TECHNIQUE\USINAGES-\PLANS_DES_OUTILS_COUPANTS\CodeC_123000\C123400\

Je souhaite commencer ma recherche à partir du repertoir principal car j'ai peur qu'il y ai des erreurs dans certains nom de dossiers (c'est pas ma faute...).

Je souhaite donc trouver le chemin automatiquement de l'outil C123456 dans le dossier
R:\TECHNIQUE\USINAGES-\PLANS_DES_OUTILS_COUPANTS comme on le ferait sur Windows et utiliser ce chemin pour ouvrir le fichier avec la bonne application...

Sinon, j'ai la solution de renommer tous les dossiers de la même façon et de tout rentrer en "dur" mais c'est très long.

Merci encore
0
super pompier
 
As tu compris ma vision?
0
lermite222 Messages postés 8724 Date d'inscription   Statut Contributeur Dernière intervention   1 191
 
Dans un module général...
 Public Chemin as string

Public Sub InitChemin()
    Chemin = "R:\TECHNIQUE\USINAGES-\PLANS_DES_OUTILS_COUPANTS\"
End Sub


Dans le module du classeur ThisWorkBook
Private Sub Workbook_Open()
    InitChemin
End Sub


Deux sub pour ne pas être obliger de fermer et réouvrir à chaque essais ou test.
Pour initialiser la variable mettre le curseur dans la macro InitChemin et taper F5 cette variable serra opérationel.

Et maintenand je doit de nouveau faire des suppositions, quand tu clique sur une cellule supposons qu'elle contient C123400, il faut donc se mettre dans le répertoir \C123000, si oui...

Sub Macro22()
dim RP as string, Ext as strin
RP = Chemin & left(ActiveCell.value,4) & "000" & "\" & ActiveCell.value
'Dans RP il y a maintenant..
'"R:\TECHNIQUE\USINAGES-\PLANS_DES_OUTILS_COUPANTS\C123000\C123400.log" (par exemple)
'voir quel est l'extention...
Ext = right(ActiveCell.value,3)
'Sélectionner par ordre de préférence....
If Ext = "dft" then
' .....
elseif Ext = "log" then
' ....
' etc.....
End If
'Mais le Select case est aussi valide
End Sub
Tu peu ainsi ouvrir directement le bon fichier
A+
0
super pompier
 
Merci Polux31 mais je ne sais pas si avec ta solution je pourrais extraire le chemin exacte ni l'extension et le mettre apres en variable pour réouvrir ensuite le fichier avec la bonne appli

Lermite222, ca a l'air pas mal comme code. C'est meme ce que je commencais à faire.
Cependant...

Je me perd un peu dans mes explication... je me calme... et j'essai d'etre simple et de vous décrire exactement ce que je veux.

J'ai une liste outil dans une listbox...
l'outil C123456 me plait, je coche dessus.
un bouton apparait où il y a marqué "voir plan"
Si je clique dessus, on recherche dans le dossier c\:... et tous ces sous dossiers tous les fichiers contenant C123456
Par contre, je ne sais pas du tout quel type d'extension ce fichier peut avoir au moment de ma saisie.
Si j'en ai pas, je ne fait rien.
S'il y en a un, j'examine l'extension de fichier et j'ouvre l'appli en consequences.
S'il y en a plusieurs, je prend l'extension .top en priorite, etc...
Il faut aussi que je connaisse le dossier dans lequel le fichier C123456 a été trouvé... pour le réutiliser en variable après.

Est ce que vous m'avez bien compris? Je pense être sur la vois mais je ne sais toujour pas comment faire interagir toutes ces données entre elles (eh oui, un débutant)

Encore merci pour tout
0
lermite222 Messages postés 8724 Date d'inscription   Statut Contributeur Dernière intervention   1 191
 
Simplement remplacer ActiveCell par List1.list(List1.Listindex)
Tu n'avais pas parlé de liste.
A+
0
super pompier
 
Merci a vous deux, je pense avoir trouvé...

Vous êtes super....

Par contre polux, question qui fache... certains postes sont sous excal 2007 (non pas la tete, pas la tete!!!)

Et le file shearch....

Encore merci
0
lermite222 Messages postés 8724 Date d'inscription   Statut Contributeur Dernière intervention   1 191
 
Avec version inférieure voir...
Set fs = CreateObject("Scripting.FileSystemObject")
de toute facon il y a de laide sur ce sujet.
A+
0
Polux31 Messages postés 6917 Date d'inscription   Statut Membre Dernière intervention   1 204
 
lol eh bien, vive Excel et Microsoft !!! ... et tant qu'on fera du developpement avec un outil qui n'est pas fait pour ça, on a de beaux jours devant nous ...
La dessus, bon week à tous

;o)

polux
0
super pompier
 
excusez moi de vous embeter encore,

Il me signale bien le chemin du fichier trouvé dans la msgbox mais comment faire pour ressortir ce chemin en variables???
0
lermite222 Messages postés 8724 Date d'inscription   Statut Contributeur Dernière intervention   1 191
 
mais ce chemin tu l'a déjà en variable, il est dans RP
suffit simplement de l'ouvrir avec ce nom
A+
Edit:
Quel genre de fichier c'est...
Avec quoi tu les ouvre..
0
super pompier
 
Non, Je te rappelle que je ne connais pas le type d'extension. Je ne l'ai qu'après une recherche.

Il faut dans un premier temps que je cherche le fichier dans le dossier, puis que je trouve son extension puis que j'ouvre l'appli qui va bien.

Avec ta technique, j'ai l'impression que tu pars comme si on connaissait déjà l'extension (.log dans ce cas)

Avec la version à Polux, j'ai trouvé le chemin et l'extension dans la msgbox mais je n'arrive pas à les ressortir
0
super pompier
 
Polux, comment on fait pour ressortir le nom du chemin qui apparait dans la msgbox???

Pour le developpement, je ne connaissais rien à VB avant celui là mais mon chef m'y a mis avec ma b... et mon couteau...

Encore merci
0
Polux31 Messages postés 6917 Date d'inscription   Statut Membre Dernière intervention   1 204
 
Salut,

Pour récupérer le contenu de la msgbox, il faut déclarer une variable string (chaine As String par exemple) et ensuite remplacer : MsgBox .FoundFile(i) par chaine = .FoundFile(i). Chaine contient le chemin d'accès complet du fichier.

;o)

polux
0
lermite222 Messages postés 8724 Date d'inscription   Statut Contributeur Dernière intervention   1 191
 
Bonsoir, il est probale que les explications de polux sont plus adéquates, alors jer me retire de la discution et je te laisse avec polux , -:D-D
A une autre foix.
0