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

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

@+
Afficher la suite 

17 réponses

Répondre au sujet
cs_Jack 14010 Messages postés samedi 29 décembre 2001Date d'inscription 28 août 2015 Dernière intervention - 13 avril 2009 à 13:27
+3
Utile
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
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de cs_Jack
us_30 2117 Messages postés lundi 11 avril 2005Date d'inscription 14 mars 2016 Dernière intervention - 12 avril 2009 à 23:31
0
Utile
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.
Commenter la réponse de us_30
cs_Jack 14010 Messages postés samedi 29 décembre 2001Date d'inscription 28 août 2015 Dernière intervention - 13 avril 2009 à 05:01
0
Utile
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)
Commenter la réponse de cs_Jack
cs_Jack 14010 Messages postés samedi 29 décembre 2001Date d'inscription 28 août 2015 Dernière intervention - 13 avril 2009 à 05:03
0
Utile
PS : ... un Replace dans ta var_nom avant de faire le Find
Commenter la réponse de cs_Jack
revlam 13 Messages postés mardi 10 juin 2003Date d'inscription 13 avril 2009 Dernière intervention - 13 avril 2009 à 10:16
0
Utile
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 :)
Commenter la réponse de revlam
revlam 13 Messages postés mardi 10 juin 2003Date d'inscription 13 avril 2009 Dernière intervention - 13 avril 2009 à 13:31
0
Utile
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
Commenter la réponse de revlam
us_30 2117 Messages postés lundi 11 avril 2005Date d'inscription 14 mars 2016 Dernière intervention - 13 avril 2009 à 14:01
0
Utile
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.
Commenter la réponse de us_30
revlam 13 Messages postés mardi 10 juin 2003Date d'inscription 13 avril 2009 Dernière intervention - 13 avril 2009 à 16:50
0
Utile
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
Commenter la réponse de revlam
revlam 13 Messages postés mardi 10 juin 2003Date d'inscription 13 avril 2009 Dernière intervention - 13 avril 2009 à 16:55
0
Utile
Par contre je vais tester la solution de Jack de ce pas :)

Revlam
Commenter la réponse de revlam
revlam 13 Messages postés mardi 10 juin 2003Date d'inscription 13 avril 2009 Dernière intervention - 13 avril 2009 à 17:03
0
Utile
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
Commenter la réponse de revlam
revlam 13 Messages postés mardi 10 juin 2003Date d'inscription 13 avril 2009 Dernière intervention - 13 avril 2009 à 17:09
0
Utile
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
Commenter la réponse de revlam
us_30 2117 Messages postés lundi 11 avril 2005Date d'inscription 14 mars 2016 Dernière intervention - 13 avril 2009 à 17:48
0
Utile
Mouais... à posteriori, ça marche... donc.

Pas grave... bonne prog.

Amicalement,
Us.
Commenter la réponse de us_30
revlam 13 Messages postés mardi 10 juin 2003Date d'inscription 13 avril 2009 Dernière intervention - 13 avril 2009 à 17:51
0
Utile
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
Commenter la réponse de revlam
us_30 2117 Messages postés lundi 11 avril 2005Date d'inscription 14 mars 2016 Dernière intervention - 13 avril 2009 à 18:25
0
Utile
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.
Commenter la réponse de us_30
revlam 13 Messages postés mardi 10 juin 2003Date d'inscription 13 avril 2009 Dernière intervention - 13 avril 2009 à 18:28
0
Utile
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
Commenter la réponse de revlam
us_30 2117 Messages postés lundi 11 avril 2005Date d'inscription 14 mars 2016 Dernière intervention - 13 avril 2009 à 18:42
0
Utile
Rendez-vous dans 2 jours pour la réponse du support VB.NET...

ciao,
Us.
Commenter la réponse de us_30
azerty01qwerty02 2 Messages postés samedi 27 mars 2004Date d'inscription 2 juillet 2009 Dernière intervention - 2 juil. 2009 à 02:26
0
Utile
bsr
s'il vous plais revlam peut tu partager votre code .
Merci
Commenter la réponse de azerty01qwerty02

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.