Microsoft 365 Identifier texte à longueur variable - VBA Excel vers Word

TrXtan

XLDnaute Nouveau
Bonjour à toutes et tous,

J'utilise une macro qui actualise certaines zones de texte dans un document Word, avec du texte provenant d'un classeur excel.
La macro fonctionne grosso modo comme:
- suppression des textes n du word (repérage par signets)
- collage des textes n+1 issus de l'excel aux mêmes emplacements (grâce aux signets une fois de plus)

Mon problème se situe à l'étape de suppression des textes n.
En effet, j'utilise pour l'instant l'argument wdParagraphs, qui permet de sélectionner des paragraphes au signet demandé.
Cependant, le nombre de paragraphes du texte collé est variable...

On peut donc se retouver avec un texte du style:
"Paragraphe 1
Paragraphe 2
Paragraphe 3"

devant être remplacé par
"Paragraphe 1"
or je n'ai pas de moyen de déterminer le nombre de paragraphes du texte à supprimer.

Je cherche donc un moyen de coller le texte permettant de l'identifier dans son intégralité lors de l'itération suivante (i.e., suppression).
- J'ai pensé à insérer des zones de texte, mais il n'est pas possible de les nommer (et j'ai besoin d'une correspondance exacte avec l'excel car j'ai une dizaine de zones de texte différentes). De plus, j'ai d'autres "shapes" dans mon document qu'il ne faut pas supprimer, donc pas possible de supprimer toutes les "shapes" d'un coup. Et les zones de texte posent des problèmes de mise en page car la longueur des textes est variable.
- J'ai pensé à insérer un compteur de paragraphes au moment du collage n, repris à la suppression n+1; mais il faut pour celà créer des entrées dans le fichier excel, qui est déjà saturé. C'est ma solution de secours mais j'espère encore trouver plus simple.

Si vous avez une idée d'objet nommable permettant d'insérer du texte, je suis preneur...
Je peux fournir un extrait de la macro/clarifier mon propos au besoin.

Au plaisir de vous lire,
Tristan H
 
Solution
Bonjour Tristan,
Une méthode possible pour ce type de besoin est de placer un tableau (sans bordure) d'une seule colonne et autant de lignes que de signets de l'ancien doc. (en remplacement des signets)
Il est alors simple de se référer à la case n (pouvant comporter plusieurs paragraphes) du genre :
VB:
WordDoc.Tables(1).Cell(n, 1).Range.Text = "Test Bidule"
(ici exemple pour le 1er tableau du doc, ligne n, colonne 1)
rq pour word le mot Cell est bien sans S à la fin
P.

p56

XLDnaute Occasionnel
Bonjour Tristan,
Une méthode possible pour ce type de besoin est de placer un tableau (sans bordure) d'une seule colonne et autant de lignes que de signets de l'ancien doc. (en remplacement des signets)
Il est alors simple de se référer à la case n (pouvant comporter plusieurs paragraphes) du genre :
VB:
WordDoc.Tables(1).Cell(n, 1).Range.Text = "Test Bidule"
(ici exemple pour le 1er tableau du doc, ligne n, colonne 1)
rq pour word le mot Cell est bien sans S à la fin
P.
 

TrXtan

XLDnaute Nouveau
Bonjour Tristan,
Une méthode possible pour ce type de besoin est de placer un tableau (sans bordure) d'une seule colonne et autant de lignes que de signets de l'ancien doc. (en remplacement des signets)
Il est alors simple de se référer à la case n (pouvant comporter plusieurs paragraphes) du genre :
VB:
WordDoc.Tables(1).Cell(n, 1).Range.Text = "Test Bidule"
(ici exemple pour le 1er tableau du doc, ligne n, colonne 1)
rq pour word le mot Cell est bien sans S à la fin
P.
Bonjour p56,

Merci pour ta solution qui fonctionne parfaitement. C'est exactement ce que je cherchais.

Bon début de semaine,
Tristan H
 

Discussions similaires

Statistiques des forums

Discussions
313 240
Messages
2 096 482
Membres
106 638
dernier inscrit
Francois wamouno