Word Macro simple qui ne fonctionne pas.

fifi02100

Membre confirmé
3 Avril 2010
15
0
51
France
Bonjour,
Je voulais faire un macro simple avec le bouton "enregistrer" : sélectionner un style dans le texte pour en compter les mots. Ca marchait avec d'autres versions de word et même avec Libre Office mais que j'enregistre la macro si dessous elle ne fonctionne pas quand je la lance. Comprend pas :( merci pour votre aise.
(word 16,16 sur Mojave)

Sub Macro4()
'
' Macro4 Macro
'
'
Selection.Find.ClearFormatting
Selection.Find.Style = ActiveDocument.Styles("Corps")
End Sub
 
L'enregistrement des macros est un sport à risque. Ce n'est jamais bien convaincant, au mieux une piste de départ. Quelles sont les "autres versions de Word" avec lesquelles tu obtenais le résultat voulu ?

Ceci dit, pour ce qui est de la sélection de tous les passages d'un style, l'intérêt d'une macro n'est pas très évident. On le fait tout simplement depuis le volet "Styles" :
Capture d’écran.png
Mais je n'ai peut-être pas tout compris à ce que tu essayes de faire...
 
Et oui par habitude je passais par la recherche avancée pour sélectionner un seul style et je voulais automatiser la tâche avec un bouton. Mais ta solution me suffit amplement ! Pourtant je connais très bien Word en dehors des Macros, et je rougis d'avoir loupé cette option qui va me simplifier la vie. Ce qui fait que je ne comprendrais peut-être jamais pourquoi la macro ne fonctionne pas. Mais ce n'est plus ma priorité, sauf si quelqu'un à la réponse, juste par curiosité.
En tout cas un grand merci @Aliboron
(Pour moi on peut fermer le sujet)
 
Disons que c'est possible, mais pas simple, par VBA. En effet, la sélection multiple n'est pas possible en VBA et la fonction Words.Count ne compte pas seulement les mots, mais aussi les signes de ponctuation et les retours chariot. Il faut donc un peu (beaucoup) bricoler. Mais on peut y arriver avec cette boucle, qui compte le nombre des mots pour un style (ici "Normal") :

Bloc de code:
Sub NombreMotsParStyle()
Dim MonStyle As String
    MonStyle = "Normal" ' à personnaliser selon les besoins
Dim NombreMots As Double
Dim Caractere As Double
    Selection.HomeKey Unit:=wdStory ' annule toute sélection dans le document
    Selection.Find.ClearFormatting
    Selection.Find.Style = ActiveDocument.Styles(MonStyle)
    With Selection.Find
        .Text = ""
        .Replacement.Text = ""
        .Forward = True
        .Wrap = wdFindContinue
        .Format = True
        .MatchCase = False
        .MatchWholeWord = False
        .MatchKashida = False ' ligne à ne pas conserver pour utilisation dans Word 2011
        .MatchDiacritics = False ' ligne à ne pas conserver pour utilisation dans Word 2011
        .MatchAlefHamza = False ' ligne à ne pas conserver pour utilisation dans Word 2011
        .MatchControl = False ' ligne à ne pas conserver pour utilisation dans Word 2011
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
    End With
    Do
        If Len(Selection) > 1 Then NombreMots = NombreMots + 1
        For Caractere = 1 To Len(Selection)
            If (Mid(Selection, Caractere, 1)) = " " Then
                NombreMots = NombreMots + 1
            End If
        Next Caractere
    Loop While Selection.Find.Execute
    Test = MsgBox("Nombre de mots : " & NombreMots, vbOKOnly, "Résultat pour le style " & MonStyle)
End Sub
L'astuce consiste à compter le nombre d'espaces dans chacun des paragraphes du style choisi (ici "Normal", donc). Un léger hic quand même : si on ajoute un paragraphe ne contenant qu'une espace (donc aucun mot), ça va quand même le prendre en compte. Et je n'ai pas vérifié ce qui se passe dans le cas des ponctuations doubles et donc des espaces insécables. On pourrait sûrement y remédier, mais bon.

En tout cas, comme déjà vu, c'est bien plus simple via le volet "Styles"... ;-)
 
Dernière édition:
  • J’aime
Réactions: fifi02100