Désolé ce n est pas très bien expliqué tout cela
Dans une première phase on allait chercher via le numéro « immat » pour la cibler une donnée dans un fichier Excel c est l objet de ma première proposition puis finalement tu as préféré tout inclure dans Excel signets et données pour alimenter Word c est ma deuxième proposition
Pour me dire maintenant que c est un mixte des deux que tu souhaites
Pas facile de te suivre !!!
Ce numéro « immat » obtenu dans le signet du même nom du fichier Word que doit on en faire dans Excel pour ensuite récupérer toutes les données de tous les signets ?
Quel rapport entre ce numéro « immat » et la liste des signets avec leur donnée que je pensait scruter en colonne À et B du fichier Excel
A quoi sert ce numéro « immat » si la liste à récupérer est en colonne À et B ?
Excuse moi si c’est pas très clair. La première explication est la bonne. Je souhaite récupérer l’info de recherche dans word (immat). Si je veux l’ecrire dans excel c’est pour simplifier la recherche, comme on a fait dans feuil 1 (si tu regarde mon excel la feuil1 sert à la recherche tandis que l’autre feuil est la base de données. Tu verras aussi que dans feuil 1 c’est des =recherchex)
En fait il n’y a que immat qui vient de Word, tout le reste vient de excel. C’est ce que j’essaye de t’expliquer depuis le début ^^’
Ce numéro « immat » obtenu dans le signet du même nom du fichier Word que doit on en faire dans Excel pour ensuite récupérer toutes les données de tous les signets ?
On ecrit immat en B2 (ensuite B3, B4, etc sont des rechercheX basé sur immat)
A quoi sert ce numéro « immat » si la liste à récupérer est en colonne À et B ?
Immat varie à chaque nouvelle utilisation du fichier (c’est un numéro d’immatriculation d’un produit, les autres signets nous donnent les caractéristiques de ce produits)
Tu ne m as toujours pas dit l utilité du numéro « immat » récupéré dans Word pour le fichier Excel
A quoi sert il ?
Une fois récupéré qu’elle sa finalté dans le traitement ?
Si il est si important de le déterminer c est qu il doit servir à quelque chose dans la démarche mais à quoi ?
Merci pour cette précision d importance
Immat varie à chaque nouvelle utilisation du fichier (c’est un numéro d’immatriculation d’un produit, les autres signets nous donnent les caractéristiques de ce produits)
Dans le traitement il sert à retrouver les autres signets. Si tu regardes dans le fichier excel, B3, B4, etc sont des rechercheX basé sur la valeur d’immat en B2.
« Dans le traitement il sert à retrouver les autres signets. Si tu regardes dans le fichier excel, B3, B4, etc sont des rechercheX basé sur la valeur d’immat en B2. »
Retrouver les autres signets dans le fichier Excel je suppose mais celui-ci dans ce fichier est à rechercher où pour qu’il me donne ces informations ???
Tu ne m’as pas transmis de fichier Excel qui me permette de vérifier ceci :
« Si tu regardes dans le fichier excel, B3, B4, etc sont des rechercheX basé sur la valeur d’immat en B2. »
J’ai besoin de connaitre la manière d’utiliser cet « immat » dans le fichier Excel pour récupérer les données à rapporter dans Word (signets avec leur donnée)
l’immat est où (quelle colonne ou quelle ligne)
les données en correspondance sont à récupérer comment (cellules adjacentes, cellules d’une colonne la même ou celle de droite ou de gauche)
J’ai besoin de toutes ces informations pour monter un code approprié
Fais moi un fichier Excel avec la structure que tu envisages dans lequel sont les codes « immat » et les différents signets associés à leur donné sinon je ne m’en sortirai pas
ok, je crois que j’ai trouvé en ajoutant .Sheets("Feuil1").Range("B2") = ActiveDocument.FormFields("immat").Result
Ca donne
Sub Traitement()
Set DocExel = CreateObject("excel.application")
Set Wkb = DocExel.Workbooks.Open(ActiveDocument.Path & "\" & "Classeur1.xlsx")
DocExel.Visible = True
With Wkb
.Sheets("Feuil1").Range("B2") = ActiveDocument.FormFields("immat").Result
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
« La valeur de immat est a écrire dans la celulle B2 de l’onglet feuil1 »
Pourquoi quel intêret dans la procédure si au final avec les cellules qui suivent je peux sans cet « immat » remplir tous les signets colonne A avec les données de la colonne B quelque soit la valeur de l’immat
Dans ce contexte je n’ai pas besoin de l’immat pour compléter tous les signet de leur donnée respective
Si tu regardes, les cellules B3 et en dessous sont des rechercheX qui se basent sur immat en B2.
Donc si je modifie pas B2, les valeurs ne sont pas les bonnes.
Je ne suis pas dans ton esprit et donc ne peux pas voir la manière dont tu conçois cette approche
C’est à toi à me donner tout le détail et donc de me dire tout simplement ceci :
Il faut récupérer la référence « immat » pour la mettre en cellule « B2 » du fichier excel qui permettra ainsi de fabriquer les paramètres à utiliser pour alimenter les signets
Ainsi moi de comprendre l’utilité de cette récupération de Word pour mettre à jour ses signets
J’ai enfin compris
Mais cette manière d’opérer est la tienne moi je ne peux l’appréhender tu dois me l’expliquer
Je te joint le document Word adapté à ce fonctionnement
Le traitement alimente de la donnée « immat » de ce fichier l’onglet « Feuil1 » fichier Excel « Classeur1.xlsx » en cellule B2 puis à partir de la ligne 3 de cet onglet récupère toutes les données nécessaires à l’alimentation des signets Word colonne A et B (signet/donnée)
J’ai essayé le traitement le problème c’est que la modification de la cellule B2 pour un nouvel « immat » mets à mal toutes tes formules colonne A et B à partir de la ligne 3
Si on change à la main cette référence dernier chiffre par exemple pour le remettre ensuite les formules ne veulent plus rien savoir même immat remis à l’identique
Je te laisse regarder mais il y a une instabilité qu’il faut corriger
A quoi sert tout le début du code ?
On en revient qu fait que sur ton code je remplit pas la valeur du champ alors que moi sur mon code si.
Tu vois quelque chose qui va pas sur le code que j’ai fait ?
Parceque pour moi ça fonctionne bien, j’essaye maintenant de faire une actualisation des refs de champ et j’y arrive avec
Dim xRange As Range
Dim xFiled As Field
For Each xRange In ActiveDocument.StoryRanges
For Each xFiled In xRange.Fields
xFiled.Update
Next
Next
Par le jeu des instructions Replace en utilisant les variable Texte1 et Texte2 de proche en proche je vide la variable Texte de son début et de sa fin pour n’obtenir uniquement que la donnée qui m’intéresse l’immat
Je ne connais pas ton code maintenant si il fonctionne utilises le
Je suis plus branché Excel que Word donc pour ce dernier je fouine sur internet pour construire mes procédures
Avec ActiveDocument.FormFields("immat").Result on récupère directement le contenu du champ texte du signet, pas le texte après et surtout je n’ai à le taper qu’une fois pour toutes les autre réptition de mon document. Je te l’ai envoyé mon code (qui est principalement le tiens à la base)
Sub Traitement()
Set DocExel = CreateObject("excel.application")
Set Wkb = DocExel.Workbooks.Open(ActiveDocument.Path & "\" & "Registre immatriculation.xlsx")
DocExel.Visible = False
With Wkb
.Sheets("Feuil1").Range("B2") = ActiveDocument.FormFields("immat").Result
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 Savechanges:=False
DocExel.Quit
End Sub
Merci en tout cas pour toute ton aide ! Je vais adapter ça à mon fichier réel et je reviens si j’ai un soucis, merci encore
« Avec ActiveDocument.FormFields("immat").Result on récupère directement le contenu du champ texte du signet, pas le texte après »
A condition que l on soit certain qu il n y ai dans cette partie que l « immat » ce qui n est pas un absolu
Tu t en rendra compte peut être à l usage
Maintenant je souhaite qu une seule me tromper sur ce point
Une petite précision ma boucle Do While s exécute jusqu’à la première cellule vide en colonne À donc évite les trous dans la liste de cette colonne
Bonne chance pour la suite et à ta disposition si besoin
N oublies pas de valider ma réponse un plus sympathique
« Faudrait que je rajoute un message d’erreur si le code immat n’est pas trouvé »
Ce n’est pas qu’il ne sera pas trouvé mais inexact car pollué de caractères supplémentaires avant après ou les deux
Pour le trou éventuel en colonne A tu peux mettre ceci :
If i < .Sheets(« Feuil1 »).Range(« A » & Rows.Count).end(xlup).Row Then
MsgBox(« ton message »)
End If