Bonjour,
j'ai un problème à vous soumettre: je réalise une application sous excel qui édite un rapport word.
Sous excel, je me retrouve avec une colonne qui contient à chaque ligne un paragraphe de mon texte word. Une ligne peut être vide si l'utilisateur n'a pas rentré les données correspondantes à cette ligne sous excel.
C'est l'envoi de ces lignes (environ 3000) de texte vers word qui me pose problème. Pour ça j'ai trouvé deux solutions:
PREMIERE SOLUTION:
J'insère des signets que je nomme aI (avec I le numéro de la ligne sous excel) dans word et je relie chaque ligne de texte sous excel à un signet. Ca donne un truc du style:
Dim h As Integer
For h = 323 To 3004
Dim Texte As Variant
Texte = Cells(h, 3).Value
With appWord
If Not Texte = "" Then
.Selection.Goto What:=wdGoToBookmark, Name:="a" & h
.Selection.TypeText Text:=Texte
End If
End With
Ca marche très bien mais il y a de gros inconvénients:
1/je n'ai pas le temps d'insérer 3000 signets sous word
2/ca prend un peu de temps pour générer le rapport
Il y a par contre un avantage de taille:
1/Si le texte est vide je peux lui dire de passer au texte suivant
DEUXIEME SOLUTION
Au lieu d'insérer des signets j'utilise les caractères génériques. Par exemple, j'insère 3000 fois un symbole sous word: à chaque fois qu'il rencontre une ligne vide il efface ou saute ce symbole et passe au suivant, à chaque fois qu'il trouve une ligne remplie il remplace le symbole par la ligne de texte.
Ca donne quelque chose du style:
For h = 323 To 3004
Dim Texte As Variant
Texte = Cells(h, 3).Value
With appWord
.Selection.Find.Execute
.Selection.Find.ClearFormatting
.Selection.Find.Replacement.ClearFormatting
With appWord.Selection.Find
.Text = "^symbole"
.Replacement.Text = "^Texte"
.Forward = True
.Wrap = wdFindContinue
.MatchWildcards = True
End With
.Selection.Find.Execute Replace:=wdReplaceAll
End With
Next
MON PROBLEME:
1/ je ne sais pas comment lui dire que si la ligne est vide il doit passer au symbole suivant
2/ si on ne peut pas lui dire ca, word mettra trop de temps pour éditer le rapport
Voila pour les courageux qui sont arrivés au bout du sujet, j'espere ne pas trop vous avoir saouler et avoir été clair. Bien sur je suis ouvert à toute solution autre que les deux précédentes.
Merci d'avance pour votre aide
zoreye