Modif de liens hypertexte en masse

Beeloobop Messages postés 71 Statut Membre -  
Beeloobop Messages postés 71 Statut Membre -
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. Mihawk Messages postés 4753 Statut Contributeur 846
     
    En utilisant VBA tu dois pouvoir faire ça facilement dans une boucle !
    0
  2. Beeloobop Messages postés 71 Statut Membre 11
     
    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
  3. Mihawk Messages postés 4753 Statut Contributeur 846
     
    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
  4. Beeloobop Messages postés 71 Statut Membre 11
     
    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. Mihawk Messages postés 4753 Statut Contributeur 846
       
      Il faut utiliser la fonction "Dir" pour tester si un dossier existe !
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Beeloobop Messages postés 71 Statut Membre 11
     
    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. Mihawk Messages postés 4753 Statut Contributeur 846
       
      Normalement tu dis plutôt : if Dir("C:/mondossier/modossier2")
      0
    2. Beeloobop Messages postés 71 Statut Membre 11
       
      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
  7. Beeloobop Messages postés 71 Statut Membre 11
     
    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
  8. Mihawk Messages postés 4753 Statut Contributeur 846
     
    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. Beeloobop Messages postés 71 Statut Membre 11
       
      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
  9. Mihawk Messages postés 4753 Statut Contributeur 846
     
    Bah :

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

    0
    1. Beeloobop Messages postés 71 Statut Membre 11
       
      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. Beeloobop Messages postés 71 Statut Membre 11
       
      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