recherche le chemin d'un fichier

hanen85

XLDnaute Nouveau
Bonjour

J'ai crée une macro qui ouvre selon la valeur d'une cellule un fichier donné.
je vais donc solliciter l'ouverture d'une dizaine de fichiers.
La macro utilise le chemin de ces fichiers qui sont contenus dans un répertoir sur le bureau.
J'ai peur que mon code soit trop fragile, puisque à chaque fois que l'utilisateur change la position des fichiers lus le chemin change et donc la macro ne marche plus!!!

Je veux faire en sorte que lorse que la macro est déclenchée une recherche du fichier en paramêtre s'effectue et le chemin est récupéré ainsi ma macro se ra exécutée même si le path change.

Je suis extremement débutante en VBA et je vois vraiment pas une façon de faire je trouve que c'est trop compliqué!!!

Pourrez vous m'aider ?????

voila le code de ma macro

Code:
Sub OpenFile()

Dim strFileName As String
Dim X
Dim Y
If Cells(18, 6) = "F" Then
strFileName = " Le chemin du fichier"
X = OuvrirDocument(strFileName)
End If
End sub

et dans le module

Code:
Option Explicit
 
Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" ( _
        ByVal hwnd As Long, _
        ByVal lpOperation As String, _
        ByVal lpFile As String, _
        ByVal lpParameters As String, _
        ByVal lpDirectory As String, _
        ByVal nShowCmd As Long) As Long
 
Function OuvrirDocument(strChemin As String)
 
    'Déclaration des variables
    Dim strErreur As String
    
    Select Case ShellExecute(0, "open", strChemin, vbNullString, vbNullString, 1)
    
        Case 0: strErreur = "Le système manque de mémoire ou de ressources, l'exécutable est corrompu ou réallocations non valides."
        Case 2: strErreur = "Fichier non trouvé."
        Case 3: strErreur = "Chemin non trouvé."
        Case 5: strErreur = "Une tentative a été faite pour se lier dynamiquement à une tache, ou il y a eu une erreur de partage ou de protection réseau."
        Case 6: strErreur = "La librairie requiert des segments de données séparés pour chaque tâche."
        Case 8: strErreur = "Il n 'y a pas assez de mémoire disponible pour lancer l'application."
        Case 10: strErreur = "Version de Windows incorrecte."
        Case 11: strErreur = "Le fichier exécutable n'est pas correct, il se peut que ce ne soit pas une application Windows, ou qu'il y ait une erreur dans le fichier .EXE;"
        Case 12: strErreur = "L'application a été conçue pour un autre système d'exploitation."
        Case 13: strErreur = "L'application a été conçue pour MS-DOS 4.0."
        Case 14: strErreur = "Le type de fichier exécutable est inconnu."
        Case 15: strErreur = "Tentative de chargement d'une application en mode réel."
        Case 16: strErreur = "Tentative de charger une seconde instance d'un fichier exécutable contenant plusieurs segments de données qui ne sont pas marqués en lecture seule."
        Case 19: strErreur = "Tentative de charger un fichier exécutable compressé. Le fichier doit être décompressé avant d'être chargé."
        Case 20: strErreur = "Fichier de librairie liée dynamiquement (DLL) incorrect, une des DLLs requise pour exécuter cette application est corrompue."
        Case 21: strErreur = "L 'application requiert les extensions Microsoft Windows 32-bit."
        Case 31: strErreur = "Il n 'y a pas d'association pour le type de fichier spécifié, ou il n'y a pas d'association pour l'action choisie pour le type de fichier choisi."
    
    End Select
 
    If strErreur <> "" Then
    
        MsgBox strErreur, vbCritical, "Erreur"
    
    End If
 
End Function


Merci de votre aide
 

kjin

XLDnaute Barbatruc
Re : recherche le chemin d'un fichier

bonsoir et bienvenue,
Pas trop bien compris où récupérer le nom du fichier à ouvrir, donc ici en G18
Si plusieurs fichiers portent le même nom, affiche un message et quitte la procédure
Code:
Sub ChercheEtOuvre()
Dim fichier As String, fs As Object
If Cells(18, 6) = "F" Then 'si F18 = "F"
fichier = Cells(18, 7) 'nom du fichier en G18, à adapter
Set fs = Application.FileSearch
    With fs
        .NewSearch
        .LookIn = "E:" 'chemin du répertoire à scrupter, ici lecteur E
        .SearchSubFolders = True 'recherche dans les sous-répertoires
        .Filename = fichier 'nom du fichier
        .MatchTextExactly = True 'recherche le nom exact
        .FileType = msoFileTypeExcelWorkbooks 'recherche uniquement les classeurs excel
        If .Execute() > 1 Then 'cherche et teste si plusieurs fichiers trouvé
            MsgBox "plusieurs fichiers portent le même nom", vbCritical
        Exit Sub 'si oui quitte
        End If
            For i = 1 To .FoundFiles.Count
                Workbooks.Open .FoundFiles(i) 'sinon, ouvre le classeur trouvé
            Next i
    End With
End If

End Sub
A+
kjin
 

_Thierry

XLDnaute Barbatruc
Repose en paix
Re : recherche le chemin d'un fichier

Bonsoir hanen85, kjin, le Forum

J'avais aussi pensé au FileSearch, mais je l'évite puisqu'il n'est plus compatible avec Office 2007 :

Error message when you try to run the FileSearch function in Access 2007: "You entered an expression that has an invalid reference to the property FileSearch"

Par contre vu que Hanen85 utilise un Shell, j'ai comme dans l'idée que ce n'est pas non plus des fichiers Excel qu'elle cherche à ouvrir...

Je pense que le mieux est de voir si elle peut fournir un complément d'information sur le type de fichier à ouvrir.

Cordialement et Bonne Soirée
@+Thierry
 

hanen85

XLDnaute Nouveau
Re : recherche le chemin d'un fichier

Bonjour,

Le code que j'ai posté traite uniquement un fichier !!!
j'essaie de faire marcher le code pour un seul fichier et quand je trouverais la solution j vais l'adapter au cas de plusieurs fichiers.

Pour le type des fichiers je veux ouvrir tout les types de fichiers peut etre les plus courants sont des fichiers .txt ou .gif

Merci pour votre réponse et pour votre aide :)
 

_Thierry

XLDnaute Barbatruc
Repose en paix
Re : recherche le chemin d'un fichier

re Bonsoir Hanen85, kiki129, Kjin, le Forum

Voici une approche assez compliquée qui en fait était surtout un exercice pour remplacer le FileSearch sur Excel 2007.






Le résultat escompté est obtenu ! Version testée sur
  • Win 2000 / Office 2000
  • Win XP Media Center / Office 2003 Pro
  • Win XP Pro / Office 2007 Pro
  • Vista Ultimate / Office 2007 Pro
Le but étant de rester compatible avec la demande de Hanen85 qui veut chercher et ouvrir un fichier de n'importe quelle extension sur tout un lecteur (ici sur la Demo c'est C:\)

Le revers de la médaille c'est que c'est lent, très lent de partir de la racine C:\...

Bon sinon je remercie mon ami MichelXLD qui a fourni le Module de Classe ainsi que les explications dans Ce lien n'existe plus

Tu noteras que j'ai laissé tel quel le module de l'objet Shell qui convient très bien à ton cas de Figure (Multi Files Formats)

Pour l'ergonomie il suffit d'un Right Click sur la cellule contenant le nom du fichier avec son extension, pour la Démo les fichiers devraient se trouver sur tous les PCs ayant Office 2003 ou 2007 (et probablement les autres) , voilà pourquoi il faut bientôt des "Terras" pour utiliser Windows !!

Bonne Découverte

Bien à vous
@+Thierry
 

Pièces jointes

  • 2007_FileSystemObject_ShellExecuteA.zip
    27.1 KB · Affichages: 74
Dernière édition:

kiki29

XLDnaute Barbatruc
Re : recherche le chemin d'un fichier

Salut, un exemple balayant un dossier sélectionné via une boite dialogue ( la recherche est récursive ) et créant un lien avec les fichiers rencontrés, dans cet exemple il s'agit des fichiers Doc Pdf et Xls
 

Pièces jointes

  • ListeLiens_DocXlsPdf.zip
    14.6 KB · Affichages: 67
  • ListeLiens_DocXlsPdf.zip
    14.6 KB · Affichages: 75
  • ListeLiens_DocXlsPdf.zip
    14.6 KB · Affichages: 71

hanen85

XLDnaute Nouveau
Re : recherche le chemin d'un fichier

Hello les amis

Merci pour vos efforts !!! j vais commencé par regarder les solutions proposées et essayer de les adapter à mon probleme.
je reviendrais vers vous avec le resultat

1000000 merci encore une fois
 

_Thierry

XLDnaute Barbatruc
Repose en paix
Re : recherche le chemin d'un fichier

Bonjour Hanen85, kiki29, Kjin, le Forum

Oui Kiki29 le fait de lister tous les fichiers « XLS » ou « PDF » (ou autres) d’un répertoire et d’en faire un Hyperlink est une excellente solution.


Mais au regard des éléments portés à notre connaissance par Hannen85 à savoir « J'ai crée une macro qui ouvre selon la valeur d'une cellule un fichier donné. » le fait d’avoir une population de tous les fichiers d’un répertoire (même en fonction d’extensions précises), ne doit pas forcément correspondre à ce désira ta, (sauf bien sûr si je n’ai rien compris lol).

Je pense que Hannen85 aura l’embarras du choix maintenant car grâce au code fourni par Kiki29, j’ai un peu amélioré celui que j’avais proposé avec un arrangement de celui de MichelXLD.


Cette fois-ci pour optimiser la vitesse de la procédure, en cellule « A1 » nous indiquons un « Path » de départ…


Au fur et à mesure que le « Scripting.FileSystemObject » trace le chemin où se trouvent les fichiers recherchés, la Cellule A1 se verra dynamiquement ajustée.


Il est évident que les temps de réponses se verront d’autant améliorés…


Pour kiki29, je ne sais pas si cet exemple est de toi, mais il est très interressant.


Bon Dimanche, ici plein de bruits avec le GP ;-) mais pour l’instant le soleil est au rendez-vous
@+Thierry
 

Pièces jointes

  • 2007_FileSystemObject_ShellExecuteA_V00.zip
    30.7 KB · Affichages: 72
Dernière édition:

kjin

XLDnaute Barbatruc
Re : recherche le chemin d'un fichier

Bonjour hanen85, Thierry, kiki,
Je n'avais jamais utilisé véritablement le FSO jusque là
J'ai juste réadapter le code VB dispo ici HOW TO: Recursively Search Directories by Using FileSystemObject
et préféré lister les fichiers dans une listbox comme dans l'exemple (chez moi c'est un peu le bazar !), il suffit ensuite par exemple de double-clicker sur un fichier pour l'ouvrir.
Ca fonctionne bien sous 2000 et je vais finalement adopter ce système
A+
kjin
 

hanen85

XLDnaute Nouveau
Re : recherche le chemin d'un fichier

bonjour,

effectivement Thierry vous avez bien compris mon idée !!!
c'est exactement ce que je veux faire!!
Les fichiers ne seront pas ouverts tous en meme temps ou chacun apres l'autre.
Mais selon un la valeur de la cellule !!!

j vous tiens au courant
encore Merci
 

hanen85

XLDnaute Nouveau
Re : recherche le chemin d'un fichier

Hello Kjin

Code:
Sub ChercheEtOuvre()
Dim fichier As String, fs As Object
If Cells(18, 6) = "F" Then 'si F18 = "F"
fichier = Cells(18, 7) 'nom du fichier en G18, à adapter
Set fs = Application.FileSearch
    With fs
        .NewSearch
        .LookIn = "E:" 'chemin du répertoire à scrupter, ici lecteur E
        .SearchSubFolders = True 'recherche dans les sous-répertoires
        .Filename = fichier 'nom du fichier
        .MatchTextExactly = True 'recherche le nom exact
        .FileType = msoFileTypeExcelWorkbooks 'recherche uniquement les classeurs excel
        If .Execute() > 1 Then 'cherche et teste si plusieurs fichiers trouvé
            MsgBox "plusieurs fichiers portent le même nom", vbCritical
        Exit Sub 'si oui quitte
        End If
            For i = 1 To .FoundFiles.Count
                Workbooks.Open .FoundFiles(i) 'sinon, ouvre le classeur trouvé
            Next i
    End With
End If

End Sub

Le code que vous avez posté est assez simple mais malheureusement il ne permet de rechercher que les classeurs excel d'aprés ce que j'ai compris :(
dommage :confused:
 

vbacrumble

XLDnaute Accro
Re : recherche le chemin d'un fichier

Bonjour à tous



kiki29
Application.FileDialog(msoFileDialogFolderPicker) ne fonctionne pas sous Excel 2000
As-tu sous le coude une version avec GetFolder ?

EDITION: c'est bon j'ai utilisé cet autre fichier réalisé par tes soins (merci)
Lien supprimé
 
Dernière édition:

kjin

XLDnaute Barbatruc
Re : recherche le chemin d'un fichier

Re, bonjour VbaCrumble,
Non tu peux tout à fait rechercher d'autres type de fichiers et utiliser ton script shell pour l'ouvrir.
Peux tu nous dire la version Excel que tu utilises
A+
kjin
 

Discussions similaires

Statistiques des forums

Discussions
312 312
Messages
2 087 149
Membres
103 484
dernier inscrit
maintenance alkern