Problème de retour chariot dans VB.NET / WORD

Résolu
revlam Messages postés 13 Date d'inscription mardi 10 juin 2003 Statut Membre Dernière intervention 13 avril 2009 - 12 avril 2009 à 20:00
azerty01qwerty02 Messages postés 2 Date d'inscription samedi 27 mars 2004 Statut Membre Derniè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 :

var_nom = "Dupond"
oWDoc.Application.ActiveDocument.Content.Find.Execute(FindText:="@NOM", ReplaceWith:=var_nom, replace:=Word.WdReplace.wdReplaceAll)

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

@+

17 réponses

cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
13 avril 2009 à 13:27
Et tu as essayé de simplement remplacer 
   ReplaceWith:=var_nom,
par 
   ReplaceWith:= Replace(var_nom, vbCrLf, "^l"), ...

vbCrLf parce que je suppose que c'est ta variable renferme
3
us_30 Messages postés 2065 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 14 mars 2016 10
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)

à voir...

Amicalement,
Us.
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
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)
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
13 avril 2009 à 05:03
PS : ... un Replace dans ta var_nom avant de faire le Find
0

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

Posez votre question
revlam Messages postés 13 Date d'inscription mardi 10 juin 2003 Statut Membre Dernière intervention 13 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 :)
0
revlam Messages postés 13 Date d'inscription mardi 10 juin 2003 Statut Membre Dernière intervention 13 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 !!! :)

Merci de ton aide !

Revlam
0
us_30 Messages postés 2065 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 14 mars 2016 10
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.

Amicalement,
Us.
0
revlam Messages postés 13 Date d'inscription mardi 10 juin 2003 Statut Membre Dernière intervention 13 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
0
revlam Messages postés 13 Date d'inscription mardi 10 juin 2003 Statut Membre Dernière intervention 13 avril 2009
13 avril 2009 à 16:55
Par contre je vais tester la solution de Jack de ce pas :)

Revlam
0
revlam Messages postés 13 Date d'inscription mardi 10 juin 2003 Statut Membre Dernière intervention 13 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 :)

http://revlam.free.fr/testretourchariot.zip

 PS : pour tester le projet, il faut placer le fichier test.doc à la racine !

Merci à jack

Revlam
0
revlam Messages postés 13 Date d'inscription mardi 10 juin 2003 Statut Membre Dernière intervention 13 avril 2009
13 avril 2009 à 17:09
Roh je comprend pas, il y a un truc qui m'échappe, sur ce p'tit projet ça fonctionne avec le vbcrlf mais dans mon projet, ça ne fonctionne pas !!

Revlam
0
us_30 Messages postés 2065 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 14 mars 2016 10
13 avril 2009 à 17:48
Mouais... à posteriori, ça marche... donc.

Pas grave... bonne prog.

Amicalement,
Us.
0
revlam Messages postés 13 Date d'inscription mardi 10 juin 2003 Statut Membre Dernière intervention 13 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 :)

Amicalement

Revlam
0
us_30 Messages postés 2065 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 14 mars 2016 10
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.

Amicalement,
Us.
0
revlam Messages postés 13 Date d'inscription mardi 10 juin 2003 Statut Membre Dernière intervention 13 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 !

Revlam
0
us_30 Messages postés 2065 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 14 mars 2016 10
13 avril 2009 à 18:42
Rendez-vous dans 2 jours pour la réponse du support VB.NET...

ciao,
Us.
0
azerty01qwerty02 Messages postés 2 Date d'inscription samedi 27 mars 2004 Statut Membre Dernière intervention 2 juillet 2009
2 juil. 2009 à 02:26
bsr
s'il vous plais revlam peut tu partager votre code .
Merci
0
Rejoignez-nous