Modif de liens hypertexte en masse

Bonjour,

Un problème qui me fait m'arracher les cheveux me pousse vers vous.

J'ai un Dossier comprenant un fichier excel et 350 (pour le moment) dossiers de photos.
Dans le classeur excel, j'ai 350 cellules qui renvoient chacune à un des dossiers de photos.
Tout marchait bien, j'ai rentré les liens hypertexte au fur et à mesure que je remplissait les lignes. Et là, oh surprise (je n'avais pas testé ces liens depuis un certain temps, mais les emplacements des divers objets n'ont pas été modifiés pour autant), l'adresse de TOUS mes liens hypertexte a été modifié et me renvoit donc un message d'erreur, comme quoi c'est introuvable blablabla. (il cherche les photos dans C:\Documents and Settings\espaces_verts\Application Data\Microsoft\Excel)
Même les nouvelles entrées que j'avais faites hier!!!!!
C'est à n'y rien comprendre...

Si vous aviez une solution pour modifier l'adressage des liens hypertexte ça serait vraiment chouette! (sachant que chaque dossier de photos a exactement le même nom que la cellule contenant le lien)

Merci à vous!

Beeloobop

8 réponses

  1. Contributeur
    En utilisant VBA tu dois pouvoir faire ça facilement dans une boucle !
    0
    1. Bonjour et merci pour ta réponse rapide!

      J'ai testé une petite boucle (je m'épate moi-même, ya 1 semaine, vba était une chose étrange et quasi-inconnue héhéhé ):

      Sub modif_lien_hypertexte()

      Dim i As Integer

      Dim Lg%
      Lg = Range("A7").End(xlDown).Row

      For i = 7 To Lg
      Range("A" & i).Select
      Selection.Hyperlinks(1).Address = Range("A" & i).Value
      Next i

      End Sub

      ça marche jusqu'à ce qu'il rencontre une cellule à laquelle aucun dossier de photos ne correspond, là il s'arrête. Saurais-tu comment faire pour qu'il continue, qu'il passe au i suivant? ou alors qu'il fasse apparaître une input box pour pouvoir faire le lien manuellement et cliquer ensuite pour reprendre au i suivant?

      Merci!
      0
      1. Contributeur
        Qu'entends-tu par "aucun dossier ne correspond" ? Je croyais que le lien était fait en fonction du nom de la cellule... Cela voudrait dire que ta cellule n'a pas de nom ?
        0
        1. Non excuse moi je me suis mal expliquée.

          La cellule contient bien une valeur mais il n'y a pas de dossier portant son nom :
          - soit le nom est différent : erreur de ma part à résoudre grâce éventuellement à cette fameuse message box (plutot que inputbox, non?) qui reprendrait la macro suite à mes modifs
          - soit il n'y a pas du tout de dossier de photos : il faudrait faire une recherche pour voir s'il existe un fameux dossier de photos, s'il y en a une, faire le lien hypertexteet s'il n'y en a pas passer au i suivant. Je pensais donc rajouter une condition if, mais je ne sais pas trop comment la formuler... je cherche je cherche ^^
          0
          1. Contributeur
            Il faut utiliser la fonction "Dir" pour tester si un dossier existe !
            0
        2. J'ai modifié mon code comme suit (merci ;) je sens que j'approche!) :

          Sub modif_lien_hypertexte()
          Dim i As Integer
          Dim Lg%
          Lg = Range("A7").End(xlDown).Row
          For i = 7 To Lg
          If Dir(Range("A" & i).Value) <> "" Then
          Range("A" & i).Select
          Selection.Hyperlinks(1).Address = Range("A" & i).Value
          End If
          Next i
          End Sub

          Le problème c'est qu'il ne va pas me chercher les dossier de photos dans le bon emplacement. Comment faire pour lui dire de chercher dans le même dossier que le classeur excel? ou de lui demander de chercher dans un dossier spécifique?

          Merci!
          0
          1. Contributeur
            Normalement tu dis plutôt : if Dir("C:/mondossier/modossier2")
            0
          2. Comme ça?

            If Dir("C:\Inventaire Botanique\" & Range("A" & i).Value) <> "" Then

            Le mondossier2 varie pour chaque ligne donc il faut bien mettre un i dans la condition if non?

            Il n'établit toujours pas de lien :/ pourtant il ne m'affiche jamais de message d'erreur... aaaarrrgg
            0
        3. Bon bé après moultes recherches je suis arrivée à ça :

          Sub modif_lien_hypertexte()

          Dim Lg%
          Lg = Range("A7").End(xlDown).Row

          Dim Nom

          For i = 7 To Lg
          Range("a" & i).Select
          Nom = Range("A" & i).Value

          If Nom <> "" Then
          ActiveSheet.Hyperlinks.Add Anchor:=Selection, Address:="C:\Inventaire Botanique (PC)\" & Nom, TextToDisplay:=Nom
          End If

          Next

          End Sub

          Et ça marche!!!
          Il me reste plus qu'à trouver un moyen pour qu'il ne me souligne pas et ne me colore pas en bleu les cellules pour lesquelles le lien hypertexte n'est pas valable. Mais ça reste du détail!
          Aaaah ça va un peu mieux!

          Merci pour ton aide précieuse Mihawk!

          Beeloobop
          0
          1. Contributeur
            De rien, je n'ai pas fait grand chose...
            Le problème des liens, c'est qu'il se soulignent automatiquement en bleu comme ça... Il faudrait carrément écrire, dans le cas où il ne faut pas mettre de lien, un texte ou un symbole bidon genre '#'.
            0
            1. Ben le problème c'est que je voudrais garder la valeur de la cellule telle qu'elle est déjà.

              Il s'agit d'une liste de plante avec lien vers les photos quand on clique sur le nom (si les photos ont pu être prises! D'où dans ce cas pas de dossier photo). Mais ce n'est pas parce que je n'ai pas de photo que je veux pour autant supprimer le nom ou la ligne de la plante... :)
              0
          2. Contributeur
            Bah :

            Si (le dossier existe)
                alors écrire le lien
            Sinon
                laisser le nom de la plante tel quel
            Fin si

            0
            1. Moui... Tout à fait d'accord avec toi! Mais c'est plus facile à dire en français qu'à faire en vba ;)
              Pour le moment ma boucle en est à ce stade (stade qui ne fonctionne pas) :

              For i = 7 To Lg
              Range("A" & i).Select
              Nom = Range("A" & i).Value
              If Nom <> "" Then
              If Dir("C:\Inventaire Botanique (PC)\" & Nom) <> "" Then ActiveSheet.Hyperlinks.Add Anchor:=Selection, Address:="C:\Inventaire Botanique (PC)\" & Nom, TextToDisplay:=Nom
              End If
              End If
              Next

              Je crois que j'ai un problème avec la "fonction" (si ce sont bien des fonctions sur vba...) Dir
              Donc peut-être un problème avec mon nom de fichier. Mais c'est bel et bien le bon!

              arrrgghh (bis)
              0
            2. YAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHHHHH

              Je m'aime! J'aime internet et le monde entier!! (surtout ceux qui ont posé les mêmes questions que moi AVANT moi)

              ça marche!! Voilà le code complet (s'il y en a que ça interresse à part moi :p )
              Sub modif_lien_hypertexte()

              'Crée une variable Lg qui est le nombre de lignes effectives du tableau d'inventaire
              Dim Lg%
              Lg = Range("A7").End(xlDown).Row

              'Crée une variable Nom
              Dim Nom

              'Met en place les liens hypertexte
              For i = 7 To Lg 'Fait une boucle de la ligne 7 à la ligne de valeur Lg
              Range("A" & i).Select 'Selectionne la cellule de la colonne A à la ligne i
              Nom = Range("A" & i).Value 'Donne à Nom la valeur de cette cellule
              If Nom <> "" Then 'Si la valeur est non nulle alors fait le test suivant
              'If Dir("C:\Inventaire Botanique (PC)\" & Nom) <> "" Then 'S'il existe un fichier au nom correspondant
              If Dir("C:\Inventaire Botanique (PC)\" & Nom, vbDirectory) <> "" Then
              ActiveSheet.Hyperlinks.Add Anchor:=Selection, Address:="C:\Inventaire Botanique (PC)\" & Nom, TextToDisplay:=Nom 'alors met un lien hypertexte
              End If
              End If
              Next
              Range("A7").Select
              End Sub

              il fallait mettre vbdirectory pour qu'il cherche un dossier!!! Aaaaaah
              Je vais pouvoir faire enfin autre chose!!

              Merci encore Mihawk! Tu m'auras pousser à réfléchir et à faire par moi-même! Quoi de plus joussif? :)
              0