piloter word depuis excel - VB/VBA/VBS - Programmation
Marsh Posté le 30-07-2007 à 11:13:09
bonjour,
quelques infos pour accélérer ton traitement :
screenupdate doit être mis à false, ca évitera de voir tout ce qui se passe.
je ne vois pas où tu as placé ton next h...
Marsh Posté le 30-07-2007 à 12:31:27
salut
tu parles de la premiere solution ou de la deuxieme pour screenupdate?Ou des deux?
Pour le next:
pour la premiere, j'ai oublie de le mettre dans mon mess mais ca marche pas de pb
pour le deuxieme, je l'ai mis tout à la fin mais pour l'instant la deuxieme solution ne me sert à rien tant que je ne saurai pas comment lui dire de sauter des symboles
merci de l'info en tout cas
Marsh Posté le 30-07-2007 à 09:59:09
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