Création automatique de lien avec VBA

Bonjour,

Pour faciliter la tâche de ceux qui mettront à jour un fichier excel, je voudrais que des liens hypertextes se créer automatiquement dans une colonne où l'on entre un code et ce code portera le même nom qu'une feuille du même classeur

Exemple :

En colonne "I" on trouve les codes articles

Si je rentre 953 dans une des cellules de cette colonne, un lien se céer vers une feuille qui porte le même nom "953" etc...

Est-ce possible de le faire?

Merci de votre aide!

Bonjour,

Le lien est à créer dans la même cellule en colonne I ou dans une autre cellule de la même ligne ??

A te relire

Dan

Bonjour Nad-Dan,

Merci de t'intéresser à mon problème.

Donc, le lien doit se faire dans toutes les cellules de la colonne I car c'est un fichier qui est mis à jour et qui grandit chaque jour. Et pour en venir à ta question, le lien se fait bien dans la cellule ou on entre la valeur, la colonne I.

Mais si cela est plus facile de créer un lien dans une autre cellule de la même ligne alors on peut mettre le lien en colonne J. Le principale c'est que cela fonctionne.

Merci de ta réponse et de consacrer du temps à mon problème

Bonjour,

J'espère que cette solution te conviendra : Fichier test

Le lien est mis dans la même cellule.

Merci beaucoup Readi c'est exactement ce que je cherchais.

Sympa d'avoir mis le commentaire pour me situer car c'est comme cela que je suis en train d'apprendre le VBA.

La recherche automatique fonctionne et c'est ce que je souhaitais!

Merci encore pour ton aide!!

Bonsoir

Désolé je n'ai pu venir avant cette heure te répondre.

Si ton pb est terminé merci de mettre RESOLU sur le fil.

Explications ici --> https://www.excel-pratique.com/forum/viewtopic.php?t=13

Merci pour le forum

Dan

Bonsoir

On peut aussi faire avec une simple formule

https://www.excel-pratique.com/~files/doc2/oVaBjexemple1.xls

Cordialement

Merci Amadeus!

Malheureusement, ce code malgré le fait qu'il fonctionne très bien, est limité par le fait que l'utilisateur doit faire un copier glisser dans toute la colonne pour que le lien se fasse, donc ce n'est pas automatique d'une certaine manière. (à moins de faire ce copier glisser sur les 35000 lignes mais on est pas à l'abri que toutes ces lignes soient remplies ^^ enfin d'ici là j'espère que l'entreprise aura trouvé autre chose come logiciel ou programme grâce aux futurs stagiaires )

Ce programme est destiné à des personnes qui n'ont aucune connaissance en excel ou en informatique donc pour éviter tout risque d'erreurs je garderais la solution de readi mais je garde la tienne sous la main pour mes futurs documents qui ne devront pas contenir de macro.

Merci encore,

Ciao

Re,

Petit couac dans le programme vu après avoir rempli 11 lignes :

erreur d'execution '9' :

Indice en dehors de la plage

Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim WS As Worksheet
    Dim wsTrouve As Boolean

    If Target.Column <> 9 Or Target.Count > 1 Then Exit Sub

    Application.EnableEvents = False

    wsTrouve = False

    ' Rechercher l'existence de la feuille dans le classeur
    For Each WS In ThisWorkbook.Worksheets
        If WS.Name = Target.Value Then
            wsTrouve = True
            Exit For
        End If
    Next WS

    If wsTrouve = True Then
       [b] Worksheets("Feuil1").Hyperlinks.Add Anchor:=Target, Address:="", SubAddress:="'" & Target.Value & "'!A1"[/b]    End If

    Application.EnableEvents = True
End Sub

la ligen surlignée est celle ci :

[b] Worksheets("Feuil1").Hyperlinks.Add Anchor:=Target, Address:="", SubAddress:="'" & Target.Value & "'!A1"[/b] 

De plus autre petit souci: sur les lignes qui n'ont pas de bug, quand j'ai entré le code article le lien se créer, mais une fois que je change le code article de la cellule avec ce lien créer précédemment, le nouveau lien me renvoie vers la feuille avec le nom de l'ancien code article

exemple : je rentre 5340469 dans la cellule le lien se fait la feuille "5340469" mais je me rend compte que je me suis trompé sur le nombre et je le change en 5340470 mais il me renvoie vers la feuille "5340469" alors que 5340470 existe.

Bien sûr, je pourrais utiliser la fonction supprimer la ligne et tout retaper mais sachant que je ne suis pas le seul utilisateur de ce programme, et que les autres personnes n'ont vraiment aucunes connaissances en info donc encore moins avec Excel et il faut qu'ils puissent modifier le code article sans que le lien reste figé sur la feuille portant l'ancien numéro...

Un peu long mon post mais j'ai essayé d'être le concis possible ^^

Merci pour votre aide!

Bonjour,

Une autre solution pour supprimer le lien.

Par contre, concernant l'erreur 9, peux-tu me dire ce que tu fais pour que je reproduise l'erreur ou un extrait de ton fichiier ?

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim WS As Worksheet
    Dim wsTrouve As Boolean

    If Target.Column <> 9 Or Target.Count > 1 Then Exit Sub

    Application.EnableEvents = False

    wsTrouve = False

    ' Rechercher l'existence de la feuille dans le classeur
    For Each WS In ThisWorkbook.Worksheets
        If WS.Name = Target.Value Then
            wsTrouve = True
            Exit For
        End If
    Next WS

    Worksheets("Feuil1").Hyperlinks.Delete      ' Suppression du lien
    If wsTrouve = True Then
        Worksheets("Feuil1").Hyperlinks.Add Anchor:=Target, Address:="", SubAddress:="'" & Target.Value & "'!A1"
    End If

    Application.EnableEvents = True
End Sub

Merci

Salut readi,

Je t'envoie le fichier sur lequel je travaille.

https://www.excel-pratique.com/~files/doc2/liste_et_caracteristiques.zip

Ton code fonctionne avec les premières ligne mais pas les suivantes. tu t'en rendras compte gràce au fichier que je te joins.

Peut-être est-ce du à la mise en forme?

Merci pour ton aide et ton investissement à propos de mon problème ^^

re,

Je pense que cette version est correcte.

Cela ne venait pas de la mise en forme mais du code VBA.

Tiens-moi au courant si cela ne fonctionne toujours pas.

Merci

Fichier

Bonjour readi

En t'arrendant, je m'étais occupé à réaliser, en bidouillant un peu, le fichier avec les formules

https://www.excel-pratique.com/~files/doc2/6LJvWliste_et_caracteristiques.xls

Cordialement

Re readi et Amadeus!

Vos fichiers sonnt impeccables.

2 Façons de procéder qui aboutissent quasiment à un résultat similaire!

Merci beaucoup!

Tout fonctionne comme il faut readi.

Sinon petite précision car je veux vraiment comprendre :

With Target
        .Hyperlinks.Delete      ' Suppression du lien

Si je souhaite que le lien se supprime automatiquement aussi si la référence n'est pas valide au lieu d'avoir à changer le code article ou à le retaper pour permettre la supression du lien.

je rajoute ceci?

For Each WS In ThisWorkbook.Worksheets
        If WS.Name = Target.Value Then
            wsTrouve = False
            Exit For
        End If
    Next WS

    With Target
        .Hyperlinks.Delete      ' Suppression du lien
        ' Remettre la mise en forme dans la cellule
        .HorizontalAlignment = xlCenter
        .VerticalAlignment = xlCenter

merci encore à vous!

Yoann

4st-v7.xlsm (148.65 Ko)

re,

1. Le code ci-dessous permet de vérifier qu'il existe une feuille dans le classeur correspondant à la valeur saisie dans la cellule.

    For Each WS In ThisWorkbook.Worksheets 
        If WS.Name = Target.Value Then 
            wsTrouve = False 
            Exit For 
        End If 
    Next WS

2. Suppression du lien hypertexte dans la cellule cible. Dans tous les cas, après la saisie d'une valeur dans la cellule, le lien est supprimé.

With Target 
    .Hyperlinks.Delete 

3. Après la suppression du lien, le format dans la cellule cible a disparu. Par conséquent, ces 2 lignes de code permettent de centrer horizontalement et verticalement le contenu de la cellule cible.

    .HorizontalAlignment = xlCenter 
    .VerticalAlignment = xlCenter

D'accord! Merci pour ces explication détaillées.

Mais je voualis savoir aussi si c'est possible quand la msgbox affiche entrée non valide que de ce fait le lien se supprime de lui même sans que l'on est à modifier le code.

je n'arrive pas à le coder j'ai essayé ceci :

 If wsTrouve = True Then
            .Hyperlinks.Add Anchor:=Target, Address:="", SubAddress:="'" & .Value & "'!A1"
 Else
            .Hyperlinks.Delete
 End if

puis

 If wsTrouve = True Then
            .Hyperlinks.Add Anchor:=Target, Address:="", SubAddress:="'" & .Value & "'!A1"
 Else
            .clearcontents
 End if

mais bon là c'est trop radicale car la cellule est effacé alors que j'aurais aimé avoir juste le lien qui se retire...

Re,

et en remplaçant le clearcontents par un

Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _

:=False, Transpose:=False

Cordialement

Toujours pas Amadéus...

J'ai mis le code sous plusieurs formes possibles (copie coller au départ puis tout sur la même ligne..)

Il ne se passe rien lorsque la lien est devenu invalide, il reste toujours en place malgré qu'il n'y a plus la feuille dans le classeur (une boîte de dialogue s'ouvre tout de même pour annoncer que la référence est non valide.)

un hyperlinks.delete devrait fonctionner normalement mais j'arrive pas à le coder sous la forme "si référence invalide alors hyperlinks delete."

comment dire de supprimer le lien dès que la référence est invalide?

Merci encore!

Cordialement.

re,

J'ai apporté quelques modifications en créant une procédure pour supprimer le lien et en rajoutant du code dans Worksheet_FollowHyperlink.

Lors du clic sur un lien, le code situé sous Worksheet_FollowHyperlink se déclenche.

Si le lien est invalide (Target.Adress = ""), le lien est supprimé.

Par contre, je n'arrive pas à trouver comment enlever le message "Entrée non valide".

Fichier

J'espère que cette solution te conviendra et peut-être que quelqu'un d'autre sait comment enlever le message.

Merci readi!!

je ne connaissais pas, enfin juste entendu parler ou lu rapidement (trop même), la fonction "call".

Je vois beaucoup mieux maintenant comment il faut faire ou dans quelle situation l'utiliser

merci!!

Pour le message "entrée invalide" ce n'est pas grave, bien sûr c'est pas jolie ^^ mais cela reste précis. Si, lors de mon stage j'ai le temps ou si mon maître de stage me l'impose, je chercherais la solution ou alors si quelqu'un a déjà eu ce problème et a su le résoudre alors pourquoi pas m'orienter.

Mais dans tous les cas c'est super gentil d'avoir consacré du temps à mon problème et aussi de m'avoir appris ce qu'est une fonction "call" ainsi que la création de lien automatique!!!

Bonne continuation!

Rechercher des sujets similaires à "creation automatique lien vba"