Problème Lien Hypertext

Résolu/Fermé
reavok Messages postés 16 Date d'inscription lundi 27 octobre 2014 Statut Membre Dernière intervention 28 novembre 2015 - 27 oct. 2014 à 17:59
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 - 29 oct. 2014 à 16:18
Bonjour,
Voici mon problème :
J'ai une feuille excell retranscrivant des données de fichiers, placés dans un dossier bien à part. J'ai besoin de créer une colonne donnant la possibilité d'ouvrir directement ces fichiers (images, video ou audio).
Quand j'execute les commandes de liens hypertext une à une ça fonctionne très bien je peux ouvrir tous les fichiers désignés.
En revanche j'ai parfois quelques centaines, voire milliers, de fichiers à lier, et les traiter un à un peut-être long et surtout source d'erreur.
Je cherche donc à créer des liens hypertext automatiques qui puissent ouvrir les fichiers directement et pas le dossier d'emplacement des dits fichiers (ce que j'arrive à faire).
Je ne suis pas un expert en tableur excell et ne connais pas les macros ou autres fonctions.
Je sais que mon problème est peut-être un peu redondant mais je n'arrive pas à faire fonctionner les diverses réponses qui ont été faites autour de ce sujet depuis quelques années...
^^
Merci d'avance pour votre aide.


6 réponses

pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 743
Modifié par pijaku le 28/10/2014 à 08:29
Bonjour,

Tous les fichiers à ouvrir sont dans un seul répertoire?
Ce répertoire ne contient que ces fichiers à ouvrir?
Ces fichiers sont répertoriés dans ta feuille Excel?
Si oui, en qu'elle colonne?
Décris nous également ta feuille Excel... Qu'elle donnée trouve t'on et dans qu'elle colonne...

🎼 Cordialement,
Franck 🎶
0
reavok Messages postés 16 Date d'inscription lundi 27 octobre 2014 Statut Membre Dernière intervention 28 novembre 2015
28 oct. 2014 à 10:08
Bonjour pijaku,

alors :
Mon fichier .xls se présente avec plusieurs onglets comme suit;
1-Images, 2-vidéo et 3-audio, sur chaque onglet les colonnes se répartissent de façon identique ; A-Nom du créateur, B-Date de Création, C-Durée (pour les videos et audios), E-Nom du fichier (cette colonne me sert d'établissement de lien hypertext, en gros le nom du fichier à ouvrir doit être cliquable et exécutable) et dernière colonne F-Statut.

Tous les fichiers sont ouvrables et sont classés de la même façon. Ex : les fichiers images répertoriés en onglet 1-Images, sont rangés dans un dossier bien distinct des autres et se nomme 1-Fichiers images, il en va donc de même pour les autres fichiers répertoriés sur les autres onglets.

Mes fichiers .xls sont tous construits de la même façon mais n'ont pas le même nombre de lignes, cela peut aller de vingt à 3000.

J'arrive donc à faire la manip pour un fichier comportant une cinquantaine de ligne voire une centaine mais pour 3000. Je sais exécuter une manip qui ouvre le dossier cible mais pas plus.

Je trouve complètement fou que l'on ne puisse pas tout simplement créer un lien hypertext en ayant sélectionner la colonne au préalable puis de désigner le répertoire source des fichiers. Ca me chatouille un peuqu'on ait pas pensé à ce genre de possibilité sans passer par fonction "machpro" avec des codes zarbis. Pour un tableur de données de masse c'est balodpaille. :)
Comme tu peux l'imaginer je ne suis pas un utilisateur très affuté d'excell, perso je suis plus photoshop, illustrator et Indesign... ^^

J'ai essayé les fonctions =LIENHYPERTEXT.... mais soit je m'y prends mal ou je n'ai certainement pas bien compris les façons de procéder.
Bien entendu si je dois changer l'ordre de mes colonnes ce n'est pas un problème.

Si tu pouvais me donner une bonne astuce ça me ferait gagner un temps de ouf!
Merci d'avance

A+
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 743
28 oct. 2014 à 10:16
Qu'elle version d'Excel as tu?
0
reavok Messages postés 16 Date d'inscription lundi 27 octobre 2014 Statut Membre Dernière intervention 28 novembre 2015
28 oct. 2014 à 15:00
2007
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 743
28 oct. 2014 à 10:33
Autre chose : colonne E-Nom du fichier Est ce que les extensions des fichiers (.jpg etc...) sont indiquées?
0
reavok Messages postés 16 Date d'inscription lundi 27 octobre 2014 Statut Membre Dernière intervention 28 novembre 2015
28 oct. 2014 à 14:43
Non les extensions ne sont pas mentionnées quelles soient jpg ou amr
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 743
28 oct. 2014 à 14:49
Ouille...
Je revois ma copie alors...
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 743
28 oct. 2014 à 10:55
Dans l'attente des réponses aux deux questions, voici comment j'envisage les choses :

Pour créer la macro : Manipulations à ne réaliser qu'une seule fois !
1- Ouvrir un nouveau classeur Excel
2- Tapez Alt +F11
3- Insertion/Module
4- Copiez collez ce code :
Sub Creation_Liens()
Dim objShell As Object, objFolder As Object
Dim Chemin As String, fichier As String
Dim Lig As Long, DLig As Long

    Set objShell = CreateObject("Shell.Application")
    Set objFolder = objShell.BrowseForFolder(&H0&, "Choisir un répertoire", &H1&)

    If objFolder Is Nothing Then
        MsgBox "Abandon opérateur", vbCritical, "Annulation": Exit Sub
    Else
        Chemin = objFolder.ParentFolder.ParseName(objFolder.Title).Path & "\"
    End If
    DLig = Columns(5).Find("*", , , , xlByColumns, xlPrevious).Row
    For Lig = 2 To DLig
        fichier = Range("E" & Lig).Value
        ActiveSheet.Hyperlinks.Add Anchor:=Range("E" & Lig), Address:=Chemin & fichier, TextToDisplay:=fichier
    Next Lig
End Sub

5- Fermez la fenêtre Visual Basic For Application
6- Enregistrer sous :
=> Nom du fichier : Créer_Liens,
=> Type : Macros Complémentaires Excel 97-2003 (en bas de la liste)
7- Fermer Excel.

Pour utiliser la macro : Manipulations à réaliser à chaque exécution!
1- Ouvrez un des classeurs concernés
2- => Version Excel >= 2007 : Ruban, onglet développeur, cliquez sur Compléments
=> Version Excel < 2007 : menu Outils/Macros complémentaires
3- Cochez la case Créer_Liens
4- OK
5- => Version Excel >= 2007 : Ruban, onglet développeur Cliquez sur Macros
=> Version Excel < 2007 : Menu Outils/Macros/Macros
=> Toutes versions : tapez Alt + F8
6- Dans le nom de la macro, saisir : Creation_Liens puis cliquez sur Exécuter


Amélioration possible :
En cas d'absence d'un fichier, le lien hypertexte est créé quand même. Mais lors d'un clic dessus, vous aurez un message d'erreur. Il est possible de traiter ces cas pour, par exemple, ne pas créer de lien si le fichier n'existe pas...
0

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

Posez votre question
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 743
Modifié par pijaku le 28/10/2014 à 15:06
Voici le code modifié pour le souci d'extension... Pour l'installer suivre la démarche décrite ICI

Sub Creation_Liens()
Dim objShell As Object, objFolder As Object
Dim Fichiers() As String
Dim Chemin As String, nomFichier As String, fichier As String
Dim Lig As Long, DLig As Long, Ind As Long

    Set objShell = CreateObject("Shell.Application")
    Set objFolder = objShell.BrowseForFolder(&H0&, "Choisir un répertoire", &H1&)

    If objFolder Is Nothing Then
        MsgBox "Abandon opérateur", vbCritical, "Annulation": Exit Sub
    Else
        Chemin = objFolder.ParentFolder.ParseName(objFolder.Title).Path & "\"
    End If
    'récupération et stockage de tous les noms de fichiers du répertoire avec extension
    fichier = Dir(Chemin & "*.xls")
    Do While Len(fichier) > 0
        ReDim Preserve Fichiers(Ind)
        Fichiers(Ind) = fichier
        Ind = Ind + 1
        fichier = Dir()
    Loop
    
    DLig = Columns(5).Find("*", , , , xlByColumns, xlPrevious).Row
    For Lig = 2 To DLig
        nomFichier = Range("E" & Lig).Value
        For Ind = LBound(Fichiers) To UBound(Fichiers)
            If Fichiers(Ind) Like nomFichier & "*" Then
                ActiveSheet.Hyperlinks.Add Anchor:=Range("E" & Lig), Address:=Chemin & Fichiers(Ind), TextToDisplay:=nomFichier
                Exit For
            End If
        Next Ind
    Next Lig
End Sub 


🎼 Cordialement,
Franck 🎶
0
reavok Messages postés 16 Date d'inscription lundi 27 octobre 2014 Statut Membre Dernière intervention 28 novembre 2015
29 oct. 2014 à 11:16
Hello,
A y est, j'ai essayé et là lors de l'exécution de la macro une fenêtre VBA s'ouvre et me dit :

Erreur d'exécution '9':
L'indice n'appartient pas à la sélection.

Je clique sur "débogage" pour voir... Le code de la Macro apparait est la ligne

For Ind = LBound(Fichiers) To UBound(Fichiers)

s'affiche en jaune.

C'est grave Docteur? ^^

Merci d'avance
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 743
29 oct. 2014 à 13:31
Salut,

Erreur de débutant de ma part... J'ai fait des tests avec des fichiers excel (.xls) alors que toi, tu as besoin de tous types de fichiers...
Donc...
Lorsque le code fait ceci :
fichier = Dir(Chemin & "*.xls")

on obtient : Len(fichier) = 0 (car tu n'as pas de fichier Excel .xls dans ton répertoire...)
Et donc, la boucle pour remplir la variable tableau ne se fait pas car Len(fichier) = 0 :
Do While Len(fichier) > 0

Par conséquent, le code bug lorsqu'on lui demande de boucler sur le contenu d'une variable tableau vide...
For Ind = LBound(Fichiers) To UBound(Fichiers) 


Voici donc le code corrigé :

Sub Creation_Liens()
Dim objShell As Object, objFolder As Object
Dim Fichiers() As String
Dim Chemin As String, nomFichier As String, fichier As String
Dim Lig As Long, DLig As Long, Ind As Long

    Set objShell = CreateObject("Shell.Application")
    Set objFolder = objShell.BrowseForFolder(&H0&, "Choisir un répertoire", &H1&)

    If objFolder Is Nothing Then
        MsgBox "Abandon opérateur", vbCritical, "Annulation": Exit Sub
    Else
        Chemin = objFolder.ParentFolder.ParseName(objFolder.Title).Path & "\"
    End If
    'récupération et stockage de tous les noms de fichiers du répertoire avec extension
    fichier = Dir(Chemin & "*") 'ici on ne laisse que l'étoile pour tous types d'extension
    Do While Len(fichier) > 0
        ReDim Preserve Fichiers(Ind)
        Fichiers(Ind) = fichier
        Ind = Ind + 1
        fichier = Dir()
    Loop
    
    DLig = Columns(5).Find("*", , , , xlByColumns, xlPrevious).Row
    For Lig = 2 To DLig
        nomFichier = Range("E" & Lig).Value
        For Ind = LBound(Fichiers) To UBound(Fichiers)
            If Fichiers(Ind) Like nomFichier & "*" Then
                ActiveSheet.Hyperlinks.Add Anchor:=Range("E" & Lig), Address:=Chemin & Fichiers(Ind), TextToDisplay:=nomFichier
                Exit For
            End If
        Next Ind
    Next Lig
End Sub


Avec mes excuses...
0
reavok Messages postés 16 Date d'inscription lundi 27 octobre 2014 Statut Membre Dernière intervention 28 novembre 2015
29 oct. 2014 à 15:00
Alors là, je dis "Chapeau bas Monsieur!"
Ça marche nickel
C'est exactement ce qu'il me faut.
Magique!
Merci beaucoup.
Merci pour la réactivité, ton temps passé et le résultat! Du grand art!
A+
0
reavok Messages postés 16 Date d'inscription lundi 27 octobre 2014 Statut Membre Dernière intervention 28 novembre 2015
29 oct. 2014 à 15:31
Ah une dernière petite chose par rapport à l'utilisation de cette magnifique macro ^^
En fait j'ai installé la macro directement sur le ruban et hop en un clic c'est fait!
Chose magique aussi c'est que même si on a envie de changer de place la colonne liée "E" en "A" ou autre, ben, ça fonctionne quand même...
Du grand Art jvoudi!
Bye
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 743
29 oct. 2014 à 16:18
De rien.
ça fait plaisir de lire ton ... plaisir!

A bientôt.
Franck
0
reavok Messages postés 16 Date d'inscription lundi 27 octobre 2014 Statut Membre Dernière intervention 28 novembre 2015
28 oct. 2014 à 15:40
Alors je vois bien la manip...
2 ou 3 choses :

-Lors de la création de la macro, ce qui me parait bizarre c'est de fermer la fenêtre vba avant d'enregistrer. Bon soit j'ai d'abord fais comme tu l'indiques.

-l'enregistrement du fichier doit se faire certainement dans un répertoire bien spécifique de windows/microsoft car quand j'exécute la macro, le logiciel ne me la trouve pas.

-En revanche j'ai essayé de créer cette macro en traitant un fichier contenant des données tests, les liens se font sans soucis en me demandant mon répertoire source. Mais à l'activation d'un lien une fenêtre s'ouvre et me dit "Impossible d'ouvrir le fichier spécifié".

Merci encore!
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 743
28 oct. 2014 à 15:46
-Lors de la création de la macro, ce qui me parait bizarre c'est de fermer la fenêtre vba avant d'enregistrer. Bon soit j'ai d'abord fais comme tu l'indiques.
C'est normal, le projet VBA s'enregistre en même temps que le classeur auquel il appartient.

-l'enregistrement du fichier doit se faire certainement dans un répertoire bien spécifique de windows/microsoft car quand j'exécute la macro, le logiciel ne me la trouve pas.
En effet. L'enregistrement se fait dans le Add-ins de la suite Office. Le chemin d'accès est quelque chose comme : C:\Users\franck.nom\AppData\Roaming\Microsoft\AddIns

Mais à l'activation d'un lien une fenêtre s'ouvre et me dit "Impossible d'ouvrir le fichier spécifié".
ça ne le fait pas systématiquement?
Sinon retente de lancer à nouveau la macro...
0
reavok Messages postés 16 Date d'inscription lundi 27 octobre 2014 Statut Membre Dernière intervention 28 novembre 2015
28 oct. 2014 à 18:52
Super! merci de répondre aussi rapidement!
Je teste le "bazar" demain et te tiens au courant
merci encore
0