Champ sur word > Saisie automatique signet selon tableau Excel

Bonjour le forum,

Je débute un peu en formulaire Word. J’ai un fichier word dont j’aimerais que plusieurs signets se remplissent automatiquement selon un champ que je remplis au début et dont les informations issu de ce champ sont présentes sur un fichier excel.

Dans l’idée :
Page 1 : en mode formulaire je renseigne une chaine de caractère
Sur un fichier excel, j’ai un tableau dans lequel une collonne dispose de la cellule correspond à cette chaine de caractères
Sur les autres pages : J’ai plusieurs signets qui prennent la valeur correspondant à une colonne donnée sur la même que ma chaine de caractère (fonction recherchex quoi)

J’arrive à faire une petite macro de recherche sur mon fichier excel et une autre sur mon word, il faudrait maintenant que mes variables soit connectées et lancées depuis word

Sur word mon « immat » est renseigné dans un formulaire texte, je le récupère en immat :

Sub test()
MsgBox ActiveDocument.FormFields("immat").Result
End Sub

Sur excel (si je tape l’immat en dur pour l’instant):

Sub JeRecherche()
Dim Ligne As Integer

immat = "201907009"

For Ligne = 3 To Range("m99999").End(xlUp).Row

    If Range("M" & Ligne) = immat Then

        NCC = Range("c" & Ligne)
        MsgBox NCC
        Exit Sub

    End If

Next Ligne
MsgBox "Immat non trouvée"
End Sub

Faudrait ensuite que je comprenne comment récupérer ce NCC est l’inscrire dans un signet.

Dans l’idéal j’aimerai aussi que des images se modifient selon cette chaine de caractère.

Merci !

Bonjour

Mets dans un même répertoire ces 2 fichiers (un fichier Word à récupérer sur Cjoint un fichier Excel en dessous)

Puis ouvre le fichier Word et exécutes la macro « Traitement »

Une boîte de dialogue te donne la donnée colonne C de la ligne qui détient en colonne M l’immat « 201907009 » qui se trouve dans le fichier Excel onglet « Feuil1 »

A adapter la procédure en fonction de ton contexte

Pour le signet il me faudrait une document Word construit avec celui-ci

Fais moi un retour


Classeur1.xlsx (9,6 Ko)
1 J'aime

Excellent ! C’est déjà un super début ! Tu as bien compris ce dont j’avais besoin !

J’ai ajouté le champ et le signet exemple

Merci pour ce retour

Une petite précision

Pour le fonctionnement du code il est important que la Référence « Microsoft Excel Object library » soit cochée comme ceci :

sur ton fichier j’ai mis la version 16.0 qui est celle dont je dispose

Si cette version n’est pas installée chez toi celle-ci sera cochée mais avec la mention « Manquante » à côté
Il faudra la décocher et aller côcher la version disponible dans ta liste

J’ai rajouté des lignes de code pour alimenter le signet « NCC » de la valeur récupérée dans le fichier Excel que j’ai intégré sous celui-ci en tout début de ligne
C’est modifiable mais il faut me donner des précisions quant à son positionnement dans le signet

Mais je n’ai rien adapté pour le signet « immat » car n’ayant aucune indication sur la source à récupérer

Tu n’as parlé que d’une seule donnée à récupérer
Quid de cette 2°

Ci-après le document Word modifié à mettre dans le même répertoire que le classeur Excel source

Testes et dis moi

1 J'aime

En fait mon idée c’était de me mettre en mode formulaire, de renseigner le numéro d’immat puis les autres signet serait remplacé par ce que dit la macro (le champ NCC prend la valeur récupérée sur excel)

Et tu vois sur le fichier le champ « saisir numéro d’immatriculation » est le signet : « immat »
Idem pour le deuxieme champ NCC qui porte le nom de signet : « NCC »

Ce sont des exemples, si j’arrive à le faire avec eux je devrais pouvoir multiplier la macro pour les autres (j’aurai plusieurs champs à modifier en fonction des colonnes du fichier excel)

Donc en d’autres termes ce que je t’ai fourni te conviens ?
Merci de me dire et de valider ma réponse si c’est le cas un plus bien agréable

Ca me fait avancer mais je reste toujours bloquée.
Quand je lance la macro, on arrive bien à trouver les caractères qui vont bien sur excel.
Maintenant il faudrait que « 201907009 » ne soit pas ecrit en dure dans le code mais soit égale au texte du champ immat.

Idem pour la réponde trouvée dans excel, il faudrait que la valeur du signet NCC devienne la valeur trouvée

Après avoir fouiné sur internet et en mettant à contribution toutes mes connaissances j’ai bricolé quelques lignes de code qui semple fonctionner

l’immat utilisé est celui en dessous de son signet dans la feuille

Je viens d’essayer avec une autre référence que j’ai mise après le signet et que j’ai incluse dans le fichier Excel avec une autre donnée en colonne C à récupérer « TEST » et cela a bien fonctionné

Testes de ton côté et dis moi

1 J'aime

On peut pas « simplement » remplacer la valeur des signets ?
Pas le mettre après le signet, mais modifier le signet. Parce que le signet est utilisé ensuite à plusieurs endroits dans le fichier. Le NCC est repris un peu partout en y faisant « référence » (insertien > champ > rèf > NCC)

Désolé mais on a besoin du nom du signet pour se repérer et récupérer l immat ou ramener la valeur NCC
Donc le nom du signet doit ne pas être modifié ni supprimé c est le seul repère il est indispensable pour l automatisme
Pas d autre choix hélas

En fait moi je veux pas modifier le nom du signet, mais sa valeur.
NCC c’est le nom du signet et ça reste tel quel.
Mais ça valeur initiale « Voici le NCC par défaut » deviendrait « ESSAI » par exemple

Une autre façon de faire serait de créer un onglet sur le Excel avec les rechercheX et j’ai plus qu’à dire A1 = immat et ensuite mes autres signets = valeur de B1, C1, etc

Bonsoir
Je pense que si le nom du signet ne change pas cela devrait fonctionner
Il faut le tester
A toi de me dire

« Une autre façon de faire serait de créer un onglet sur le Excel avec les rechercheX et j’ai plus qu’à dire A1 = immat et ensuite mes autres signets = valeur de B1, C1, etc »

Donc tu t abtiens du document Word avec cette solution si j ai bien compris

Il n y a que toi qui peut juger de cette option je ne connais pas tout le contexte de ton projet donc je peux difficilement donner un avis

Vois ce qui est le mieux pour toi et si besoin je suis à ta disposition

Je ne sais pas comment modifier le contenu d’un signet.

Pour le reste ce serait pour pas avoir à faire la recherche dans Word, ça pourrait simplifier je pense.
Mais on reste sur Word hin, mon document entier est sur word

On dit : ouvrir le fichier Excel > A1 = Valeur de Immat (B1,C1,D1, etc sont préparé pour se calculer en fonction de A1) > Les signets suivant prennent la valeur de B1, C1, etc (NCC = B1, Signet 2 = C1, etc)

Après avoir fouiné sur internet sur le sujet il s’avère que le contenu des signets n’est pas modifiable
L’option préconisé est de fonctionner avec un modèle avec ces contenus vierges dont on fais à chaque fois une copie pour qu’à chaque traitement on vient le compléter
Le traitement ne doit servir qu’une fois pour chaque copie réalisée

Je te propose pour éviter cette contrainte de récupérer pour chaque signet la donnée à intégrer et l’inscrire après le signet avec un petit tiret à chaque fois
Ainsi après celui-ci une suite de données séparées par cette balise la dernière étant celle qui vient d’être récupérée

Tu mets dans le fichier Excel en colonne A le nom de tes signets en colonne B la donnée correspondante de destination
Le traitement pour chacun d’entre eux mettra dans le fichier Word à la suite précédé du séparateur la référence de la colonne B

Ci-joint le fichier Excel dans cet esprit ainsi que le fichier Word avec la procédure adaptée

Testes et dis moi

Classeur1.xlsx (10,8 Ko)

1 J'aime

Après les signets c’est peut-être pas ça qu’il faut utiliser, je sais pas.
Moi mon but c’est de passer en mode remplissage de formulaire (revision > protéger > activer restriction) puis que l’utilisateur se déplace de champs en champs. Le premier champs remplis serait immat, et c’est la clé de recherche (comme tu vois sur le excel). Donc en lançant la macro, on fait comme t’as fait en mettant la valeur de immat en B2. Ensuite on lit les autres valeur et on l’écrit soit en signet (mais ça semble impossible) soit autrement. En champ nommé ?

Je t’ai préparé mon fichier en laissant juste les premières pages et en anonymisant https://cjoint.com/c/KCEq3CYkJIA

J’ai mis en vert les différent champs qui prennent les valeur du excel. Comme j’utilise les signets et champs je le saisie une seule fois et çà reprend la valeur à chaque fois.

Classeur1.xlsx (12,9 Ko)

Tu me dis pas si ce que je t’ai proposé te conviens
Mise des données juxtaposées avec un tiret entre
Avec dans Excel colonne A le nom des signets en colonne B leur donnée

Ton avis ?

1 J'aime

C’est compliqué parceque si je renseigne pas le signet pour reprend le NCC 20 fois c’est plus simple en champs. Je viens de voir qu’on pouvait remplacer la valeur d’un signet avec ça !! : ActiveDocument.FormFields("NCC").Result = "immat"

Je viens de tester et ça marche ! Je vais essayer de l’inclure à ton code.

Tu saurais juste me dire comment écrire la valeur de immat dans B2 ?

Et oui, pour le reste, la boucle ça parait très bien !

Ca à l’air de bien fonctionné !

Sub Traitement()
'
' Traitement Macro
'
'
Set DocExel = CreateObject("excel.application")
    Set Wkb = DocExel.Workbooks.Open(ActiveDocument.Path & "\" & "Classeur1.xlsx")
DocExel.Visible = True
With Wkb
i = 2
Do While .Sheets("Feuil1").Range("A" & i) <> ""
signet = .Sheets("Feuil1").Range("A" & i)
Donnée = .Sheets("Feuil1").Range("B" & i)
ActiveDocument.FormFields(signet).Result = Donnée
'ActiveDocument.Bookmarks(signet).Range.InsertAfter "-" & Donnée
i = i + 1
Loop
End With
Wkb.Close True
DocExel.Quit
End Sub

ActiveDocument.FormFields(« NCC »).Result = « immat »

Que cherches tu à faire avec cette ligne ???

Là j’avoue ne pas comprendre

« Tu saurais juste me dire comment écrire la valeur de immat dans B2 ? »

C’est ce que mon code réalise ici :

ActiveDocument.FormFields(signet).Result = Donnée

Donnée est la variable qui porte la valeur de la colonne B signet celle de la valeur colonne A

Je ne te suis pas dans tes intentions

Désolé il faut me faire un dessin

mdr

C’est pas évident !

En fait immat est donné par Word
et tous les autres signets sont donnés par Excel.
Il faut ecrire la valeur de immat depuis word sur Excel

Je ne me sers pas de ActiveDocument.FormFields(« NCC »).Result = « immat »

mais de ActiveDocument.FormFields(signet).Result = Donnée que j’ai trouvé entre temps

Regarde, j’ai actualisé le fichier https://cjoint.com/c/KCEsBm2cnKA On y arrive !