Chercher fichier contenu dans celulle et creation hyperlien

fredh

XLDnaute Occasionnel
Bonjour

J'ai une liste de fichier sous excell. Jaimerai prendre le nom du fichiers de la colonne C et faire une recherche et creer un hyperliens dans la colonne suivante, et cela sur plusieurs feuille

Si possible j'aimerai faire cela a l'ouverture du fichier (si c'est pas trop long)
Tout les fichiers sont dans un repertoire contenant des sous repertoire (Donc pas la peine de recherche sur tout le Disque)

Ci joint un exemple

Merci de m'apporter votre aide
 

Pièces jointes

  • generer hyperliens avec nom en A3.zip
    32.3 KB · Affichages: 82

myDearFriend!

XLDnaute Barbatruc
Re : Chercher fichier contenu dans celulle et creation hyperlien

Bonsoir fredh, le Forum,

Je viens de faire une expérience (sous XL97) :
  1. je crée un fichier nommé comme tu le fais dans ton classeur exemple : "FT.61.11.03.xls"
  2. dans un classeur vierge, je crée un lien manuellement de façon classique (par menu Insertion / Lien hypertexte...) pointant sur ce fichier de mon disque dur.
  3. Je clique sur ce lien :
    • le classeur cible s'ouvre
    • le classeur contenant le lien se ferme !
Je reproduis donc la même situation que tu as expérimentée avec la macro qui, visiblement, n'est pas la source du bug.

Je refais l'ensemble de l'opération ci-dessus, mais cette fois, je nomme le fichier "FT-61-11-03.xls" (remplacement des points par des tirets dans le nom du fichier).
Je clique sur le lien, et là j'obtiens l'ouverture du classeur cible sans fermeture du classeur contenant le lien !

Conclusion : il est toujours préférable de réserver les "points" pour l'extension des noms de fichier seulement (".xls", ".doc", etc...), chose déjà répétée plusieurs fois dans ce forum et notamment dans Lien supprimé il n'y a pas très longtemps encore...

Cordialement,
 

fredh

XLDnaute Occasionnel
Re : Chercher fichier contenu dans celulle et creation hyperlien

Bonjour mDF, le fil

Merci pour la réponse rapide et clair.
Je suis programmeur industrielle et depuis quelque mois je travaille sur une tres grosse installation de station d'epuration de l'eau d'une grand ville. Je ne m'occupe que d'une partie de l'installation a mettre a jour au niveau electrique. Tout les appareils sont nommé en fonction de leur fonction (FT, TT, PT, etc...), de leur zone (61, 12, etc..) de leur classe de detection (11, pour les capteur de pression, 41, pour les moteur, etc..) et enfin par un numero a l'interieur d'une zone. Puis on reuni tout cela et on separe par un point ce qui donne : FT.13.41.85.
En arrivantsur l'installation j'avais deja fait une remarque concernant le choix du separateur, mais je ne pouvais pas proposer de le changer car cela signifirai de changer toute la philosophie de l'installation, les schema Doc etiquette Programme etc...
Beaucoup trop lourd donc.

Je ne sais pas comment faire mais je vais y reflechir ce WE et en parlé Lundi aux personnes concerné, mais je vois deja ce profilé la réponse....

Peut etre que en attendant je pourrais travaille provisoirement avec des separateur "-" mais cela signifie que :

1. il faudrait que je renomme tout mes fichiers (environ 800)
2. il faudrait modifier la macro pour enregistrer les nouveaux fichiers (environ encore 3000) que je doit créer en fonction du contenu de la celulle A3 (voir ce post https://www.excel-downloads.com/threads/racourcir-code-vba-avec-goto.66656/) ex en celulle A3 j'ai FT.31.42.36 il faudrait que j'enregistre avecla macro en FT-31-42-36.xls
3. il faudrait a la fin renommer a nouveaux tout mes fichiers
4. il faudrait que j'en termine avec cela https://www.excel-downloads.com/threads/apliquer-macros-sur-des-millier-de-fichiers.66329/

Mais comme dit il faut que je reflechisse ce WE sur la meilleur methode.
Si tu as une remarque ou sugestion de methode "magique" a apliquer n'hesite pas.
Je reviens demain a tout hasard, en attendant il faut que j'aille finir la pose de pavé dans ma cour (il fait tres beau chez nous).

Encore merci et @+
 
Dernière édition:

fredh

XLDnaute Occasionnel
Re : Chercher fichier contenu dans celulle et creation hyperlien

Bonsoir le fil
mDF comme je disais c'est meme pas la peine de penser a changer les separateur.

Cependant j'ai remarquer que si le fichier "source" a eu des modif non enregistrer le clic sur l'hyperlien ne ferme pas le fichier source....AHAH ca ca m'arrange....
Une idée du pourquoi comment ? (j'aime bien comprendre...)

Merci @+
 

myDearFriend!

XLDnaute Barbatruc
Re : Chercher fichier contenu dans celulle et creation hyperlien

Bonsoir fredh,

Moi aussi j'aime bien comprendre... sauf que, malheureusement, je n'ai pas réponse à tout... :eek:

Comme tu l'as dit plus haut, cette situation (avec fermeture du classeur source) n'arrive pas avec Excel 2003 (et peut-être pas non plus avec 2000 et 2002). On peut donc imaginer qu'il ne s'agit pas d'une situation normale mais plutôt d'un bug sur Excel 97 rectifié sur les versions suivantes...

D'une manière générale, si tu fais une modif sur un classeur et que tu tentes de le fermer, la première chose qui apparait c'est une boîte de dialogue demandant s'il faut enregistrer (ou non) les modifications avant de quitter. Je parierais que c'est ce dernier contrôle qui vient "court-circuiter" ce bug de fermeture inopportune...

Du coup, ta remarque est donc tout à fait intéressante et tu devrais pouvoir te servir de cette observation pour contourner ton problème : pour cela, il t'est facile d'imposer une modification quelconque à ton classeur par macro dès son ouverture.
Par exemple : Sheets(1).Range("A1") = Sheets(1).Range("A1")
placée dans l'évènement Workbook_Open devrait suffire.

Et si tu veux faire un peu plus propre, tu peux aussi faire croire à Excel qu'une modification a été effectuée sans même le faire :
Code:
[SIZE=2][COLOR=blue]Private Sub[/COLOR] Workbook_Open()
      ThisWorkbook.Saved = [COLOR=blue]False
End Sub[/COLOR][/SIZE]
Cette simple procédure dans ton classeur source devrait donc suffire à détourner le bug d'Excel 97. Attention toutefois de ne pas enregistrer manuellement ton classeur avant, sinon la propriété Saved changerait de valeur (=True) et le stratagème ne fonctionnerait plus...

Cordialement,
 

fredh

XLDnaute Occasionnel
Re : Chercher fichier contenu dans celulle et creation hyperlien

Bonsoir mDF, le fil

Et ben c'est du propre....
Et si tu veux faire un peu plus propre, tu peux aussi faire croire à Excel qu'une modification a été effectuée sans même le faire :

Code:
Private Sub Workbook_Open() ThisWorkbook.Saved = FalseEnd Sub

je vais apliquer ton astuce et me debrouiller avec.
Ca sera deja beaucoup mieux qu'avant.


PS : mDF pour un autre post (une routine de modification en serie) je compte tenter de modifier ta procedure de scan de fichier, je pense que tu n'y voit pas d'inconvenient si je te cite ou bien ?

Encore merci et bonne soirée.
 
Dernière édition:

myDearFriend!

XLDnaute Barbatruc
Re : Chercher fichier contenu dans celulle et creation hyperlien

Re fredh,

Si tu reprends un morceau de code dont je suis l'auteur, je ne vois évidemment pas d'inconvénient à ce que tu me cites... celà dit, tu ne dois en aucun cas me citer dans le sujet de ton fil, c'est contraire à notre Lien supprimé et tout simplement contraire à l'idée qu'on peut se faire d'un forum de... partage !

Par ailleurs, je ne suis certainement pas le seul à vouloir t'apporter mon aide et il serait dommage que tu restreignes les possibilités de réponse à un seul intervenant.

Cordialement,
 

fredh

XLDnaute Occasionnel
Re : Chercher fichier contenu dans celulle et creation hyperlien

Bonsoir mDf, le fil

mDF ta macro tourne sur un Pentium/Nt4 et la recherche de fichier est assez lente. En effet pour l'instant je suis a environ 1/3 des fichier a creer et le scan me prend presque 10 minutes.

Je pensait peut etre ajouter un test des liens creer et faire le scan seulement si le liens est "casé" ou si il n'existe pas...

ci dessous le code
Code:
Option Explicit
 
Sub Creer_Hyperliens()   [COLOR=seagreen]'lancer par un bouton en barre de tache[/COLOR]
Del_Hyperlink [COLOR=seagreen]' pour effacer les liens deja creer car scandisk plante si il reste des liens....[/COLOR]
ScanClasseurs
End Sub
 
 
Sub Del_Hyperlink()
Sheets(Array(1, 2, 3, 4, 5, 6, 7, 8, "26", "27", "31", "32", "33", "34", "41", "49", "46-55-56-81-91", 18)).Select
[COLOR=#2e8b57]' tu vois que j'appelle des feuille par leur numero et d'autres par leur nom car avec leur numero ca ne marche pas [/COLOR]
Range("C2:C200").Select
Selection.ClearContents
Range("C2").Select
Sheets(1).Select
End Sub
 
 
Sub ScanClasseurs()
[COLOR=seagreen]'myDearFriend! - Septembre 2006[/COLOR]
Dim Dossier As Object, Fichier As Object
Dim TabDossiers As Variant, Rep As Variant
Dim C As Range
Dim chemin As String
Dim L As Long, D As Long
Dim sh As Worksheet
 
Rep = Application.InputBox("entrez le nom du répertoire à explorer", "Chemin du répertoire", _    "C:\_PC033_prb\Dokumentation\Daten\daten_prb\Schlamm\EMSR_Doku\", Type:=2)
      If Rep = False Then Exit Sub
      If Not Rep Like "*\?*" Then
            MsgBox "Veuillez indiquer un dossier (pas un disque)!"
            Exit Sub
      End If
      Application.ScreenUpdating = False
      TabDossiers = lstDossiers(Rep, True)   [COLOR=seagreen]'Création du tableau des sous-dossiers existants[/COLOR]
      For D = 1 To UBound(TabDossiers)
            chemin = TabDossiers(D) & "\"    [COLOR=seagreen]'Chemin du dossier (ou sous-dossier) à analyser[/COLOR]
            Set Dossier = CreateObject("Scripting.FileSystemObject").GetFolder(chemin)
                        'Analyse du dossier (ou sous-dossier)
            For Each Fichier In Dossier.Files
                  If Fichier.Name Like "*.xls" [COLOR=#ff0000]And liens casser [/COLOR]Then  [COLOR=seagreen]'Liste les fichiers Excel[/COLOR]
                      For Each sh In Worksheets
                              Set C = sh.Columns(4).Find(Left(Fichier.Name, Len(Fichier.Name) - 4), _
                                          LookIn:=xlValues)
                              If Not C Is Nothing Then
                                     sh.Hyperlinks.Add Anchor:=C.Offset(0, -1), Address:=Fichier.Path
                                     C.Offset(0, -1).Value = C.Value
                                    L = L + 1
                              End If
                         Next sh
                  End If
            Next
      Next D
      Set Dossier = Nothing
      Application.ScreenUpdating = True
      MsgBox "Traitement terminé !" & vbLf & L & " lien(s) créé(s)"
End Sub
 
 
Private Function lstDossiers(ByVal chemin As String, Optional Debut As Boolean) As Variant
Dim Dossier As Object, SD As Object, D As Object
Static TabTemp() As String
      If Debut Then
            ReDim TabTemp(1 To 1)
            TabTemp(1) = chemin
      End If
      Set Dossier = CreateObject("Scripting.FileSystemObject").GetFolder(chemin)
      [COLOR=seagreen]'examen du dossier courant[/COLOR]
      For Each D In Dossier.subfolders
            ReDim Preserve TabTemp(1 To UBound(TabTemp) + 1)
            TabTemp(UBound(TabTemp)) = D.Path
      Next
      [COLOR=seagreen]'Traitement récursif des sous-dossiers (d'après un code de F.Sigonneau)[/COLOR]
      For Each SD In Dossier.subfolders
         lstDossiers SD.Path
      Next SD
      lstDossiers = TabTemp()
      Set Dossier = Nothing
End Function

Tu t'en doute plus je vais avancer dans mon projet plus l'attente de refraichissement de liens serat longue.
En effet certain liens sont casser car j'ai des repertoire tempon avec les fichier en attente...

Ci joint un fichier exemple pour creer les liens avec quelque feuille de suprimez (sauf celle qui sont a selectionner) pour alleger...

De plus je m'etait pencher sur une barre de progression prposer par thierry mais je n'y comprend pas grand chose mais bon ca c'est optionnel

Merci et @+
 

Pièces jointes

  • Objekt.zip
    45.9 KB · Affichages: 33
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 275
Messages
2 086 707
Membres
103 377
dernier inscrit
fredy45