piloter word depuis excel

piloter word depuis excel - VB/VBA/VBS - Programmation

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 :hello:  
 
zoreye

Reply

Marsh Posté le 30-07-2007 à 09:59:09   

Reply

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...

Reply

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

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed