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...

Rechercher des sujets similaires à "gerer liens tableur"