Partage
  • Partager sur Facebook
  • Partager sur Twitter

Lier automatiquement Excel et Word

4 février 2021 à 15:13:17

Bonjour,

Je recherche actuellement un moyen de lier automatiquement les emplacements d'un fichier Word et Excel.

J'arrive à attribuer le chemin d'accès vers le fichier Word grâce à cela :

objWord.Documents.Open ("Chemin.docm")

Ce que je voudrais, c'est que si je déplace le fichier Word, le chemin d'accès du VBA soit également modifié en conséquence.

Après plusieurs recherches je n'ai rien trouvé de concluant. Avez-vous une technique spécifique pour cela ?

Merci beaucoup par avance :)

  • Partager sur Facebook
  • Partager sur Twitter
4 février 2021 à 19:18:29

Difficile, à moins de rechercher le fichier sur le(s) disque(s)

Ou si le fichier excel bouge avec le fichier word, en utilisant des chemin relatif (c'est ce que tu fais ici, il va ouvrir le fichier chemin.docm dans le répertoire courant.

-
Edité par umfred 4 février 2021 à 19:18:40

  • Partager sur Facebook
  • Partager sur Twitter
5 février 2021 à 9:06:46

Peut-être en utilisant un genre de fichier .ini ou une clef de registre. A chaque déplacement effectué, le nouveau répertoire est mémorisé et cette donnée est consultée à chaque chargement
  • Partager sur Facebook
  • Partager sur Twitter

Le crayon la gomme et le papier sont les meilleurs outils du programmeur !

6 février 2021 à 23:01:18

Bonjour,

Merci pour vos réponses, j'ai finalement opté pour la solution avec chemin relatif car plus simple.

Je récupère tout d'abord dans une cellule le chemin et nom fichier grâce au programme suivant (en sachant qu'un seul fichier de type ".docm" apparaîtra dans le dossier). Je peux ainsi l'actualiser directement en cliquant sur le bouton lorsque le fichier est renommé.

Sub CommandButton1_Click()

    Dim Chemin As String, Fichier As String
 
    Chemin = ThisWorkbook.Path & "\"
 
    Fichier = Dir(Chemin & "*.docm")
 
    Do While Len(Fichier) > 0
        Range("D25").Value = Chemin & Fichier
        Fichier = Dir()
    Loop
End Sub

Ensuite, j'indique donc à Excel que le fichier Word qu'il doit m'ouvrir se trouve à l'emplacement de la cellule précédemment actualisée.7

Sub Test1()

Dim Feuille as Worksheet
Dim objWord as Object
Dim Chemin as String

Set Feuille = ThisWorkbook.Sheets("Test")
Set objWord = CreateObject("Word.Application")

Chemin = Range("D25").Value

Je bloque sur un autre point maintenant. J'aimerais actualiser le chemin d'accès des tableaux dynamiques liés entre le fichier Excel et Word lorsque ceux-ci sont déplacés ailleurs. Je sais qu'on peut le faire sous Word via Informations --> Modifier les sources des fichiers liés.

Mais existe t-il un moyen de l'indiquer directement via VBA ? Mes recherches n'ont pas étés concluantes...

Merci par avance.

  • Partager sur Facebook
  • Partager sur Twitter
8 février 2021 à 12:21:00

Lance l'enregistrement d'une macro et fais ta manipulation (arrête l'enregistrement à la fin de la manipulation) et regarde le code généré, ça t'aidera peut-être
  • Partager sur Facebook
  • Partager sur Twitter
8 février 2021 à 17:53:59

J'avais déjà essayé cette solution mais sans résultat. La macro n'enregistre aucun code...

As-tu une autre astuce ?

De plus, je bloque également sur autre chose. Je souhaite ouvrir un document Word si aucun n'est ouvert, et pouvoir modifier le document avec l'actualisation de signet si celui-ci est ouvert. 

On Error Resume Next 'Permet d'éviter l'erreur 429

Set objWord = GetObject(Chemin)
    
    If objWord Is Nothing Then
        Set objWord = CreateObject("Word.Application")
        objWord.Documents.Open (Chemin)
        objWord.Visible = True
        Set wrd = objWord.Application

    ElseIf Not objWord Is Nothing Then
        Set wrd = objWord.Application

    End If

En utilisant cela, j'arrive bien à actualiser le document Word lorsqu'il est ouvert. Cependant, quand le document est fermé, je n'arrive pas à l'ouvrir.

Je ne comprends pas le problème du programme ?

Merci encore par avance.

Réponse à ce post : 

J'avais oublié de mettre une virgule à cette endroit :

Set objWord = GetObject(, "Word.Application")

Maintenant, si quelqu'un à une solution pour le 1er souci, je suis preneur :)

-
Edité par Doc Brown111 9 février 2021 à 14:31:10

  • Partager sur Facebook
  • Partager sur Twitter
26 février 2021 à 16:42:03

Bonjour,

Toujours pas d'idées ?

  • Partager sur Facebook
  • Partager sur Twitter