[VBA] Lien Excel vers Word (utilisant un nom définis)

Kiseki

XLDnaute Occasionnel
Bonjour,

Faisant beaucoup de liens de cellules Excel vers Word je me suis vite heurter à un soucis étrange.

Les liens ne ce font pas toujours avec le "Nom définis" de la cellule mais par L1C1, ce qui est très fâcheux sur des cellules qui bouge.

Ce qui à d'étrange c'est qu'en utilisant le même procédé le résultat diffère parfois (Nom/L1C1).



Les infos à ce sujet mon été très dur à trouver, par conséquent je vous partage une solution.


Utilisant le Presse-papier :

Dans Excel : La première macro va fabriquer le lien et le placer dans le presse-papier.
Dans Word : La seconde macro va fabriquer un lien avec le contenu du presse-papier (vérifie si le contenu représente bien un lien).

(Je verrai demain pour contrôler Excel depuis Word pour n'avoir qu'une macro et éviter de devoir ajouter les références forms pour le presse-papier).


Dans Excel ce placer sur la cellule nommé :
VB:
Sub LienVersWord()

'Contenu du champ pour Word
    Dim chemin  As String, cible As String
    
    
    On Error Resume Next
    cible = ActiveSheet.Name & "!" & ActiveCell.Name.Name
    On Error GoTo 0
    
    If cible = "" Then
        MsgBox "La cellule sélectionnée ne possède pas de nom." & vbCrLf & vbCrLf & _
                "Sur votre document excel, veuillez sélectionner une cellule nommé."
        Exit Sub
    End If
    
    chemin = Replace(ActiveWorkbook.FullName, "\", "\\")
    
    chemin = "LINK Excel.Sheet.8 " & _
                """" & chemin & """" & " " & """" & cible & """" & _
                    " \a \t"
    
    '\* MERGEFORMAT
   
    
'Dans le presse-papier

    'activer la reference Microsoft Forms 2.0 Object Library
    'parcourir FM20.dll

Dim x As New dataobject

With x
    .settext chemin
    .putinclipboard
End With
End Sub


Dans word ce placer à l'endroit voulu :
VB:
Sub LienDeExcel()
'activer la reference Microsoft Forms 2.0 Object Library
'parcourir FM20.dll

    Application.ScreenUpdating = False
    
'Récupération du presse-papier
On Error Resume Next
    
    Dim MyData As DataObject
    
    Set MyData = New DataObject
    
    
    Dim lien As String

    ' Get data from the clipboard.
    MyData.GetFromClipboard
    
    ' Assign clipboard contents to string variable.
    lien = MyData.GetText(1)
       
    If lien = "" Then
        MsgBox "Aucun texte n'est présent dans le presse-papier." & vbCrLf & vbCrLf & _
                "Sur votre document excel, veuillez sélectionner une cellule nommé et utiliser la macro."
        Exit Sub
    End If
    
   
    If Not lien Like "*LINK Excel.Sheet.8*" Then
        MsgBox "Sur votre document excel, veuillez sélectionner une cellule nommé et utiliser la macro."
        Exit Sub
    End If
    
    ActiveDocument.Fields.Add Range:=Selection.Range, Type:=wdFieldEmpty, Text:= _
        lien, PreserveFormatting:=False
End Sub


Dans Word et Excel :
Activer la reference Microsoft Forms 2.0 Object Library
(Parcourir FM20.dll si comme moi vous ne la trouvé pas)
 
Dernière édition:

Kiseki

XLDnaute Occasionnel
Re : [VBA] Lien Excel vers Word (utilisant un nom définis)

Bonjour,


Juste avec une macro word pilotant Excel :

Sélectionner une cellule de votre classeur et activer la macro sous Word pour faire un lien :

VB:
Option Explicit

Sub LienDeNomCellule()
'Activer la reference Microsoft Excel

Application.ScreenUpdating = False


'Document excel
    
    Dim xl As Excel.Application
    
On Error Resume Next

    Set xl = GetObject(, "Excel.Application")


    If Err <> 0 Then
        MsgBox "Le document excel n'est pas ouvert."
        Exit Sub
    End If

'Contenu du champ
   Dim chemin  As String, cible As String
   
   

    cible = xl.ActiveSheet.Name & "!" & xl.ActiveCell.Name.Name

On Error GoTo 0
   
    If cible = "" Then
        MsgBox "La cellule sélectionnée ne possède pas de nom ou fait référence à une plage." & vbCrLf & vbCrLf & _
                "Sur votre document excel, veuillez sélectionner une cellule nommé."
        Exit Sub
    End If
   
    chemin = Replace(xl.ActiveWorkbook.FullName, "\", "\\")
   
    chemin = "LINK Excel.Sheet.8 " & _
                """" & chemin & """" & " " & """" & cible & """" & _
                    " \a \t"


ActiveDocument.Fields.Add Range:=Selection.Range, Type:=wdFieldEmpty, Text:= _
    chemin, PreserveFormatting:=False
End Sub


Je pense qu'avec ces deux principes on est capable de ce débrouiller pour faire ses propres liens d'Excel dans Word.
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
314 644
Messages
2 111 529
Membres
111 189
dernier inscrit
Laurent.