Lien hypertexte sous excel en partage

Soyez le premier à donner votre avis sur cette source.

Snippet vu 11 901 fois - Téléchargée 17 fois

Contenu du snippet

Création de liens hypertextes sous excel lorsque le classeur est en partage.
En effet, lorsque le classeur excel est en partage, la creation de liens hypertextes n'est plus possible. Voici une petite série de code qui permet de créer des liens hypertextes sans devoir basculer en mode protégé.
On utilise pour ce faire, la fonction "=LIEN_HYPRTEXTE()". L'intérêt du code présenté est qu'il ne nécessite aucune autre manoeuvre que celles utilisées normalement. En effet, un simple clic droit sur la cellule sélectionnée fait apparaitre dans le menu déroulant un nouveau tag "Lien hypertexte" non grisé.
Il faudra toutefois créer une feuille supplémentaire que l'on peut cachée et qui reprendra les références pointés par la fonction "LIEN_HYPERTEXTE()".

Source / Exemple :


'Création d'un module
Module 1 :
'Appel de l'explorateur de fichier par API directement sur "comdlg32.dll"
Public Declare Function GetOpenFileName Lib "comdlg32.dll" Alias "GetOpenFileNameA" (pOpenfilename As OPENFILENAME) As Long

'Dans "ThisWorkbook"

Private Sub Workbook_Open()
 ' A l'ouverture du fichier, création dans le menu excel clic droit d'un 
 'nouveau  libellé "Lien Hypertexte" avec son icone associée.
    With Application.CommandBars("Cell").Controls.Add(msoControlButton)
        .Caption = "Lien hypertexte"
        .BeginGroup = True
        .FaceId = 1576
        .OnAction = "Feuil7.CommandButton1_Click"
    End With

End Sub

Private Sub Workbook_BeforeClose(Cancel As Boolean)
 'A la fermeture du fichier, on élimine les libellés crées auparavants.

    Application.CommandBars("Cell").Reset

End Sub

Dans la feuille 
Sub C_Lien()

    Dim q_Tot As String
    Dim q_chem As String
    Dim q_Fich As String
    
    q_Tot = Application.GetOpenFileName()
    If q_Tot = "Faux" Then Exit Sub
    q_chem = CurDir(q_Tot)
    q_Fich = Dir(q_Tot)

    Sheets("Suivi général liens cachés").Cells(ActiveCell.Row, ActiveCell.Column) = q_Tot
    Sheets("Suivi général liens cachés").Cells(ActiveCell.Row, ActiveCell.Column + 150) = q_Fich
    
    ActiveCell.Formula = "=HYPERLINK('Suivi général lien'!RC,'Suivi général lien'!RC[150])"

End Sub

Conclusion :


Il est bien entendu possible d'améliorer les macros, le but ici étant simplement de donner un petit apperçu d'une solution acceptable pour la création de ces Liens Hypertextes lorsque le classeur est en partage, et sourtout de ne pas incommoder le profanne qui ne verra au final aucun changement par rapport a son utilisation habituelle de création de ces liens en classeur non partagés.

Bon amusement.

A voir également

Ajouter un commentaire

Commentaires

Horrible...
J'ai un bug qui se trouve à présent sur tous mes fichier excel!!!
L'icone lien est sur le menu de la souris, mais ne fonctionne pas et fait planter le PC!
rjcb
Messages postés
18
Date d'inscription
jeudi 10 juin 2004
Statut
Membre
Dernière intervention
8 décembre 2010

Bonjour

J aimerai tester ce code mais je n'ai pas trop compris où se situait les variables à adapter à mon fichier. (Debutant ...)

J'ai changé ceci:

Public Declare Function GetOpenFileName Lib "comdlg32.dll" Alias "Le nom de mon fichier XLS.xls"

Ici j'ai créé une feuille vierge, et mis un bouton:
.OnAction = "Feuil4.CommandButton1_Click"
(J'ai bien mis ce code dans le workbook.)

et enfin ici j'ai mis le nom de ma feuille "Feuil1" où je dois créer mes liens hypertexte.

Sheets("Feuil1").Cells(ActiveCell.Row, ActiveCell.Column) = q_Tot
Sheets("Feuil1").Cells(ActiveCell.Row, ActiveCell.Column + 150) = q_Fich

Apres test j'ai une erreur,

Lorsque je clique sur lien hypertexte quand mon fichier est partagé j'ai le message:

The macro "Le nom de mon fichier XLS.xls!Feuil4.CommandButton1_Click" cannot be found

Merci de votre aide
> rjcb
Messages postés
18
Date d'inscription
jeudi 10 juin 2004
Statut
Membre
Dernière intervention
8 décembre 2010

Bonjour rjcb,

j'ai eu les mêmes questions que toi, en fait il faut juste remplacer dans le code proposé "Feuil7.CommandButton1_Click" par "Feuil""le numéro de ta feuille"".C_Lien", il y a du avoir un changement du nom de la fonction entre l'écriture et la proposition du code sur ce site. En tous cas merci le concepteur, ça m'a bien aidé !
cs_LMJ
Messages postés
1
Date d'inscription
mardi 9 octobre 2007
Statut
Membre
Dernière intervention
10 mars 2010

Merci pour le commentaire et la note.
En effet, en snippet ;) ... , chacun a le loisir de l'adapter à sa propre application. C'est d'ailleur pour me sortir de ce mauvais pas dans une application partagée par de nombreux utilisateurs n'ayant aucune idée de la programmation, pas plus que moi d'ailleur, que ce code a été produit. Joignons l'utile à l'apprentissage et à l'agréable ... quand ça marche!
Adn56
Messages postés
1172
Date d'inscription
jeudi 24 mai 2007
Statut
Membre
Dernière intervention
28 septembre 2013
1
sympa, mais en snippet ;)

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.