Esprit44
Messages postés27Date d'inscriptionmercredi 21 juillet 2004StatutMembreDernière intervention12 mai 2005
-
11 août 2004 à 10:05
Scalpweb
Messages postés1467Date d'inscriptionsamedi 13 mars 2004StatutMembreDerniè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
Scalpweb
Messages postés1467Date d'inscriptionsamedi 13 mars 2004StatutMembreDernière intervention 5 mai 20104 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.
nebut
Messages postés49Date d'inscriptionlundi 30 juin 2003StatutMembreDernière intervention27 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
cs_ITALIA
Messages postés2169Date d'inscriptionvendredi 20 avril 2001StatutMembreDernière intervention30 juin 20099 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
Scalpweb
Messages postés1467Date d'inscriptionsamedi 13 mars 2004StatutMembreDernière intervention 5 mai 20104 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.
Esprit44
Messages postés27Date d'inscriptionmercredi 21 juillet 2004StatutMembreDernière intervention12 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!!!!