Creer un doc a partir de VB.net : options setup et position [Résolu]

cs_PeD 63 Messages postés vendredi 25 janvier 2002Date d'inscription 13 avril 2013 Dernière intervention - 8 juil. 2011 à 19:57 - Dernière réponse : cs_PeD 63 Messages postés vendredi 25 janvier 2002Date d'inscription 13 avril 2013 Dernière intervention
- 9 juil. 2011 à 09:20
( je suis un peu perdu dans le fatras de code sur ce sujet , et ne parviens pas à comprendre la logique, le mécanisme. Beaucoup sur google et autres, mais pas clair pour moi - ma faute sans doute ).

Question 1 :
comment faire les choix de font size, fontname, marges, etc, ET L'APPLIQUER A TOUT LE DOC.

Mon code ( brouillon ) et j'explique
Dim objword As Word.Application
Dim docword As Word.Document
Dim opara1 As Word.Paragraph
objword = CreateObject("word.application") 
docword = objword.Documents.Add

With docword
.PageSetup.PaperSize = Word.WdPaperSize.wdPaperA4
.PageSetup.Orientation = Word.WdOrientation.wdOrientLandscape
.PageSetup.LeftMargin = 60
.PageSetup.RightMargin = 50
.PageSetup.TopMargin = 50
.PageSetup.BottomMargin = 50
End With

opara1 = docword.Content.Paragraphs.Add
opara1.Range.Font.Size = 9
opara1.Range.Font.Name = "courier new"
opara1.Range.Font.Bold = False
opara1.Range.Text = "123456789012345678901234567890123456789012345678901234567890" & _
"123456789012345678901234567890123456789012345678901234567890123456789012"
opara1.Format.SpaceAfter = 1
opara1.Range.InsertParagraphAfter()
opara1 = docword.Content.Paragraphs.Add
opara1.Range.Text = "------------------------------------------------------------" & _
"------------------------------------------------------------------------"
opara1.Format.SpaceAfter = 2
opara1.Range.InsertParagraphAfter()
opara1.Range.Text = "un texte range start 72"
opara1.Format.SpaceAfter = 2
opara1.Range.InsertParagraphAfter()
docword.SaveAs(FileName:="c:\mondocu.doc")
docword.Close()
docword = Nothing
objword = Nothing


- ma ligne avec 123456789123... etc a le bon format "courier new size = 9.

Je m'attends à ce que la ligne suivante avec les traits en soulignement ---- conserve le même format. Et bien non : il passe en font12, Times new Roman ???
Pourquoi? je n'ai rien changer entre les deux lignes.
N'y a til pas moyen d'appliquer les choix sur tous le document?

Question 2 : je ne comprends vraiment pas le code avec Range.
Par exemple je code cedi sans comprendre :

"opara1 = docword.Content.Paragraphs.Add"

Ni les sections, ni les signets?
Y a t il un endroit où trouver une bonne explication à ces éléments du langage?

Où toutes les options sont clairement définies.

Et un bon exemple complet d'une programmation d'une creation de doc word via VB.Net

Merci de me guider.

Pierre
Afficher la suite 

Votre réponse

14 réponses

Meilleure réponse
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 8 juil. 2011 à 21:13
3
Merci
Bonjour,
Rien d'étonnant !
tu ajoutes par ton code
opara1 =  docword.Content.Paragraphs.Add

un paragraphe pour lequel ( LUI SEUL ) tu définis des propriétés de texte
puis tu passes à UN AUTRE paragraphe : ton second :
opara1  = docword.Content.Paragraphs.Add

qui, LUI, ne subit pas les propriétés du premier !
____________________
Utiliser le bouton "REPONSE ACCEPTEE" sur une réponse exacte facilite les recherches ultérieures d'autres forumeurs. PENSEZ-Y SVP

Merci ucfoutu 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 73 internautes ce mois-ci

Commenter la réponse de ucfoutu
Meilleure réponse
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 8 juil. 2011 à 22:41
3
Merci
Oui, mais que crois-tu donc que fait aussi :
opara1.Range.InsertParagraphAfter()

?
A mon avis : Ce qu'en dit MSDN



____________________
Utiliser le bouton "REPONSE ACCEPTEE" sur une réponse exacte facilite les recherches ultérieures d'autres forumeurs. PENSEZ-Y SVP

Merci ucfoutu 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 73 internautes ce mois-ci

Commenter la réponse de ucfoutu
Meilleure réponse
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 8 juil. 2011 à 23:13
3
Merci
alors en sortie sur la ligne du document je n'ai plus que la dernière ligne soulignée et non plus la ligne avec les 1234567.... ligne qui a été écrasée !!!!

Tu m'en diras tant ! C'est ton code, qui l'écrase, puisque tu redéfinis la valeur du texte (et la dernière valeur est donc la seule gardée) !


____________________
Utiliser le bouton "REPONSE ACCEPTEE" sur une réponse exacte facilite les recherches ultérieures d'autres forumeurs. PENSEZ-Y SVP

Merci ucfoutu 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 73 internautes ce mois-ci

Commenter la réponse de ucfoutu
Meilleure réponse
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 8 juil. 2011 à 23:40
3
Merci
regarde mon dernier message et attarde-toi sur vbLF (la constante vbLF)
Si pas vbLF, essaye VbNewLine

____________________
Utiliser le bouton "REPONSE ACCEPTEE" sur une réponse exacte facilite les recherches ultérieures d'autres forumeurs. PENSEZ-Y SVP

Merci ucfoutu 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 73 internautes ce mois-ci

Commenter la réponse de ucfoutu
cs_PeD 63 Messages postés vendredi 25 janvier 2002Date d'inscription 13 avril 2013 Dernière intervention - 8 juil. 2011 à 22:30
0
Merci
OK mais si je fais
opara1 = docword.Content.Paragraphs.Add
opara1.Range.Font.Size = 9
opara1.Range.Font.Name = "courier new"
opara1.Range.Font.Bold = False
opara1.Range.Text = "123456789012345678901234567890123456789012345678901234567890" & _
"123456789012345678901234567890123456789012345678901234567890123456789012"
opara1.Format.SpaceAfter = 1
opara1.Range.InsertParagraphAfter()
'opara1 docword.Content.Paragraphs.Addopara1.Range.Text "------------------------------------------------------------" & _
"------------------------------------------------------------------------"
opara1.Format.SpaceAfter = 2
opara1.Range.InsertParagraphAfter()


que je mets donc en commentaire mon Add paragrahs, celui juste avant le text "----"
Même effet.
Je le jure.

Encore quelque chose qui m'échappe !!
Vendredi soir?? Peu-être !!
Retour à une question aussi : existe t il de la documentation sur ces paramètres?


Merci

Pierre
Commenter la réponse de cs_PeD
cs_PeD 63 Messages postés vendredi 25 janvier 2002Date d'inscription 13 avril 2013 Dernière intervention - 8 juil. 2011 à 22:57
0
Merci
Complètement perdu.
Si je supprime cette ligne, et même si je retiends la ligneopara1.Format.SpaceAfter = 1
opara1.Format.SpaceAfter = 1

pour executer ceci
opara1 = docword.Content.Paragraphs.Add
opara1.Range.Font.Size = 9
opara1.Range.Font.Name = "courier new"
opara1.Range.Font.Bold = False
opara1.Range.Text = "123456789012345678901234567890123456789012345678901234567890" & _
"123456789012345678901234567890123456789012345678901234567890123456789012"
opara1.Format.SpaceAfter = 1
opara1.Range.Text = "------------------------------------------------------------" & _
"------------------------------------------------------------------------


alors en sortie sur la ligne du document je n'ai plus que la dernière ligne soulignée et non plus la ligne avec les 1234567.... ligne qui a été écrasée !!!!
Comme si "opara1.Format.SpaceAfter = 1" spaceafter de 1 ne fonctionne pas !!

Cela veut dire que je dois définir un nouveau range à chaque ligne !!!! et remettre chaque fois les attributs ????

et puis la doc que tu renseignes semble dire qu'il y a une expansion des attributs?? Ou je me trompe?


Bon je vais lire la référence que tu donnes et remonter un peu dans les principes.
Mais je ne comprends pas la mécanique... pas encore.

Merci

Pierre
Commenter la réponse de cs_PeD
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 8 juil. 2011 à 23:09
0
Merci
et puis la doc que tu renseignes semble dire qu'il y a une expansion des attributs?? Ou je me trompe?


Ben ...

After this method is applied, the range expands to include the new paragraph.


Ne se traduit pas comme tu l'interprètes, mais par ainsi :
"Une fois cette méthode appliquée, la plage est étendue et inclut le nouveau paragraphe"
Ce n'est pas parce que la plage inclut le nouveau paragraphe, que tu n'as pas un paragraphe (nouveau) distinct !
____________________
Utiliser le bouton "REPONSE ACCEPTEE" sur une réponse exacte facilite les recherches ultérieures d'autres forumeurs. PENSEZ-Y SVP
Commenter la réponse de ucfoutu
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 8 juil. 2011 à 23:33
0
Merci
ce devrait être du genre (je n'ai pas Word sous la main ===>> à vérifier donc) !
opara1.Range.Text = "123456789012345678901234567890123456789012345678901234567890" & _
"123456789012345678901234567890123456789012345678901234567890123456789012"

opara1.Range.Text = opara1.Range.Text & vbLF & "------------------------------------------------------------" & _
"------------------------------------------------------------------------"


vbLF devrait de mémoire être la constante VB de Word pour le passage )à la ligne.
____________________
Utiliser le bouton "REPONSE ACCEPTEE" sur une réponse exacte facilite les recherches ultérieures d'autres forumeurs. PENSEZ-Y SVP
Commenter la réponse de ucfoutu
cs_PeD 63 Messages postés vendredi 25 janvier 2002Date d'inscription 13 avril 2013 Dernière intervention - 8 juil. 2011 à 23:37
0
Merci
D'accord, mais alors quelle est l'instruction qui "dépose" le texte sur la ligne du document !!
pour que je puisse pas à une autre ligne.

pseudo code
line = "line1"
write line on current line of doc
skip 1 line
line = "line2"
write line on current line of doc
skip 1 line
.....

Je sais "j'étonne" mais je viens de langages comme le Cobol, le PL/I ou l'assembleur... j'ai donc à apprendre de la programmation par événements. Désolé.


Pierre
Commenter la réponse de cs_PeD
cs_PeD 63 Messages postés vendredi 25 janvier 2002Date d'inscription 13 avril 2013 Dernière intervention - 8 juil. 2011 à 23:50
0
Merci
( J'ai envoyé ma réponse avant de recevoir ton dernier message )

Oui vbLF ( line Feed ... (carriage return ))
est bon.

Ta solution
opara1.Range.Text = "123456789012345678901234567890123456789012345678901234567890" & _
"123456789012345678901234567890123456789012345678901234567890123456789012"

opara1.Range.Text = opara1.Range.Text & vbLF & "------------------------------------------------------------" & _
"------------------------------------------------------------------------


est bonne aussi.
Mais est elle applicable à un document de, mettons, 500 lignes.
Cela m'obligerait à accoler 500 chaines de valeur reliées par des & et vbLF.
Cela est il supportable par VB et dans la gestion de mon programme?

Disons que cela me paraissait si simple de définir le range sur tout le document, au départ et éventuellement juqu'à la prochaine modification ( un peu comme en HTML )
D'annoncer les attributs de fontsize, fontname, etc tant qu'on n'en a pas des
autres.

Sans doute un raison cachée, mais cela paraît bizarre à première vue.

Y a t il beaucoup de gens qui crée du Word en VB comme moi? ou y a t il d'autres façons de le faire?



Pierre
Commenter la réponse de cs_PeD
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 9 juil. 2011 à 07:08
0
Merci
Disons que cela me paraissait si simple de définir le range sur tout le document, au départ et éventuellement juqu'à la prochaine modification ( un peu comme en HTML )
D'annoncer les attributs de fontsize, fontname, etc tant qu'on n'en a pas des
autres.

Mais bien évidemment !
Mais c'est toi, qui a deécidé de limiter la mise en forme à UN paragraphe (ton objet opara1) par tes lignes :
opara1.Range.Font.Size = 9
opara1.Range.Font.Name = "courier new"
opara1.Range.Font.Bold = False

Alors que tu peut définir cette mise en forme dès le départ pour la totalité du document.
Je me suis même dit que tu devais avoir tes raisons de formater différemment chaque paragraphe et ai respecté scrupuleusement cette volonté apparente

____________________
Utiliser le bouton "REPONSE ACCEPTEE" sur une réponse exacte facilite les recherches ultérieures d'autres forumeurs. PENSEZ-Y SVP
Commenter la réponse de ucfoutu
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 9 juil. 2011 à 07:32
0
Merci
Je pense en fait que tes difficultés résultent principalement d'une connaissance insuffisante de Word. Pour piloter convenablement un logiciel, il est évident qu'il faut bien le connaître.
Je te suggère de commencer au moins par ce Genre de lecture qui, bien que non destinée à remplacer l'apprentissage de VBA/Word (ce n'est jamais qu'un exemple assez réduit de pilotage), te mettra sur une voie plus éclairée. Tu y trouveras de surcroît la réponse à ton problème.


____________________
Utiliser le bouton "REPONSE ACCEPTEE" sur une réponse exacte facilite les recherches ultérieures d'autres forumeurs. PENSEZ-Y SVP
Commenter la réponse de ucfoutu
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 9 juil. 2011 à 07:49
0
Merci
Je te suggère également de t'intéresser de près à la méthode InsertAfter de VBA/Word.
Tu trouveras ICI l'exposé qu'en fait MSDN, de manière assez claire et complète.


____________________
Utiliser le bouton "REPONSE ACCEPTEE" sur une réponse exacte facilite les recherches ultérieures d'autres forumeurs. PENSEZ-Y SVP
Commenter la réponse de ucfoutu
cs_PeD 63 Messages postés vendredi 25 janvier 2002Date d'inscription 13 avril 2013 Dernière intervention - 9 juil. 2011 à 09:20
0
Merci
Mais c'est toi, qui a deécidé de limiter la mise en forme à UN paragraphe (ton objet opara1) par tes lignes 

J'y avais pensé ( pas encore tout à fait nul ) et c'est pour cela que j'ai tenté quelque chose comme
Dim opara1 as Word.Document
à la place de Word.Paragraph. Mais je n'ai pas réussi à initialiser cet élément avec "opara1 = docword.Content. ????" puis rien à disposition.
Donc je ne sais pas comment étendre opara1 à tout le document.

Mais évidemment que je veux apprendre et comprendre.
Donc je plonge dans la documentation que tu donnes.
Je voulais avoir quelques pistes et ces références.
Je reviendrai ici lorque j'aurai résolu ce problème.

Grand merci.
Bon week-end

Pierre
Commenter la réponse de cs_PeD

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.