Double-barrer un texte dans un document Word

Shaegal Messages postés 110 Date d'inscription vendredi 1 février 2008 Statut Membre Dernière intervention 12 mai 2021 - 9 oct. 2012 à 15:22
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 - 11 oct. 2012 à 14:28
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

Utilisateur anonyme
9 oct. 2012 à 17:46
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
0
Shaegal Messages postés 110 Date d'inscription vendredi 1 février 2008 Statut Membre Dernière intervention 12 mai 2021 1
10 oct. 2012 à 09:12
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.
0
Utilisateur anonyme
10 oct. 2012 à 17:31
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
0
Shaegal Messages postés 110 Date d'inscription vendredi 1 février 2008 Statut Membre Dernière intervention 12 mai 2021 1
11 oct. 2012 à 08:45
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
0

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

Posez votre question
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 137
11 oct. 2012 à 14:25
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
0
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 137
11 oct. 2012 à 14:28
Il faut lire Document (Word) à la place de classeur test evidemmnent
0
Rejoignez-nous