Remplacement d'un texte dans un document Word par un TextBox

Résolu
spie31 Messages postés 16 Date d'inscription mardi 6 septembre 2011 Statut Membre Dernière intervention 25 novembre 2011 - 6 oct. 2011 à 15:03
spie31 Messages postés 16 Date d'inscription mardi 6 septembre 2011 Statut Membre Dernière intervention 25 novembre 2011 - 7 oct. 2011 à 10:12
Bonjour,

J'ai créé un programme dans lequel les personnes doivent écrire un texte dans une TextBox. Une fois qu'ils appuient sur OK, la macro se lance, recherche dans le document Word le mot spécifique (par exemple : Prog_Textaremplacer) et le remplace par le texte qui a été inséré dans le TextBox.

Voici ce que ça donne :

Selection.Find.ClearFormatting
With Selection.Find
.Text = "Prog_calo_risques_outil_spec"
.Replacement.Text = RISQUESCALOOUTISPEC.TextBoxDESCOUTISPEC.Text
.Forward = True
.Wrap = wdFindContinue
.Format = True
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
Selection.Find.Execute
With Selection
If .Find.Forward = True Then
.Collapse Direction:=wdCollapseStart
Else
.Collapse Direction:=wdCollapseEnd
End If
.Find.Execute Replace:=wdReplaceOne
If .Find.Forward = True Then
.Collapse Direction:=wdCollapseEnd
Else
.Collapse Direction:=wdCollapseStart
End If
.Find.Execute
End With

Le problème c'est que ça marche bien lorsque le texte est "court" mais à partir du moment où il devient un peu long, ça plante et me met le débogage à partir de la ligne qui est soulignées.

Avez-vous une idée du pourquoi ?!!

Merci

12 réponses

ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 223
7 oct. 2011 à 09:49
Bonjour,

La limite de Word pour le texte de remplacement est de 256 caractères.

Il y a un peut-être ce moyen (que je te suggère de mémoire) de contrecarrer cette limite.

A savoir:
1) utiliser replacement pour remplacer par "", puis (donc dans "") ajouter le texte par typetext.

genre, donc :

if len(RISQUESCABLECHALUMEAU.TextBoxPREVCHALUMEAU.Text) > 250 then
            with selection.find
                .clearformatting
                .Text = "Prog_cable_moyens_chalu"
                .Replacement.text = ""
                .Wrap = wdFindcontinue
                .execute
            end with       
            with  selection
                If .Find.found then
                    .TypeText RISQUESCABLECHALUMEAU.TextBoxPREVCHALUMEAU.Text
                end If
            end with
    end If 


A essayer (juste pour voir).


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
3
cs_loulou69 Messages postés 672 Date d'inscription mercredi 22 janvier 2003 Statut Membre Dernière intervention 2 juin 2016 1
6 oct. 2011 à 15:42
bonjour

Pourquoi : à mon avis VBA n'est pas le langage à utiliser si on veut ne pas avoir ce genre de problème. Ce qui m'avait été conseillé par des personnes certifiées : OPEN XML SDK

En effet, Je faisais il y a peu du traitement de texte en VBA et j'utilisais des commandes Selection.Find pour pouvoir apporter des corrections automatiques multiples. Les macros n'ont pu servir qu'en relançant manuellement celles-ci au point d'arrêt de plantage pour continuer le traitement. L'utilisateur devait utiliser les combinaisons de touche Ctrl+Arrêt défilement et F5 pour résoudre ce problème. Ces macros servaient tous les jours.
0
cs_Jack Messages postés 14007 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 78
6 oct. 2011 à 19:03
Salut

Non, je pense que c'est simplement dû à l'absence de " pour encadrer ton nouveau texte. Tant que ton nouveau texte n'est qu'un mot, il doit s'en satisfaire, mais s'il y a un espace dedans, ça doit commencer à poser problème.
Essaye :
.Replacement.Text = """" & _
                    RISQUESCALOOUTISPEC.TextBoxDESCOUTISPEC.Text & _
                    """"

La prochaine fois que tu as besoin de coller du code, merci d'utiliser la coloration syntaxique = 3ème icone à droite qui préservera l'indentation des lignes.

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
0
cs_Jack Messages postés 14007 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 78
6 oct. 2011 à 19:05
désolé : une ligne vide en trop entre la 1 et la 2
0

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

Posez votre question
cs_Jack Messages postés 14007 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 78
6 oct. 2011 à 19:12
PS : S'il passe en débug, c'est qu'il y a une erreur.
Il aurait été bon que tu nous dises laquelle
0
spie31 Messages postés 16 Date d'inscription mardi 6 septembre 2011 Statut Membre Dernière intervention 25 novembre 2011
7 oct. 2011 à 08:59
Merci pour cette réponse. J'ai donc modifié le code :

        Selection.Find.ClearFormatting
    With Selection.Find
        .Text = "Prog_cable_moyens_chalu"
        .Replacement.Text = """" & _
                    RISQUESCABLECHALUMEAU.TextBoxPREVCHALUMEAU.Text & _
                    """"
        .Forward = True
        .Wrap = wdFindContinue
        .Format = True
        .MatchCase = False
        .MatchWholeWord = False
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
    End With
    Selection.Find.Execute
    With Selection
        If .Find.Forward = True Then
            .Collapse Direction:=wdCollapseStart
        Else
            .Collapse Direction:=wdCollapseEnd
        End If
        .Find.Execute Replace:=wdReplaceOne
        If .Find.Forward = True Then
            .Collapse Direction:=wdCollapseEnd
        Else
            .Collapse Direction:=wdCollapseStart
        End If
        .Find.Execute
    End With


Mais le problème reste là : Lorsque j'écris quelques lignes, la modification se fait bien (ton code rajoute en fait des guillemets au texte dans Word) mais lorsque j'écris beaucoup de texte (au dessus d'une centaine de caractères en gros) il y a le même bug qui apparait :

        .Replacement.Text = """" & _
                    RISQUESCABLECHALUMEAU.TextBoxPREVCHALUMEAU.Text & _
                    """"


Je ne comprends pas pourquoi !! Au début je pensais que c'était dû aux caractères spéciaux mais non, j'ai utilisé un texte, j'ai enlevé la fin, ça marche, j'ai enlevé le début, ça marche, j'ai enlevé un peu du début et peu de la fin, ça marche, et quand je le laisse entier, ça bug !!
0
spie31 Messages postés 16 Date d'inscription mardi 6 septembre 2011 Statut Membre Dernière intervention 25 novembre 2011
7 oct. 2011 à 09:00
Pareil pour moi : les lignes vides n'apparaissent pas dans VBA
0
spie31 Messages postés 16 Date d'inscription mardi 6 septembre 2011 Statut Membre Dernière intervention 25 novembre 2011
7 oct. 2011 à 10:03
Merci pour ta réponse ! par contre, ce "bloc" je le place à quel niveau ?
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 223
7 oct. 2011 à 10:07
Comment cela, "à quel niveau" ?
Tu m'étonnes, là !
exactement où tu avais placé le tien !
____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
spie31 Messages postés 16 Date d'inscription mardi 6 septembre 2011 Statut Membre Dernière intervention 25 novembre 2011
7 oct. 2011 à 10:10
Ah j'ai trouvé !!
ca marche (pour 1 essai) !!

merci beaucoup !!!!
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 223
7 oct. 2011 à 10:12
Alors ? ===>> clic sur le tag "réponse acceptée" (si tu veux que d'autres retrouvent un jour cette solution) .


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
spie31 Messages postés 16 Date d'inscription mardi 6 septembre 2011 Statut Membre Dernière intervention 25 novembre 2011
7 oct. 2011 à 10:12
Oui en fait c'était pour savoir d'où à où je faisais ce remplacement exactement !

J'ai donc mis ton programme à la place de ce "bloc" là

   With Selection.Find
        .Text = "Prog_cable_moyens_chalu"
        .Replacement.Text = """" & _

                    RISQUESCABLECHALUMEAU.TextBoxPREVCHALUMEAU.Text & _
                    """"

        .Forward = True
        .Wrap = wdFindContinue
        .Format = True
        .MatchCase = False
        .MatchWholeWord = False
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
    End With
0
Rejoignez-nous