Boucle

Résolu
Esprit44 Messages postés 27 Date d'inscription mercredi 21 juillet 2004 Statut Membre Dernière intervention 12 mai 2005 - 11 août 2004 à 10:05
Scalpweb Messages postés 1467 Date d'inscription samedi 13 mars 2004 Statut Membre Dernière intervention 5 mai 2010 - 11 août 2004 à 15:35
SAlut tout le monde

j ai un bout de code mais qui faut l avouer n'est pas vraiment optimisé
je vous explique ce qui va suivre
Un user coche des checkbox. Il peut en cocher le nombre qu il veut, le but etant de selectionner le nb de paragrahe qu il souhaite faire apparaitre dans son nouveau doc word ( par copier/coller). actuellement, le code que j ai fait, fonctionne mais j aimerais le simplifier avec une boucle eventuellement de sorte que lorsque je rajoute de nouveaux paragraphes je n ai pas a rajouter ce code. est ce possible ? si oui comment? parceque si j ai 20 paragraphes ca va faire bcp de ligne pour pas grand chose!! donc si il possibilité de simplifier ca merci!!

Merci pour l aide que vous pourrez m apporter

ChRiS

Voici le bout code

Dim MonDocument As String
MonDocument = Documents.Add
DocTravail.Value = MonDocument

If CheckBox1.Value Then
Documents("source.doc").Activate
Selection.HomeKey Unit:=wdStory
With Selection.Find
.ClearFormatting
.Text = "<§1>"
.MatchWildcards = 0
.Forward = 1
.Replacement.Text = ""
.Replacement.ClearFormatting
.Execute ' recherche du mot1
Selection.MoveRight 'déplacement a droite du mot
.Text = "</§1>"
Selection.Extend ' etendre la selection
.Execute ' atteindre le mot2
Selection.MoveLeft Unit:=wdCharacter, Count:=Len("</§1>"), Extend:=1
' reculer du mot 2
End With
Selection.Copy
Documents(MonDocument).Activate
Selection.Paste
Selection.TypeParagraph
Documents("source.doc").Activate
End If

If CheckBox2.Value Then
Documents("source.doc").Activate
Selection.HomeKey Unit:=wdStory
With Selection.Find
.ClearFormatting
.Text = "<§2>"
.MatchWildcards = 0
.Forward = 1
.Replacement.Text = ""
.Replacement.ClearFormatting
.Execute ' recherche du mot1
Selection.MoveRight 'déplacement a droite du mot
.Text = "</§2>"
Selection.Extend ' etendre la selection
.Execute ' atteindre le mot2
Selection.MoveLeft Unit:=wdCharacter, Count:=Len("</§2>"), Extend:=1
' reculer du mot 2
End With
Selection.Copy
Documents(MonDocument).Activate
Selection.Paste
Selection.TypeParagraph
Documents("source.doc").Activate
End If

10 réponses

Scalpweb Messages postés 1467 Date d'inscription samedi 13 mars 2004 Statut Membre Dernière intervention 5 mai 2010 4
11 août 2004 à 12:31
Alors voilà :
Déjà, tu peux utiliser un groupe de checkbox. C'est à dire, que chaque checkbox est une copie du checkbox d'origine. Donc, il ont tous le même nom, mais un index différent. Après, tu peux faire un code du genre :

for i = 1 to CheckBox.count - 1

If CheckBox(i).Value Then
Documents("source.doc").Activate
Selection.HomeKey Unit:=wdStory
With Selection.Find
.ClearFormatting
.Text = "<§" & i & ">"
.MatchWildcards = 0
.Forward = 1
.Replacement.Text = ""
.Replacement.ClearFormatting
.Execute ' recherche du mot1
Selection.MoveRight 'déplacement a droite du mot
.Text = "<§" & i & ">"
Selection.Extend ' etendre la selection
.Execute ' atteindre le mot2
Selection.MoveLeft Unit:=wdCharacter, Count:=Len("</§" & i & ">"), Extend:=1
' reculer du mot 2
End With
Selection.Copy
Documents(MonDocument).Activate
Selection.Paste
Selection.TypeParagraph
Documents("source.doc").Activate
End If

next i

Voilà, c'est comme ça que je ferais.
@+, et bonne prog.
3
nebut Messages postés 49 Date d'inscription lundi 30 juin 2003 Statut Membre Dernière intervention 27 avril 2005
11 août 2004 à 12:33
En voyant ton code, une idée m'est venue même si je pense qu'il y a beaucoup mieux au niveau de la lisibilité du programme mais bon je pense que ça devrait résoudre ton problème de devoir ajouter un paragraphe:

1) tu places ton code dans une sub:


sub test (i as integer)

If CheckBox & i.Value Then
Documents("source.doc").Activate
Selection.HomeKey Unit:=wdStory
With Selection.Find
.ClearFormatting
.Text = "<§1>"
.MatchWildcards = 0
.Forward = 1
.Replacement.Text = ""
.Replacement.ClearFormatting
.Execute ' recherche du mot1
Selection.MoveRight 'déplacement a droite du mot
.Text = "</§1>"
Selection.Extend ' etendre la selection
.Execute ' atteindre le mot2
Selection.MoveLeft Unit:=wdCharacter, Count:=Len("</§1>"), Extend:=1
' reculer du mot 2
End With
Selection.Copy
Documents(MonDocument).Activate
Selection.Paste
Selection.TypeParagraph
Documents("source.doc").Activate
End If
end sub


Après tu fais une boucle toute conne du style:

for i=1 to nb_checkbox
call test(i)
next


enfin il faut que tu déclares une variable nb_checkbox qui contient le nombre total de checkbox.
soit tu renseignes toi-même ce nombre
soit tu le calcules.(par contre la je ne sais pas comment faire!!!)

si tu trouves mon idée pourrie ou que ca ne marche pas (c'est possible car je n'ai pas VB sur mon pc actuel),
une autre solution serait peut-être d'utiliser un for each

maintenant à toi de voir ce que tu veux faire

j'éspère t'avoir aidé
bonne prog

nebut le miagiste
3
Scalpweb Messages postés 1467 Date d'inscription samedi 13 mars 2004 Statut Membre Dernière intervention 5 mai 2010 4
11 août 2004 à 12:36
Mais non, ITALIA et nebut, vous faites la même erreure ! Il faut faire :

.Text = "<§" & i & ">"

Sinon, on prend tjrs le même paragrphe....
3
Scalpweb Messages postés 1467 Date d'inscription samedi 13 mars 2004 Statut Membre Dernière intervention 5 mai 2010 4
11 août 2004 à 12:26
Je pense avoir une solution... Attend 3 secondes ;-)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_ITALIA Messages postés 2169 Date d'inscription vendredi 20 avril 2001 Statut Membre Dernière intervention 30 juin 2009 9
11 août 2004 à 12:30
Deja si tu as pas mal de CheckBox tu pourrais faire un groupe de controle....

CheckBox1(0)
CheckBox1(1)
CheckBox1(2)
CheckBox1(3)
CheckBox1(4)
.......
....
ce qui reduira la taille de ton code
Meme nom de controle CheckBox1 mais pas le meme Index

Dim MonDocument As String
MonDocument = Documents.Add
DocTravail.Value = MonDocument

For i=0 to 5
If CheckBox1(i).Value Then
Documents("source.doc").Activate
Selection.HomeKey Unit:=wdStory
With Selection.Find
.ClearFormatting
.Text = "<§1>"
.MatchWildcards = 0
.Forward = 1
.Replacement.Text = ""
.Replacement.ClearFormatting
.Execute ' recherche du mot1
Selection.MoveRight 'déplacement a droite du mot
.Text = "</§1>"
Selection.Extend ' etendre la selection
.Execute ' atteindre le mot2
Selection.MoveLeft Unit:=wdCharacter, Count:=Len("</§1>"), Extend:=1
' reculer du mot 2
End With
Selection.Copy
Documents(MonDocument).Activate
Selection.Paste
Selection.TypeParagraph
Documents("source.doc").Activate
End If
Next

It@li@
0
Scalpweb Messages postés 1467 Date d'inscription samedi 13 mars 2004 Statut Membre Dernière intervention 5 mai 2010 4
11 août 2004 à 12:32
Ok ITALIA, on se complète... Dsl, mais le serveur est un peu lent, et ta réponse n'était pas marquée. Donc en fait, on a eue la même idée, sauf que j'utilise le checkBox.count qui te permet d'avoir un nombre de paragraphe illimtée.

Voilà, @+
0
cs_ITALIA Messages postés 2169 Date d'inscription vendredi 20 avril 2001 Statut Membre Dernière intervention 30 juin 2009 9
11 août 2004 à 12:34
en modifiant aussi les lignes :

"<§2>"

It@li@
0
cs_ITALIA Messages postés 2169 Date d'inscription vendredi 20 avril 2001 Statut Membre Dernière intervention 30 juin 2009 9
11 août 2004 à 13:05
c'est que j'ai ecrit à 12:34:48 !!!!!!!

je l'avait vu

It@li@
0
Esprit44 Messages postés 27 Date d'inscription mercredi 21 juillet 2004 Statut Membre Dernière intervention 12 mai 2005
11 août 2004 à 14:15
Merci a tous. Toutes les reponses aurait pu etre validées mais celle de scalpweb me convenait le mieux. Apres qq amenagements ce code fonctionne tres bien et me libere de nombreuses lignes!!!!

Merci a tous pour cette participation

ChRiS
0
Scalpweb Messages postés 1467 Date d'inscription samedi 13 mars 2004 Statut Membre Dernière intervention 5 mai 2010 4
11 août 2004 à 15:35
De rien @+.
Dsl ITALIA, je n'avait pas vue ce que tu avais écris.
0
Rejoignez-nous