Double-barrer un texte dans un document Word

Signaler
Messages postés
107
Date d'inscription
vendredi 1 février 2008
Statut
Membre
Dernière intervention
16 janvier 2019
-
Messages postés
7216
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
19 janvier 2021
-
Bonjour à tous,

J'aimerai, à partir de vb.net, double-barrer un texte dans un document Word.
Actuellement, mon code est celui-ci:
With doc.content.Find
   .text = Txt 'Texte à rechercher
   .Font.DoubleStrikeThrough = True 'Double-barrer le texte trouvé
   .Execute() 'Exécution
 End With


Le code n'est pas rejeté (pas de bug) mais rien n'est double-barré.
Je pense que ça vient de la commande Execute() dont je ne sais pas quoi mettre à l'intérieur.

Pour infos:
[*] je n'utilise pas "interop" car nos pc n'utilisent pas la même version de Word. Alors je fais:
Dim appWord as Object=CreateObject("Word.Application")

qui fonctionne très bien.

[*] pour le code, je me suis basé sur celui qui permet de remplacer un mot par un autre:
With doc.Content.Find
  .ClearFormatting()
  .Replacement.ClearFormatting()
  .Text = TexteCherché
  .Replacement.Text = NouveauTexte
  .Execute(Replace:=2)
End With


Merci d'avance pour vos réponses...

6 réponses


Bonjour

Sélectionne ton texte avant et utilise Selection.find au lieu doc.content.find

Parce que, dans l'aide de VBA
, il y a un article qui liste les propriétés de l'objet Document. Il n'y a pas de propriété Document.font
Il y a un article sur l'objet Range. Il y a une propriété Range.Font

Il y a aussi un article sur l'objet Selection. Il y a une propriété Selection.font
Messages postés
107
Date d'inscription
vendredi 1 février 2008
Statut
Membre
Dernière intervention
16 janvier 2019
1
Salut cmarmotte et merci pour cette rapide réponse.

En fait mon "doc" correspond à "ThisDocument" de VBA. Du coup, il y a bien les propriétés [b]ThisDocument.Content.font.DoubleStrikeThrough.
/b

Et là, je m’aperçois que ThisDocument.Content.Find.Font n'existe pas.
Alors, ma question, qui rejoint ta procédure est, comment sélectionner du texte?

PS: Je rappel que j'utilise la méthode CreateObjet pour ouvrir mon document.

Bonjour,

Cherche Selection dans l'aide de VBA. Il y a un paquet d'exemples. Tu peux toujours utiliser l'enregistreur de macros et faire des copier-coller de la procédure enregistrée.

Pour sélectionner tout le texte du document actif:

Selection.HomeKey unit:=wdStory
Messages postés
107
Date d'inscription
vendredi 1 février 2008
Statut
Membre
Dernière intervention
16 janvier 2019
1
Salut cmarcotte,

Pour les macros VBA, y'a pas de problème. Mais je ne code pas en VBA.
Selection est une procédure VBA (dispo en vb.net) qui impose que le texte soit déjà sélectionné. Or, ce n'est pas le cas ici.

En fait, mon document Word sert de modèle pour l'impression. Il contient des mots clés entourés de balises tels que #Prénom# #Nom#, etc.

L'application que j'ai développé ne sert qu'à renseigner les saisies demandées, ouvre le document modèle et remplace les mots clés balisés par les saisies en vue d'être imprimés. Il va de soit qu'à l'ouverture du document, aucun texte n'est pré-sélectionné.

Jusque là, tout fonctionne sauf la partie où l'application doit barrer les choix non sélectionnés par l'utilisateur.

Exemple:
[*] D'accord
[*] Pas d'accord
[*] Pas d'avis

Je ne sais pas si je suis bien clair
Messages postés
7216
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
19 janvier 2021
118
Bonjour,
J'ai une solution, mais il faut que les mot soient dans un tableau pour être sélectionnés.
Essaie avec un classeur texte.
Voici une macro pour créer un tableau:
Tu inseres une UserForm et tu mets un bouton avec ce code:

Selection.Collapse Direction:=wdCollapseStart
Set myTable = ActiveDocument.Tables.Add(Range:=Selection.Range, _
NumRows:=5, NumColumns:=1)
myTable.AutoFormat Format:=wdTableFormatClassic2


Cela te fait un tableau de 5 lignes et 1 colonne. Tu rempli le tableau avec des mots test.

Voici le code en VB.Net pour barré le mot situé dans la 2ème ligne:

Private Sub barréword()
        'Créer une instance de word
        oWord = CreateObject("Word.Application")
        'Ouvrir un nouveau document
        oWord.Documents.Open("chemin doc Word")
        'rendre le document word visible
        oWord.Visible = True
        
        oWord.ActiveDocument.Tables(1).Rows(2).Select()
        With oWord.Selection
             .Font.DoubleStrikeThrough = True 
        End With
        oWord.ActiveDocument.Close() 'on ferme le document
        oWord.Visible = False
        oWord.Quit() 'on ferme Word
    End Sub


Voici le code pour rétablir:

Private Sub enlevebarre()
        'Créer une instance de word
        oWord = CreateObject("Word.Application")
        'Ouvrir un nouveau document
        oWord.Documents.Open("chemin doc Word)
        'rendre le document word visible
        oWord.Visible = True
        oWord.ActiveDocument.Tables(1).Rows(2).Select()
       With oWord.Selection
            .Font.DoubleStrikeThrough = False
        End With
        oWord.ActiveDocument.Close() 'on ferme le document
        oWord.Visible = False
        oWord.Quit() 'on ferme Word
    End Sub


@+Le Pivert
Messages postés
7216
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
19 janvier 2021
118
Il faut lire Document (Word) à la place de classeur test evidemmnent