Macro lien hypertexte

Fermé
s21imon06 Messages postés 91 Date d'inscription jeudi 26 décembre 2013 Statut Membre Dernière intervention 29 novembre 2018 - Modifié par s21imon06 le 12/11/2015 à 11:40
cs_Le Pivert Messages postés 7904 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 14 août 2024 - 12 nov. 2015 à 14:39
Bonjour,
Je vous explique ma situation : je dois, pour le travail, créer un lien hyper texte dans une cellule d'un fichier qui se trouve dans un dossier. Je le fait donc manuellement (créer un lien hypertexte, parcourir etc ...).
Je suis débutant sur excel, mais je pense qu'il est possible de créer une macro qui me permet d'automatiser ça :
Je dispose dans ce tableur, d'une partie du nom du fichier (ex : j'ai dans une cellule "DOC001" et le fichier se nomme "DOC001 - Commande client"). Normalement je créer un lien hypertexte en allant chercher se fichier, toujours dans le meme dossier.
J'ai à faire ça pour 300 DOC donc un peu long....
Existe-t-il une macro pour automatiser cela, et que excel aille chercher le fichier qui contient le nom du doc ?
Merci d'avance


PS : j'ai déjà essayer la fonction lien hypertexte, qui ne fonctionne pas car le type de fichier à aller cherche est variable (.pdf, .doc, etc)

1 réponse

cs_Le Pivert Messages postés 7904 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 14 août 2024 729
12 nov. 2015 à 14:39
Bonjour,

Mettre ce code dans un module:

'RECUPERATION REPERTOIRES ET NOMS DE FICHIERS DANS UN CLASSEUR
'office2007
Option Explicit
Public chem As String
Sub AfficheFichiersEtChemins()
Dim LeChemin, LeMessage As String
Dim Lextension As String
Dim LeTitre As String
Dim Arret As Boolean
' Pour éviter un "autochargement" des fichiers
Range("a:a").ClearContents

  LeTitre = "Répertoires et sous-répertoires"
  Arret = False
  Application.ScreenUpdating = True
   Range("A1").Activate
  Do
 chem = ChoisirDossier

    If Len(chem) = 0 Then
      Arret = True
    Else
      If Mid(LeChemin, Len(chem), 1) <> "\" Then
        chem = chem + "\"
      End If
      If Len(Dir(chem, vbDirectory)) <> 0 Then
        Lextension = "*.*"
         Call Remplir(chem, Lextension)
        Arret = True
      Else
        LeMessage = "Répertoire introuvable...Recommencer ?"
      End If
    End If
  Loop Until Arret
  
End Sub
Private Sub Remplir(RepertParent, ExtFichier)
' Remplit la feuille courante avec le contenu du répertoire RepertParent
' Les noms de répertoires sont placés dans la colonne active à partir de
' la cellule active
' Les noms de fichiers correspondants à ExtFichier sont affichés dans la
' colonne de droite
' 14/02/2000 18:30, Gérard B, mpfe

Dim Compteur As Integer
Dim NbreRepert As Integer
Dim LeFichier As String
Dim LeDossier As String
Dim ExtLocale As String
Dim ParentLocal As String
Dim LeDossierLocal() As String

    ExtLocale = ExtFichier
    LeFichier = Dir(RepertParent & ExtFichier)
    If Len(LeFichier) = 0 Then
        ActiveCell.Value = RepertParent
        ActiveCell.Offset(1, 1).Select
    End If
    Do While Len(LeFichier) <> 0
        'ActiveCell.Value = (RepertParent & LeFichier)
        ActiveCell.Offset(1, 0).Select
        'ActiveCell.Value = LeFichier
         ActiveSheet.Hyperlinks.Add Anchor:=Selection, Address:= _
        chem & "\" & LeFichier, TextToDisplay:=LeFichier
       ' ActiveCell.Offset(0, 1).Select
        LeFichier = Dir
    Loop
    'Compter le nombre de sous-répertoires
    NbreRepert = 0
    LeDossier = Dir(RepertParent, vbDirectory)
    Do While LeDossier <> ""
        If LeDossier <> "." And LeDossier <> ".." Then
            If (GetAttr(RepertParent & LeDossier) _
                    And vbDirectory) = vbDirectory Then
                NbreRepert = NbreRepert + 1
            End If
        End If
        LeDossier = Dir
    Loop
    ReDim LeDossierLocal(NbreRepert + 1)
    Compteur = 1
    LeDossierLocal(Compteur) = Dir(RepertParent, vbDirectory)
    Do While LeDossierLocal(Compteur) <> ""
        If LeDossierLocal(Compteur) <> "." _
                    And LeDossierLocal(Compteur) <> ".." Then
            If (GetAttr(RepertParent & LeDossierLocal(Compteur)) _
                        And vbDirectory) = vbDirectory Then
                Compteur = Compteur + 1
            End If
        End If
        LeDossierLocal(Compteur) = Dir
    Loop
    For Compteur = 1 To UBound(LeDossierLocal()) - 1
        ParentLocal = RepertParent & LeDossierLocal(Compteur) & "\"
        Call Remplir(ParentLocal, ExtLocale)
    Next
End Sub
Function ChoisirDossier()
    Dim objShell, objFolder, chemin As String, SecuriteSlash
                                            
    Set objShell = CreateObject("Shell.Application")
    Set objFolder = objShell.BrowseForFolder(&H0&, "Choisissez un répertoire", &H1&)
    On Error Resume Next
    chemin = objFolder.Items.Item.Path

    SecuriteSlash = InStr(objFolder.Title, ":")

    If SecuriteSlash > 0 Then
        chemin = Mid(objFolder.Title, SecuriteSlash - 1, 2) & ""
    End If
    ChoisirDossier = chemin
End Function


Pour l'appeler a partir d'un bouton:

Private Sub CommandButton1_Click()
AfficheFichiersEtChemins
End Sub



0