Problème de retour chariot dans VB.NET / WORD [Résolu]

Signaler
Messages postés
13
Date d'inscription
mardi 10 juin 2003
Statut
Membre
Dernière intervention
13 avril 2009
-
Messages postés
2
Date d'inscription
samedi 27 mars 2004
Statut
Membre
Dernière intervention
2 juillet 2009
-
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

Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
73
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
Messages postés
2065
Date d'inscription
lundi 11 avril 2005
Statut
Membre
Dernière intervention
14 mars 2016
8
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.
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
73
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)
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
73
PS : ... un Replace dans ta var_nom avant de faire le Find
Messages postés
13
Date d'inscription
mardi 10 juin 2003
Statut
Membre
Dernière intervention
13 avril 2009

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

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
Messages postés
2065
Date d'inscription
lundi 11 avril 2005
Statut
Membre
Dernière intervention
14 mars 2016
8
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.
Messages postés
13
Date d'inscription
mardi 10 juin 2003
Statut
Membre
Dernière intervention
13 avril 2009

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és
13
Date d'inscription
mardi 10 juin 2003
Statut
Membre
Dernière intervention
13 avril 2009

Par contre je vais tester la solution de Jack de ce pas :)

Revlam
Messages postés
13
Date d'inscription
mardi 10 juin 2003
Statut
Membre
Dernière intervention
13 avril 2009

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
Messages postés
13
Date d'inscription
mardi 10 juin 2003
Statut
Membre
Dernière intervention
13 avril 2009

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
Messages postés
2065
Date d'inscription
lundi 11 avril 2005
Statut
Membre
Dernière intervention
14 mars 2016
8
Mouais... à posteriori, ça marche... donc.

Pas grave... bonne prog.

Amicalement,
Us.
Messages postés
13
Date d'inscription
mardi 10 juin 2003
Statut
Membre
Dernière intervention
13 avril 2009

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
Messages postés
2065
Date d'inscription
lundi 11 avril 2005
Statut
Membre
Dernière intervention
14 mars 2016
8
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.
Messages postés
13
Date d'inscription
mardi 10 juin 2003
Statut
Membre
Dernière intervention
13 avril 2009

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
Messages postés
2065
Date d'inscription
lundi 11 avril 2005
Statut
Membre
Dernière intervention
14 mars 2016
8
Rendez-vous dans 2 jours pour la réponse du support VB.NET...

ciao,
Us.
Messages postés
2
Date d'inscription
samedi 27 mars 2004
Statut
Membre
Dernière intervention
2 juillet 2009

bsr
s'il vous plais revlam peut tu partager votre code .
Merci