Modif de liens hypertexte en masse

Fermé
Beeloobop Messages postés 63 Date d'inscription jeudi 11 février 2010 Statut Membre Dernière intervention 4 décembre 2010 - Modifié par Beeloobop le 15/07/2010 à 09:45
Beeloobop Messages postés 63 Date d'inscription jeudi 11 février 2010 Statut Membre Dernière intervention 4 décembre 2010 - 15 juil. 2010 à 15:47
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


A voir également:

8 réponses

Mihawk Messages postés 4313 Date d'inscription mercredi 29 mars 2006 Statut Contributeur Dernière intervention 6 janvier 2015 845
15 juil. 2010 à 09:43
En utilisant VBA tu dois pouvoir faire ça facilement dans une boucle !
0
Beeloobop Messages postés 63 Date d'inscription jeudi 11 février 2010 Statut Membre Dernière intervention 4 décembre 2010 11
15 juil. 2010 à 10:08
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
Mihawk Messages postés 4313 Date d'inscription mercredi 29 mars 2006 Statut Contributeur Dernière intervention 6 janvier 2015 845
15 juil. 2010 à 10:20
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
Beeloobop Messages postés 63 Date d'inscription jeudi 11 février 2010 Statut Membre Dernière intervention 4 décembre 2010 11
15 juil. 2010 à 10:29
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
Mihawk Messages postés 4313 Date d'inscription mercredi 29 mars 2006 Statut Contributeur Dernière intervention 6 janvier 2015 845
15 juil. 2010 à 10:36
Il faut utiliser la fonction "Dir" pour tester si un dossier existe !
0

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

Posez votre question
Beeloobop Messages postés 63 Date d'inscription jeudi 11 février 2010 Statut Membre Dernière intervention 4 décembre 2010 11
15 juil. 2010 à 10:49
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
Mihawk Messages postés 4313 Date d'inscription mercredi 29 mars 2006 Statut Contributeur Dernière intervention 6 janvier 2015 845
15 juil. 2010 à 10:58
Normalement tu dis plutôt : if Dir("C:/mondossier/modossier2")
0
Beeloobop Messages postés 63 Date d'inscription jeudi 11 février 2010 Statut Membre Dernière intervention 4 décembre 2010 11
15 juil. 2010 à 11:10
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
Beeloobop Messages postés 63 Date d'inscription jeudi 11 février 2010 Statut Membre Dernière intervention 4 décembre 2010 11
15 juil. 2010 à 12:22
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
Mihawk Messages postés 4313 Date d'inscription mercredi 29 mars 2006 Statut Contributeur Dernière intervention 6 janvier 2015 845
15 juil. 2010 à 13:37
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
Beeloobop Messages postés 63 Date d'inscription jeudi 11 février 2010 Statut Membre Dernière intervention 4 décembre 2010 11
15 juil. 2010 à 14: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
Mihawk Messages postés 4313 Date d'inscription mercredi 29 mars 2006 Statut Contributeur Dernière intervention 6 janvier 2015 845
15 juil. 2010 à 14:26
Bah :

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

0
Beeloobop Messages postés 63 Date d'inscription jeudi 11 février 2010 Statut Membre Dernière intervention 4 décembre 2010 11
Modifié par Beeloobop le 15/07/2010 à 15:35
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
Beeloobop Messages postés 63 Date d'inscription jeudi 11 février 2010 Statut Membre Dernière intervention 4 décembre 2010 11
15 juil. 2010 à 15:47
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