Lien hypertexte VBA Le sujet est résolu

Y compris Power BI, Power Query et toute autre question en lien avec Excel
D
DUAL ex
Membre habitué
Membre habitué
Messages : 85
Inscrit le : 4 août 2017
Version d'Excel : 2016

Message par DUAL ex » 24 septembre 2018, 14:32

Bonjour à toi qui passe par là,

Je vais essayer d'être clair :

Des fiches clients sont enregistrées : un client par Feuil, le code client est généré avec une formule "concaténer", en range E3 sur cette feuille.
La feuille se renomme alors du même nom que le code client.

Lors de l'appel de la macro ENRtableau, toutes les données clients sont exportées vers un tableau récapitulatif sur la feuille "TABclient" avec en tête de liste le code client. Un tableau en lecture horizontale : du fait, lors de l'ajout d'un nouveau client, je l'insert en allant chercher la première cellule vide du tableau (la première colonne étant la colonne "B")

l'objectif est alors de créer un lien hypertexte sur ce tableau récapitulatif lors de l'exportation des données. Ainsi, à la lecture du tableau, il suffira de cliquer sur le code client pour consulter sa fiche.

Sub ENRtableau()
Dim dlig As Long


Range("E3").Copy
'Je copie le code client généré via la formule "concaténer" en E3 sur la fiche client

Sheets("TABclient").Activate
'feuille où se trouve mon tableau récapitulatif des clients enregistrés

    derlig = Range("B5").End(xlDown).Address
    ' la première colonne de mon tableau est la colonne B, et je vais chercher la dernière cellule pleine de ce tableau
    
    Range(derlig).Select
    Selection.Offset(1, 0).Activate
    'je descends d'une range pour être sur la première ligne vide
    ActiveCell.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=True
    'Je copie mon code client dans cette range
    
    
    'Puis j'essaie de faire mon lien hypertexte....
    ActiveCell.Hyperlinks.Add _
            Anchor:=Selection, _
            Address:="", _
            SubAddress:=Worksheets(Selection).Name, _
            TextToDisplay:=derlig - 1
Je n'arrive pas à créer le lien, quelque chose cloche... J'ai un doute sur les déclarations de variable...
Si vous pouvez m'expliquer où se trouve mon erreur ce serait génial !!

Je vous remercie pour votre altruisme et pour toute l'aide que vous pourrez m'apporter.

Amicalement,
Alex.
Avatar du membre
thev
Membre impliqué
Membre impliqué
Messages : 2'445
Appréciations reçues : 205
Inscrit le : 13 juin 2016
Version d'Excel : 2013 FR 64 bits

Message par thev » 25 septembre 2018, 17:40

Bonsoir,
SubAddress:=Worksheets(Selection).Name
"Selection" est un objet et non une valeur numérique.
De plus, Worksheets(Selection).Name ne représente pas l'adresse d'une cellule.

L'instruction devrait être de ce type :
SubAddress:=Sheets(n).Cells(i,j).Address(1,1,1,1)
1 membre du forum aime ce message.
Avatar du membre
Dan
Modérateur
Modérateur
Messages : 5'976
Appréciations reçues : 83
Inscrit le : 27 avril 2007
Version d'Excel : 2010, 2000, Mac 2011

Message par Dan » 27 septembre 2018, 17:52

Bonjour Alex,

Si j'ai bien analysé ton code... :roll: ,à savoir que tu copies depuis la cellule E3 et tu crées un lien hypertexte dans la feuille TABclient.. ? Cela pourrait être ceci
Sub ENRtableau()
Dim derlig As Long

ActiveSheet.Range("E3").Copy
'je copie le code client généré en E3 sur la Feuille "Fiche client"

With Sheets("TABclient")
    derlig = .Range("B5").End(xlDown).Row + 1
    .Range("B" & derlig).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=True
    
    'Lien hypertexte vers la feuille qui s'est renommée comme le code client :
    .Range("B" & derlig).Hyperlinks.Add _
        Anchor:=.Range("B" & derlig), _
        Address:="", _
        SubAddress:=ActiveSheet.Name & "!" & .Range("B" & derlig).Address, _
        TextToDisplay:=""
End With
    
Call RETOURPAGE

ActiveSheet.Range("E6,E9,E13,E14,E15,E16,E18:E23,E26:E31,E34:E35").Copy

With Sheets("TABclient")
    derlig = .Range("C5").End(xlDown).Row + 1
    
    If .Range("B" & derlig).Offset(0, -1) > 0 Then
            .Range("C" & derlig).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=True
    
    Else: Call RETOURPAGE: .Range("E6").Activate
    End If

End Sub
Amicalement
1 membre du forum aime ce message.
@+ Dan ;)
D
DUAL ex
Membre habitué
Membre habitué
Messages : 85
Inscrit le : 4 août 2017
Version d'Excel : 2016

Message par DUAL ex » 30 septembre 2018, 11:05

Hello Dan,

Mille merci pour ton intervention. Toujours là quant il le faut ;;)
J'adore ton code, il optimise la RAM de mon ordi :mrgreen: :mrgreen: :mrgreen:

Mais... le code fini de la même façon : "Référence non valide".

Autrement dit, après de nombreux essais de mon côté j'ai compris une chose : le code vba pour une feuille (non renommée "Feuil1" ou une feuille renommée simplement "TEST") ça passe.

En revanche lorsqu'une feuille contient un caractère spécial
V2.0 - TEST HYPERTEXTE.xlsm
(27.11 Kio) Téléchargé 14 fois
("-" ou"espace") le code ne fonctionne plus et me met "Référence non valide" quand j'active le lien.
Or mes feuilles se renomme en fonction du code client qui se compose comme suit : DE45JR-TY
(présence du "-" qui est un caractère spécial et fait capoter la recherche)

Je joint mon fichier test pour la construction du lien Hypertexte en vba.

En espérant que tu ai un peu de temps pour regarder.

Merci à vous tous.

Amicalement,
Alex.
Avatar du membre
Dan
Modérateur
Modérateur
Messages : 5'976
Appréciations reçues : 83
Inscrit le : 27 avril 2007
Version d'Excel : 2010, 2000, Mac 2011

Message par Dan » 1 octobre 2018, 13:35

Re

Il faudrait que je comprenne. On choisit dans la liste déroulante (colonne B) et il faut mettre le lien hypertexte dans la colonne à droite (colonne D) ??

Amicalement
1 membre du forum aime ce message.
@+ Dan ;)
D
DUAL ex
Membre habitué
Membre habitué
Messages : 85
Inscrit le : 4 août 2017
Version d'Excel : 2016

Message par DUAL ex » 2 octobre 2018, 00:07

Exactement...

Tu choisi dans la liste déroulante le nom d'une feuille (simulation d'une cellule dynamique) puis tu clique sur la macro.

Cette dernière génère le lien hypertexte à droite.

Tu clique dessus.

Le premier cas fonctionne et les deux autres bug : le nom des feuilles (choisi dans liste déroulante) contient un caractère spécial.

Amicalement,

Alex.
Avatar du membre
Dan
Modérateur
Modérateur
Messages : 5'976
Appréciations reçues : 83
Inscrit le : 27 avril 2007
Version d'Excel : 2010, 2000, Mac 2011

Message par Dan » 2 octobre 2018, 15:05

Re

Voici le code. Dans l'état actuel, un seul code pour les trois possibilités.
Choisis ce que tu veux dans une des trois listes dans la colonne B, puis clique sur un seul bouton (tes trois boutons peuvent être remplacés par un seul
Sub Test()
Dim code As String
Dim lig As Byte
With ActiveSheet
    lig = ActiveCell.Row
    code = .Range("B" & lig).Value
    .Hyperlinks.Add Anchor:=.Range("D" & lig), Address:="", SubAddress:= _
        "'" & code & "'!A1", TextToDisplay:=code
End With
End Sub
Si tu veux absolument t'encombrer de trois boutons ( :mrgreen: ), utilise ce code et adapte les lignes dans le code. Voici pour le bouton Renommées (Ligne 8) :
Sub Renommees()
Dim code As String
With ActiveSheet
    code = .Range("B8").Value
    .Hyperlinks.Add Anchor:=.Range("D8"), Address:="", SubAddress:= _
        "'" & code & "'!A1", TextToDisplay:=code
End With
End Sub
Et enlève moi tous ces accents dans les noms de tes code.... 8[] :mrgreen: :?

Amicalement
1 membre du forum aime ce message.
@+ Dan ;)
D
DUAL ex
Membre habitué
Membre habitué
Messages : 85
Inscrit le : 4 août 2017
Version d'Excel : 2016

Message par DUAL ex » 2 octobre 2018, 23:01

Génial, encore une fois je te dois une fière chandelle.

Ça fonctionne parfaitement et bien évidement, une fois que l'on a vu la solution, ça parait simple.

Encore merci Dan.
Et promis, je retire tous mes accents :mrgreen: :mrgreen: :mrgreen:

Amicalement,
Alex.
Répondre Sujet précédentSujet suivant
  • Sujets similaires
    Réponses
    Vues
    Dernier message