OVH Cloud OVH Cloud

Supprimer du texte par macro

3 réponses
Avatar
Jdel
Bonjour,
La macro suivante permet d'importer du texte dans une page Word à partir de
TextBox contenues dans un UserForm.
Le texte est positionné par rapport à des signets, ce qui permet la mise en
page.
Je voudrait que, en début d'exécution, si du texte existe à droite du
signet, il soit supprimé, sans supprimer le signet, ni la ligne
Par exemple, comme la macro est lancée par un bouton dans le UserForm, si
l'on appuie 2 fois de suite sur le bouton, on ne doit pas avoir de
répétition du texte.

Merci de bien vouloir m'aider

Sub imprimer()
'On Error Resume Next
Dim NomAdressDest As Object
Set NomAdressDest = UserForm1
Dim NomDesti, AdressUn, AdressDeux, CPDest, VilleDest As Variant
NomDesti = NomAdressDest.TextBox1.Value
AdressUn = NomAdressDest.TextBox2.Value
AdressDeux = NomAdressDest.TextBox4.Value
CPDest = NomAdressDest.TextBox3.Value
VilleDest = NomAdressDest.TextBox5.Value
Selection.GoTo wdGoToBookmark, , , "NomDest"
Selection.TypeText Text:=NomDesti
Selection.GoTo wdGoToBookmark, , , "AdresDest"
Selection.TypeText Text:=AdressUn
Selection.GoTo wdGoToBookmark, , , "AdresDest_2"
Selection.TypeText Text:=AdressDeux
Selection.GoTo wdGoToBookmark, , , "CP_VilleDest"
Selection.TypeText Text:=CPDest & " " & VilleDest
End Sub

3 réponses

Avatar
Geo

Je voudrais que, en début d'exécution, si du texte existe à droite du signet, il soit
supprimé, sans supprimer le signet, ni la ligne


Avec l'enrégistreur de ma cro, c'est relativement facile d'obtenir un
code qui fait ça:
F5 choisir le signet
lancer l'enregistrement
Passer en mode extension : F8
Aller à la fin de ligne : Fin
Revenir d'un caractère en arrière (pour ne pas effacer la ligne comme
tu dis : flèche gauche
Annuler le mode extension : F8
Supprimer le texte : Suppr
Arrêter l'enregistrement.
Ce code devrait marcher même si le signet est en fin de ligne, mais je
n'ai pas testé.

Par exemple, comme la macro est lancée par un bouton dans le UserForm, si l'on appuie 2
fois de suite sur le bouton, on ne doit pas avoir de répétition du texte.


Une autre solution, plus simple, serait de vider la variable après
l'avoir recopiée.

Selection.GoTo wdGoToBookmark, , , "NomDest"
Selection.TypeText Text:=NomDesti
NomDesti = ""


--
A+

Avatar
Anacoluthe
Bonjour !

'Jdel' nous a écrit ...
La macro suivante permet d'importer du texte dans une page Word à partir de
TextBox contenues dans un UserForm.
Le texte est positionné par rapport à des signets, ce qui permet la mise en
page.
Je voudrait que, en début d'exécution, si du texte existe à droite du
signet, il soit supprimé, sans supprimer le signet, ni la ligne
Par exemple, comme la macro est lancée par un bouton dans le UserForm, si
l'on appuie 2 fois de suite sur le bouton, on ne doit pas avoir de
répétition du texte.



Sans répondre directement à la question (effacer la suite d'un signet
probablement dans le paragraphe, vous ne le dites pas assez clairement)
il est toujours préférable de placer le texte DANS le signet
au lieu d'insérer le texte APRÈS le signet.
La petite difficulté vient du fait que le remplacement d'un signet
par un Range /détruit/ le signet. Il suffit de le recréer c'est tout !
Vous trouverez dans la FAQ des macros pour utiliser des signets.

J'utilise la fonction suivante pour placer du texte DANS un signet

' --------------------------------------------------------
Public Sub RemplirSignet(S As String, T As String)
' Remplit le signet S avec le texte T
On Error GoTo rien ' Si S n'existe pas !
Dim Place As Long
Place = ActiveDocument.Bookmarks(S).Range.Start
ActiveDocument.Bookmarks(S).Range.Text = T
ActiveDocument.Bookmarks.Add Name:=S, _
Range:¬tiveDocument.Range(Place, Place + Len(T))
rien:
End Sub
' --------------------------------------------------------


Ce qui nous donnerait pour votre code bien plus simplement :
RemplirSignet "NomDest", NomAdressDest.TextBox1.Value
RemplirSignet "AdresDest" , NomAdressDest.TextBox2.Value
etc
et qui du coup supprimerait radicalement votre problème
puisque chaque entrée /remplacerait/ la précédente dans le
signet au lieu de s'ajouter à la suite.
C'est ti pas mieux ? :-)

Anacoluthe
« Le champ du signe. »
- Umberto ECO

Avatar
Jdel
Merci, je vais essayer ça demain

"Jdel" a écrit dans le message de news:
441eeed8$0$19705$
Bonjour,
La macro suivante permet d'importer du texte dans une page Word à partir
de TextBox contenues dans un UserForm.
Le texte est positionné par rapport à des signets, ce qui permet la mise
en page.
Je voudrait que, en début d'exécution, si du texte existe à droite du
signet, il soit supprimé, sans supprimer le signet, ni la ligne
Par exemple, comme la macro est lancée par un bouton dans le UserForm, si
l'on appuie 2 fois de suite sur le bouton, on ne doit pas avoir de
répétition du texte.

Merci de bien vouloir m'aider

Sub imprimer()
'On Error Resume Next
Dim NomAdressDest As Object
Set NomAdressDest = UserForm1
Dim NomDesti, AdressUn, AdressDeux, CPDest, VilleDest As Variant
NomDesti = NomAdressDest.TextBox1.Value
AdressUn = NomAdressDest.TextBox2.Value
AdressDeux = NomAdressDest.TextBox4.Value
CPDest = NomAdressDest.TextBox3.Value
VilleDest = NomAdressDest.TextBox5.Value
Selection.GoTo wdGoToBookmark, , , "NomDest"
Selection.TypeText Text:=NomDesti
Selection.GoTo wdGoToBookmark, , , "AdresDest"
Selection.TypeText Text:­ressUn
Selection.GoTo wdGoToBookmark, , , "AdresDest_2"
Selection.TypeText Text:­ressDeux
Selection.GoTo wdGoToBookmark, , , "CP_VilleDest"
Selection.TypeText Text:=CPDest & " " & VilleDest
End Sub