Liens hypertextes automatiques
Bonjour,
J’ai posté il y a quelques semaines pour réaliser des commentaires automatiquement.
Au fur et à mesure je développe mon fichier avec les nouvelles demandes qui me sont faites. J’essaie de créer des liens automatiques vers des dossiers ou fichiers sur le réseau afin d’avoir tout à portée de main dans un unique tableau.
Je vous montre les différents code que j’ai pu trouver et adapter à mon tableau.
Code pour les commentaires automatiques
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column <> 2 Then Exit Sub
If Target.Count > 1 Then Exit Sub
If Target = "" Then On Error Resume Next: Target.Offset(, 5).Comment.Delete: Exit Sub
lig = Application.Match(Target, Sheets("Références").[A:A], 0)
On Error Resume Next
Target.Offset(, 5).Comment.Delete
Target.Offset(, 5).AddComment.Text "Fréquence: " & Sheets("Références").Cells(lig, 5) & Chr(11) & Chr(11) & "Motif: " & Sheets("Références").Cells(lig, 6)
Target.Offset(, 5).Comment.Shape.Height = 10
Target.Offset(, 5).Comment.Shape.ScaleWidth 5, AutoSize = True
Target.Offset(, 5).Comment.Shape.ScaleHeight 10, AutoSize = True
Target.Offset(, 5).Comment.Shape.TextFrame.AutoSize = True
With Target.Offset(, 5).Comment.Shape.TextFrame.Characters(1, 4).Font
.Bold = True
.Underline = True
End With
debut = InStr(1, Target.Offset(, 5).Comment.Text, "Motif:", 1)
With Target.Offset(, 5).Comment.Shape.TextFrame.Characters(debut, 6).Font
.Bold = True
.Underline = True
End WithCode pour le lien automatique en colonne « C »
'Lien Hypertexte FIC
Dim C As Range
For Each C In Range([C3], [C65586].End(xlUp))
ActiveSheet.Hyperlinks.Add C, "Lien d'un dossier informatique" & C.Value & ".xlsx#'Lien d'un onglet'!A1", TextToDisplay:=C.Value & ".xlsx"
Next CCode pour le lien automatique en colonne « S »
'Lien Hypertexte AP
Dim D As Range
For Each D In Range([S3], [S65586].End(xlUp))
If D = "" Then
D = ""
Else
ActiveSheet.Hyperlinks.Add D, "Lien d'un dossier"
End If
Next DCode pour le lien automatique en colonne « AC »
'Lien Hypertexte DIM
Dim F As Range
Dim G As Range
For Each F In Range([C3], [C65586].End(xlUp))
For Each G In Range([AC3], [AC65586].End(xlUp))
If G = "" Then
G = ""
Else
ActiveSheet.Hyperlinks.Add G, "Lien d'un dossier" & F.Value & ".xlsx#'Lien d'un onglet'!A1"
End If
Next G
Next FEtc car les 5 autres colonnes qui sont citées dans la phrase suivante, sont identiques à la colonne "S".
Je souhaiterai que dès qu’une cellule de la colonne C,S,V, AC, AF, AH, AI, AM ou AN est modifiée alors un lien automatique se crée.
Mes deux problèmes :
- Le premier est que chacune des colonnes doit avoir sa boucle indépendante, ce que je ne sais pas faire … le code VBA doit débuter à partir de la ligne 3. Le but est d'alléger ma programmation VBA car actuellement tout le programme se lance quand je modifie une valeur ...
- Mon deuxième se trouve sur le dernier code colonne « AC » appelé « Lien Hypertexte DIM », je voudrais qu'en colonne AC, si du texte est ajouté dans la cellule alors un lien hypertexte se crée automatiquement en prenant en compte la même ligne de la cellule modifiée de la colonne C (Dans la colonne C sont écrites les données "références de la pièce" qui a la même appellation que le nom du fichier et qui me permettront d'ouvrir ce fichier)
Mon code actuel prend en compte la dernière ligne remplie de la colonne C = tous les liens renvoient vers la même référence ...
En vous remerciant d’avance, peut-être je n’utilise pas du tous les bons codes VBA pour cela.
Thibault
Bonjour,
Peut-être, effectivement!?peut-être je n’utilise pas du tous les bons codes VBA pour cela
Et si tu nous déposais un bout de fichier avec des exemples de ce contiennent les colonnes C, S, etc.
... Et avec la fonction LIEN_HYPERTEXTE, tu as déjà essayé de faire la même chose? Si oui, en quoi est-ce que cette solution ne convient pas? Si pas ... c'est l'occasion d'essayer!
Voici mon fichier en pièce jointe.
Je connais cette formule LIEN_HYPERTEXTE mais vu le nombre de ligne que je vais insérer pour enrichir mon fichier, je veux que cela se réalise automatiquement par VBA.
Cette formule surchargerai mon fichier car il me faut ajouter une colonne en plus pour réaliser chaque lien hypertexte ...
Une personne peut m'aider, s'il vous plaît ... je coince ...
Je vouxdrai juste créer des boucles indépendantes sur des créations automatique de lien hypertexte par colonne et trouver une formule adéquate sur une des colonnes.
Petit up !
Bonjour,
Tu parles parfois de créer des boucles, parfois de créer le lien au moment où on modifie une valeur; parfois tu parles de toute une série de colonnes, parfois de deux colonnes seulement!?
Bref, en colonne S, ceci devrait créer les liens pour toutes les cellules non-vides, en récupérant la valeur en colonne C comme nom du fichier "cible":
Sub liens()
For Each C In Range([S3], [S65536].End(xlUp))
If C <> "" Then Me.Hyperlinks.Add C, "Le_Chemin_D_Accès\" & Cells(C.Row, 3) & ".xlsx"
Next C
End SubColler ces lignes dans la fenêtre de code de la feuille "CR MDA DQ381"
Renseigner le chemin d'accès correct.
On suppose que les différent fichiers "cibles" existent bien.
Bonjour,
je te remercie pour la réponse et OUI tout ce que je demande existe bien. Le but de ce fichier est d'être un historique + avoir un suivi rapide sur une ligne avec les liens hypertexte automatisés.
En fait en recherchant sur internet, je souhaiterai que la fonction "Worksheet_change" soit multi-critères car je sais qu'il peut y en avoir qu'une par feuille.
Donc je cherche à que cette fonction s'applique suivant le changement des colonnes C,S,V, AC, AF, AH, AI, AM ou AN afin de créer des liens hypertextes. J'arrive à en créer pour une colonne mais la gestion des multi-critères coincent ...
Exemple
Private Sub Worksheet_Change(ByVal Target As Range)
'Lien Hypertexte AP
If Target.Column <> 22 Then Exit Sub
For Each C In Range([V3], [V65536].End(xlUp))
If C <> "" Then Me.Hyperlinks.Add C, "Lien"
Next C
End SubComment structurer mon code pour réaliser indépendamment le code sur plusieurs critères (suivant la colonne qui est modifié) ? Quel est la bon code à adopter ?
Bonjour,
Une question avant tout: on est d'accord que quand tu écris: Me.Hyperlinks.Add C, "Lien", tu crées sans doute un lien ... mais qui pointe sur ... pas grand chose!? Est-ce à dire que ma proposition ne convenait pas? Comme tu reviens toujours à la même syntaxe, on est en droit de s'interroger.
Un avis personnel: à l'intérieur d'une procédure événementielle, insérer une boucle pour passer en revue toutes les valeurs encodées dans une colonne est potentiellement dangereux: dans le meilleur des cas, ça va ralentir considérablement le temps d'exécution. Au pire, ta procédure va s'appeler elle-même de façon récursive et tourner en boucle indéfiniment.
Si mes souvenirs sont bons, j'avais déjà fait le même type de réflexion dans ton premier fil.
Une conclusion qui me paraît s'imposer: pour ne pas m'embarquer moi-même dans une boucle sans fin, je crois que je vais me retirer et te souhaiter une bonne continuation.
Les réponses à tes interrogations :
premièrement, mon code Me.Hyperlinks.Add C, "Lien" pointe vers un lien REEL sur un disque réseau, je l'ai uniquement appelé "lien" voilà tout. Je ne veux tout simplement pas surcharger d'information car je suis à la recherche d'un code me permettant de créer automatiquement des liens hypertextes dès qu'une celulle d'une des colonnes (citées dans mes messages précédents) est modifiée.
Deuxièmement, c'est justement ce que je n'arrive pas à effectuer. Modifier uniquement la cellule modifiée ou la colonne modifiée afin "d'alléger mon code" lors d'un changement de variable dans la cellule que le code prend en compte (colonnes citées dans mes messages précédents).
Troisièmement, je n'oblige personne à m'aider mais en tout cas je te remercie pour tes recherches, ton temps passé et ton aide mais je pense que la formulation de mon problème est mal exprimé. Mais je ne vois pas comment l'exprimer autrement...
Bonjour,
je laisse tomber pour la création automatique des liens hypertextes. Je fais ça en semi-automatique par macro + boutons.
Par contre, je n'arrive pas pour une colonne à me créer un lien hypertexte
Sub MacroColonneS()
'Lien Hypertexte
For Each J In Range([S3], [S1048576].End(xlUp))
If J <> "" Then ActiveSheet.Hyperlinks.Add J, "lien du dossier du fichier recherché" & Range(C3).Value & ".xlsx"
Next J
End SubEn fait, dans la colonne S, je veux uniquement créer un lien vers un fichier. Mais pour cela je dois récupérer la valeur de la colonne C sur la même ligne car il y a la dénomination du fichier.
Ai-je la bonne formule de départ pour effectuer cela ?
Si oui, quel est le code à mettre à la place de "Range(C3).Value " ? sinon quelle est le code à utiliser pour mettre les liens sur toute la colonne S quand j'actionne la macro ?
Je sais que "Range(C3).Value" n'est pas un code valide.
Merci pour votre aide
Bonsoir,
Et la proposition faite dans mon message du 30 janvier à 11:15 n'offre aucun élément de réponse?kaizer48 a écrit :Si oui, quel est le code à mettre à la place de "Range(C3).Value " ?