[VBA Excel] mettre une formule =hyperlink en variable

Résolu/Fermé
lml-mike Messages postés 453 Date d'inscription vendredi 16 février 2007 Statut Contributeur Dernière intervention 18 novembre 2018 - Modifié par lml-mike le 6/12/2013 à 17:49
lml-mike Messages postés 453 Date d'inscription vendredi 16 février 2007 Statut Contributeur Dernière intervention 18 novembre 2018 - 9 déc. 2013 à 11:01
Bonjour,

je voulais savoir s'il était possible de transformer un lien contenu dans une variable en formule hypertexte de cette façon :

for indtab = 1 to Ubound(messcreens)
Messcreens(Indtab) = "=HYPERLINK(Messcreens(indtab);"Screenshot")
next indtab

De sorte à ce que quand j'appelle une variable de mon tableau sur une cellule, elle passe directement en mode hyperlink :

Colonne = 4
For indtab = 1 to ubound(indtab)
Lieu_du_screen = Cells(indtab, colonne)
Lieu_du_screen.formula = Messcreens(indtab)
next indtab

J'imagine que je dois déclarer Lieu_du_screen d'un certain type pour que cela fonctionne (pour les besoin du script, je ne peux pas écrire la formule cells directement), mais je n'ai pas trouvé dans mes recherches de quel type je devais déclarer ma variable ...

Merci beaucoup ^_^

4 réponses

lermite222 Messages postés 8702 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 194
Modifié par lermite222 le 7/12/2013 à 08:41
Bonjour,
un lien Hyperlincks ne peut être attribuer à une variable, c'est un peu comme le format de cellule et gérer par Excel.
Pour faire ce que tu veux tu dois assigner le lien au moment ou tu attribue une valeur aux cellules

    colonne = 4
    For indtab = 1 To UBound(indtab)
        ActiveSheet.Hyperlinks.Add Anchor:=Cells(indtab, colonne), Address:= _
            Messcreens(indtab), TextToDisplay:=Messcreens(indtab)
    Next indtab

A+
EDIT:
Relisant ta question...
Essaye avec
    Messcreens(Indtab) = "=HYPERLINK(" & Messcreens(indtab) & ";""Screenshot"") "

Double guillemets pour un guillemet dans la variable.
Et dans ta deuxième boucle
    Colonne = 4 
    For indtab = 1 to ubound(indtab) 
        Cells(indtab, colonne) .FormulaLocal = Messcreens(indtab)
   next indtab

Pas besoin de passer par un objet Range.

Si tu te cognes à un pot et que ça sonne creux, c'est pas forcément le pot qui est vide. ;-)(Confucius)
Note: Je ne répond pas aux MP pour les questions techniques. Et ma boule de cristal est cassée .
0
lml-mike Messages postés 453 Date d'inscription vendredi 16 février 2007 Statut Contributeur Dernière intervention 18 novembre 2018 118
Modifié par lml-mike le 9/12/2013 à 10:04
Salut lermite !

J'ai essayé ta technique avec le formula local, mais il me renvoie une erreur avec :

Erreur définie par l'application ou par l'objet.

C'est bien dommage, elle me serait fort utile pour ensuite assigner mes screenshots d'une traite !! Tu as une idée d'où ça peut venir ? Les déclarations de variable peut-être ? MesScreens() est en string (ce vieux pervers!)

Merci beaucoup !

EDIT : J'ai trouvé ça :

Messcreens(Indtab) = "=HYPERLINK(" & Messcreens(indtab) & ";""Screenshot"") "
s'écrit en fait :
Messcreens(Indtab) = "=HYPERLINK(""" & Messcreens(indtab) & """;""Screenshot"") "

Le lien doit être entre guillemets dans la formule...ça commence à faire beaucoup de guillemets lol !

Edit2 : J'ai essayé avec ta formule :

ActiveSheet.Hyperlinks.Add Anchor:=Cells(13, 5), Address:= _
mesScreens(indTab), TextToDisplay:=mesScreens(indTab)

Le lien se créé mais lors du clic le message d'erreur "impossible d'ouvrir le fichier spécifié" s'affiche. C'est bizarre, si je copie/colle le contenu de la cellule ça fonctionne, mais si je copie/colle la cellule elle même je garde la même erreur...Erreur de format ?

J'aimerais bien t'afficher mes formules comme toi en format notepad++, comment tu fais ?

Edit 3: En corrigeant MesScreens(indtab) et en ressayant avec le formulalocal ça marche...Merci beaucoup du coup ^_^

Le problème venait donc initialement de
Messcreens(Indtab) = "=HYPERLINK(Messcreens(indtab);"Screenshot")
qui s'écrit donc :
Messcreens(Indtab) = "=HYPERLINK(""" & Messcreens(indtab) & """;""Screenshot"") "

Voilà comment passer 2 jours de recherche pour un problème de guillemets xD
0
lermite222 Messages postés 8702 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 194
Modifié par lermite222 le 9/12/2013 à 10:44
Oui, pas évident de mettre le bon nombre de guillemets aux bons endroits.
Pour l'emploi de ActiveSheet.Hyperlinks.Add , tu doit mettre la variable AVANT de mettre Hyperlinck. Exemple...
ActiveSheet.Hyperlinks.Add Anchor:=Cells(13, 5), Address:= _ 
"C:\Chemin\le fichier.xls", TextToDisplay:="A voir dans la cellule" 

Pour mettre les formules en "code" tu sélectionne tout le code ou la 
formule et tu clic sur le bouton "triangle inverser" juste au dessus de l'éditeur, 
dans le menu tu sélectionne "Basic"

A+

Si tu te cognes à un pot et que ça sonne creux, c'est pas forcément le pot qui est vide. ;-)(Confucius)
Note: Je ne répond pas aux MP pour les questions techniques. Et ma boule de cristal est cassée .
0
lml-mike Messages postés 453 Date d'inscription vendredi 16 février 2007 Statut Contributeur Dernière intervention 18 novembre 2018 118
9 déc. 2013 à 11:01
Merci pour le détail ^_^

Il me restera quelques détails sur mon script que je ne maîtrise pas encore. J'espère te recroiser sur le forum dans la semaine !

je te souhaite une excellente journée et une bonne semaine également.
0