Gérer les liens d'un tableur
Bonjour à tous,
Dans le cadre de mon projet d'entreprise j'aimerai pouvoir finaliser mon tableur excel, seulement il me manque toujours une macro pour gérer les liens hypertextes.
Je vous serai très reconnaissant si vous arrivez à me solutionner ce problème.
Je m'explique (je vous met un fichier type en PJ) :
Problème n°1:
Dans le tableur excel j'aimerai à partir de l'userform 1 pouvoir ajouter sur un transport un lien hypertexte.
Pour cela, je selectionne dans le combobox 1 sur quel nom je veux ajouter ce lien.
Le bouton "lien hypertexte" me permet de parcourir les fichiers.
Je voudrais que si l'utilisateur clique sur "annuler" un msgbox s'affiche "pas de fichiers" pour l'instant j'ai une erreur d'éxécution.
Si l'utilisateur choisi un fichier il clique sur ouvrir et le lien chemin d'accès d'écrit sur la textbox1.
Puis pour ajouter le lien il faut cliquer sur le bouton "valider".
Mon petit problème aussi est que dans ma macro il affecte le lien hypertexte à la position d'une cellule et non à la valeur du combobox (peut être un fonction find ?). Mon tableur est évolutif par la suite...
Problème n°2 :
Si je veux modifier le chemin d'un lien hypertexte, je selectionne dans combobox un nom de transport. Si un lien est affecter il m'indique le chemin d'accès dans le textbox1, si aucun chemin, il laisse textbox1 vide (sans message d'erreur).
La suite est la même ajout du lien etc.
Je suis encore novice en la matière, je ne comprend pas encore toute la logique vba... je suis donc bloqué...
Quelqu'un aurait-il l'aimabilité de m'aider ?
Merci d'avance pour vos réponse
Hello,
Pour le problème n°1 tu peux essayer d'utiliser ce code dans ton userform
Private Sub CommandButton1_Click()
f = Application.GetOpenFilename
If f = False Then
TextBox1.Value = ""
MsgBox ("Pas de fichier sélectionné")
Else
TextBox1.Value = f
End If
End Sub
Private Sub CommandButton2_Click()
Set ref = Columns(1).Find(what:=ComboBox1.Value, LookAt:=xlWhole)
If Not ref Is Nothing Then
ref.Hyperlinks.Delete
ActiveSheet.Hyperlinks.Add Anchor:=ref, Address:=f
End If
End Sub
Private Sub UserForm_Initialize()
Dim c As Range
Dim tablo As New Collection
On Error Resume Next
With Sheets("Feuil1")
For Each c In .Range("A10:A" & .Range("A" & .Rows.Count).End(xlUp).Row)
tablo.Add c.Value, CStr(c.Value)
Next c
On Error GoTo 0
For Each Item In tablo
Me.ComboBox1.AddItem Item
Next
End With
End Sub
Il faut effectivement utiliser un find pour mettre ton lien hypertexte dans la bonne case
Après je te conseille de désactiver les boutons avec des conditions pour éviter que l'utilisateur clique sur Valider avant qu'il ait sélectionné une catégorie.
Bonjour,
Déjà merci pour votre réponse sa marche pour l'instant, juste si j'écrase un lien pour en remplacer par un autre, il me chnage ma mise en forme de la cellule..
Au sinon pour la deuxième partie j'ai ceci :
Private Sub Combobox1_Click()
Dim quoi As Variant
Dim trouve As Range
quoi = ComboBox1
With Sheets("feuil1").Range("A2:A65536")
Set trouve = .Find(quoi, lookat:=xlWhole)
If Not trouve Is Nothing Then
TextBox1 = trouve.Hyperlinks(1).address
End If
End With
End Sub
Mais juste il y a une erreur de compilation si je selectionne un nom qui n'a pas de lien...
Pour la gestion des erreurs dans ton cas tu veux que si le lien est inexistant il ne t'affiche rien donc un petit
On error Resume Next
avant la suppression ou l'affichage du lien et un
On error Goto 0
à la fin devrait résoudre ton pb
Ex:
Private Sub Combobox1_Click()
Dim quoi As Variant
Dim trouve As Range
quoi = ComboBox1
With Sheets("feuil1").Range("A2:A65536")
Set trouve = .Find(quoi, lookat:=xlWhole)
If Not trouve Is Nothing Then
On error resume next
TextBox1 = trouve.Hyperlinks(1).address
On error goto 0
End If
End With
End Sub
Pour la mise en forme malheureusement il te faudra la refaire (avec du code pk pas) au moment où tu recrées ton lien
Oui merci je vais essayer de voir par contre je ne sais pas si tu as tester les code mais j'ai un petit soucis.
J'ajoute un lien à avion je referme l'userform, je le réouvre, je selectionne avion et là aucun lien d'indiqué dans la textbox...
Bizarre ?
En fait il m'indique seulement le nom et l'extension du fichier...
Oui c'est parce que ton lien se trouve dans le même endroit que ton tableau. Je regarderai demain.
D'accord ! de toute façon le principal est que cela marche
Juste pour la mise en forme j'ai ton code
Private Sub CommandButton2_Click()
Set ref = Columns(1).Find(what:=ComboBox1.Value, LookAt:=xlWhole)
If Not ref Is Nothing Then
ref.Hyperlinks.Delete
ActiveSheet.Hyperlinks.Add Anchor:=ref, Address:=f
End If
End Sub
Et avec l'enregistreur de macro pour centrer le texte j'ai obtenue :
With Selection
.HorizontalAlignment = xlGeneral
.VerticalAlignment = xlCenter
End With
Comment je fais pour l'intégrer dans ton code pour qu'il me change la mise en forme de la cellule modifié ?
Merci
J'ai réussi à modifier la mise en forme sa marche parfaitement. Par contre j'ai un de mes collègue qui as utilisé mon fichier il m'a dit que si aucun lien n'a été choisi et que l'on clique sur validé, la macro met le lien du fichier excel au lieu de laisser en l'état...