Modif de liens hypertexte en masse

[Fermé]
Signaler
Messages postés
63
Date d'inscription
jeudi 11 février 2010
Statut
Membre
Dernière intervention
4 décembre 2010
-
Messages postés
63
Date d'inscription
jeudi 11 février 2010
Statut
Membre
Dernière intervention
4 décembre 2010
-
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

Messages postés
4311
Date d'inscription
mercredi 29 mars 2006
Statut
Contributeur
Dernière intervention
6 janvier 2015
819
En utilisant VBA tu dois pouvoir faire ça facilement dans une boucle !
Messages postés
63
Date d'inscription
jeudi 11 février 2010
Statut
Membre
Dernière intervention
4 décembre 2010
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!
Messages postés
4311
Date d'inscription
mercredi 29 mars 2006
Statut
Contributeur
Dernière intervention
6 janvier 2015
819
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 ?
Messages postés
63
Date d'inscription
jeudi 11 février 2010
Statut
Membre
Dernière intervention
4 décembre 2010
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 ^^
Messages postés
4311
Date d'inscription
mercredi 29 mars 2006
Statut
Contributeur
Dernière intervention
6 janvier 2015
819
Il faut utiliser la fonction "Dir" pour tester si un dossier existe !
Messages postés
63
Date d'inscription
jeudi 11 février 2010
Statut
Membre
Dernière intervention
4 décembre 2010
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!
Messages postés
4311
Date d'inscription
mercredi 29 mars 2006
Statut
Contributeur
Dernière intervention
6 janvier 2015
819
Normalement tu dis plutôt : if Dir("C:/mondossier/modossier2")
Messages postés
63
Date d'inscription
jeudi 11 février 2010
Statut
Membre
Dernière intervention
4 décembre 2010
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
Messages postés
63
Date d'inscription
jeudi 11 février 2010
Statut
Membre
Dernière intervention
4 décembre 2010
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
Messages postés
4311
Date d'inscription
mercredi 29 mars 2006
Statut
Contributeur
Dernière intervention
6 janvier 2015
819
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 '#'.
Messages postés
63
Date d'inscription
jeudi 11 février 2010
Statut
Membre
Dernière intervention
4 décembre 2010
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... :)
Messages postés
4311
Date d'inscription
mercredi 29 mars 2006
Statut
Contributeur
Dernière intervention
6 janvier 2015
819
Bah :

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

Messages postés
63
Date d'inscription
jeudi 11 février 2010
Statut
Membre
Dernière intervention
4 décembre 2010
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)
Messages postés
63
Date d'inscription
jeudi 11 février 2010
Statut
Membre
Dernière intervention
4 décembre 2010
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? :)