revlam
Messages postés13Date d'inscriptionmardi 10 juin 2003StatutMembreDernière intervention13 avril 2009
-
12 avril 2009 à 20:00
azerty01qwerty02
Messages postés2Date d'inscriptionsamedi 27 mars 2004StatutMembreDernière intervention 2 juillet 2009
-
2 juil. 2009 à 02:26
Bonjour à tous,
J'espère que ej suis dans la bonne section...
Alors je me retrouve face à un problème assez embêtant... J'ai donc un appli VB.NET qui me sert en autre à communiquer avec WORD. J'utilise pour cela une fonction qui recherche un chaine de caractère (exemple : @NOM) et la remplace par la valeur d'une TextBox de mon appli. Voici le code qui fait cela :
Mon problème c'est que dans le cas ou var_nom possède un retour chariot et bien il n'est pas reporter après sur Word. J'ai essayé de passer le Chr(13), le chr(10) & chr(13) ou encore le vbcrlf
Rien n'y fait... Il y a t'il une technique particulière avec Word qui m'a échappée ou dois-je changer ma méthode de fonctionnement. Je précise au passage que je la trouve plus simple que celle avec les signets et plus rapide
us_30
Messages postés2065Date d'inscriptionlundi 11 avril 2005StatutMembreDernière intervention14 mars 201610 12 avril 2009 à 23:31
Bonsoir,
Je ne peux pas tester sans le code complet (qui m'intéresse par ailleurs), mais sous WORD, le saut de ligne peut être effectué par la constante VBA VbCrLf, comme tu l'indique. Mais... l'équivalent sous VB.NET serait plutôt : System.Environment.NewLine ou System.Convert.ToChar(13)
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 13 avril 2009 à 05:01
Salut
Sous Word, quand tu veux remplacer à la main un texte par un autre texte comportant un retour à la ligne, il faut utiliser les fonctions spéciales proposées.
J'ai enregistré manuellement cette macro :
Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
With Selection.Find
.Text = "@NOM"
.Replacement.Text = "toto^lkiki"
(...)
End With
Selection.Find.Execute
Tu remarqueras que les retours à la ligne sont symbolisés par un ^l (L minuscule, comme line)
Il te suffit peut-être de faire un Replace de ton saut de page classique vbCr par ce ^l pour que cela fonctionne.
Vala
Jack, MVP VB NB : Je ne répondrai pas aux messages privés
<hr />Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
revlam
Messages postés13Date d'inscriptionmardi 10 juin 2003StatutMembreDernière intervention13 avril 2009 13 avril 2009 à 10:16
Salut à tous,
Merci de vos réponses !
us_30> A priori ça ne fonctionne pas...
Jack> Pas bête le coup de la macro je n'y avait pas pensé... Mais j'ai l'impression que la fonction Word que j'utilise n'accepte tout simplement pas les retour chariot :( J'ai un peu la flemme de tout recoder pour cette histoire de fonction (c'est un gros projet avec pres de 30 forms). Donc j'ai opter pour la solution du bridage, on ne peut pas ajouter plus 6 entités. En fait cette partie générait les prestations à mettre dans la facture. J'ai décidé de les limiter à 6 pour deux raisons :
- par faineantise :)
- d'un point de vue de la presentation du document, j'y avait pas pensé, mais une fois que je dépasse 6, ca créé une nouvelle page, pas top pour une facture !
Donc en fait j'ai créé plusieurs variables. Au lieu d'avoir seulement mon @PRESTA (avec retour chariot) j'ai @PRESTA1, @PRESTA2, @PRESTA3, etc.
Encore merci de votre soutien ! Je peux partager mon codes aux interessés :)
revlam
Messages postés13Date d'inscriptionmardi 10 juin 2003StatutMembreDernière intervention13 avril 2009 13 avril 2009 à 13:31
Ah non je n'ai pas essayé ca ! Je vais essayé ca ce soir, je te tiens au jus :) Même si ce n'est plus d'actualité, c'est une fonction très pratique et la possibilité de l'utiliser avec des retour chariot serait divin !!! :)
us_30
Messages postés2065Date d'inscriptionlundi 11 avril 2005StatutMembreDernière intervention14 mars 201610 13 avril 2009 à 14:01
A priori... j'aime pôs les "à priori"...
Normalement, si VB.NET est en compatible VB6, VbCrLf doit fonctionner... J'en ai la quasi-certitude... Il faut évidemment passer la variable ainsi :
var_nom = "Dupond" & vbcrlf & "Durand"
D'après ces derniers échanges, je me demande si c'est bien ainsi que cela a été testé...
La solution de Jack, doit aussi fonctionner. En réalité les deux ont le même effet dans le VBA... Ensuite le "pilotage" à partir de VB.NET n'a pas lieu de faire autrement.
revlam
Messages postés13Date d'inscriptionmardi 10 juin 2003StatutMembreDernière intervention13 avril 2009 13 avril 2009 à 16:50
J'ai la certitude que ça ne fonctionne pas :)
Ça fonctionne sous VBA mais pas sous VB.net ! Et puis j'avais testé ça avant de poster, en relisant mon sujet tu pourra t'en rendre compte :) J'ai la confirmation du support VB.net, la fonction remplacer ne prend pas en charge le retour chariot !
revlam
Messages postés13Date d'inscriptionmardi 10 juin 2003StatutMembreDernière intervention13 avril 2009 13 avril 2009 à 17:03
Bon ca fonctionne en remplacant le vbcrlf par le "^l" mais le vbcrlf ne passe pas :)
Merci à jack pour cette solution qui me servira plus tard dans mon projet! Je vous joint les sources de mon test, vous allez voir c'est tout con comme fonction et maintenant que j'ai capté comment ça fonctionne avec les retours chariots, je vais l'intégrer dans ma classe word :)
revlam
Messages postés13Date d'inscriptionmardi 10 juin 2003StatutMembreDernière intervention13 avril 2009 13 avril 2009 à 17:51
us_30, sache juste que j'aime pas trop ton ton septique, pour ton information, j'ai 10 ans de VB derrière moi et que je n'aurai pas poser cette question sans avoir essayer auparavant, si tu veux passer voir mon code y a pas de problème mais j'ai refait le test, ça ne passe pas. Etant user pro de VB.Net j'ai soumi le problème au support VB.NET qui devrait me répondre sous 2 jours, je vous soumettrais la réponse ici :)
us_30
Messages postés2065Date d'inscriptionlundi 11 avril 2005StatutMembreDernière intervention14 mars 201610 13 avril 2009 à 18:25
Pas plus fosse, que septique... JE viens de reprendre ton programme de test... et tout fonctionne parfaitement avec Vbcrlf ou mes autres propositions.... Même en utilisant temp=me.textbox1.text et en écrivant dans la textbox1 des sauts de ligne, on obtient sur Word les sauts escomptés... Sache aussi que je me suis conforté à ce genre de problème de "communication" entre applications d'Office... et tu peux aussi te rendre compte, que j'avais donc pas complétement tord en te conseillant.
Ensuite, même dans le cas contraire, si j'ai pris la peine de te répondre, c'est qu'il m'a semblé pouvoir t'aider un peu en apportant au moins une piste de réponse... Normalement c'est louable, nan ? ... Mais si du haut de tes 10 ans de pratique, seuls les Admis sont légitimes... chacun jugera.
revlam
Messages postés13Date d'inscriptionmardi 10 juin 2003StatutMembreDernière intervention13 avril 2009 13 avril 2009 à 18:28
J'ai jamais dit que tu avais tord mon cher amis mais je maintient que ça ne fonctionne pas dans mon programme :) Je sais pas ce qui interfère mais il y a quelque chose qui interfère ! Et puis je suis d'accord que tu voulais m'apporter une réponse, que c'est louable, mais sans te jeter la pierre, ce que tu m'as proposé avait déjà été testé avant et stipuler dans mon topic d'introduction !
Aller merci de m'avoir filer un coup de main malgré tout !