Remplacement d'un texte dans un document Word par un TextBox [Résolu]

spie31 16 Messages postés mardi 6 septembre 2011Date d'inscription 25 novembre 2011 Dernière intervention - 6 oct. 2011 à 15:03 - Dernière réponse : spie31 16 Messages postés mardi 6 septembre 2011Date d'inscription 25 novembre 2011 Dernière intervention
- 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
Afficher la suite 

Votre réponse

12 réponses

Meilleure réponse
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 7 oct. 2011 à 09:49
3
Merci
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

Merci ucfoutu 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 101 internautes ce mois-ci

Commenter la réponse de ucfoutu
cs_loulou69 672 Messages postés mercredi 22 janvier 2003Date d'inscription 2 juin 2016 Dernière intervention - 6 oct. 2011 à 15:42
0
Merci
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.
Commenter la réponse de cs_loulou69
cs_Jack 14010 Messages postés samedi 29 décembre 2001Date d'inscription 28 août 2015 Dernière intervention - 6 oct. 2011 à 19:03
0
Merci
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)
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 - 6 oct. 2011 à 19:05
0
Merci
désolé : une ligne vide en trop entre la 1 et la 2
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 - 6 oct. 2011 à 19:12
0
Merci
PS : S'il passe en débug, c'est qu'il y a une erreur.
Il aurait été bon que tu nous dises laquelle
Commenter la réponse de cs_Jack
spie31 16 Messages postés mardi 6 septembre 2011Date d'inscription 25 novembre 2011 Dernière intervention - 7 oct. 2011 à 08:59
0
Merci
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 !!
Commenter la réponse de spie31
spie31 16 Messages postés mardi 6 septembre 2011Date d'inscription 25 novembre 2011 Dernière intervention - 7 oct. 2011 à 09:00
0
Merci
Pareil pour moi : les lignes vides n'apparaissent pas dans VBA
Commenter la réponse de spie31
spie31 16 Messages postés mardi 6 septembre 2011Date d'inscription 25 novembre 2011 Dernière intervention - 7 oct. 2011 à 10:03
0
Merci
Merci pour ta réponse ! par contre, ce "bloc" je le place à quel niveau ?
Commenter la réponse de spie31
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 7 oct. 2011 à 10:07
0
Merci
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
Commenter la réponse de ucfoutu
spie31 16 Messages postés mardi 6 septembre 2011Date d'inscription 25 novembre 2011 Dernière intervention - 7 oct. 2011 à 10:10
0
Merci
Ah j'ai trouvé !!
ca marche (pour 1 essai) !!

merci beaucoup !!!!
Commenter la réponse de spie31
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 7 oct. 2011 à 10:12
0
Merci
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
Commenter la réponse de ucfoutu
spie31 16 Messages postés mardi 6 septembre 2011Date d'inscription 25 novembre 2011 Dernière intervention - 7 oct. 2011 à 10:12
0
Merci
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
Commenter la réponse de spie31

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.