Problème pour détecter le style d'un mot

Anonyme
2025-03-31T15:39:25+00:00

Bonjour

J'ai un texte qui contient des paragraphes dont certains contiennent des lignes de la forma:

11. Prénom1 Prenom2 particule1 NOM1 particule2 NOM2

comme

11. Pierre Jacques de FRANCE de la TOUR

Les prénoms et noms sont dotés d'un style HOMME ou FEMME selon leur sexe.

Je cherche à mettre au point une procédure pour détecter ces patronymes, les reformater pour obtenir

FRANCE (de) LA TOUR (de) Pierre Jacques

en vue d'en créer un index

Voici le début de cette procédure:

Sub ReformaterPatronymes()

Dim para As Paragraph

Dim rng As Range

Dim word As Range

Dim prenoms As String, noms As String, particules As String

Dim newPatronyme As String

Dim currentStyle As String

Dim isNom As Boolean

Dim wordArray() As String

Dim i As Integer

' Liste des particules reconnues

Dim particulesList As Object

Set particulesList = CreateObject("Scripting.Dictionary")

particulesList.Add "de", True

particulesList.Add "du", True

particulesList.Add "des", True

particulesList.Add "la", True

particulesList.Add "le", True

particulesList.Add "les", True

' Parcourir tous les paragraphes du document actif

For Each para In ActiveDocument.Paragraphs

    Set rng = para.Range

    rng.Start = para.Range.Start

    rng.End = para.Range.Start

    ' Rechercher une ligne commençant par un nombre suivi d'un point et d'un espace

    Debug.Print "Word(1)=" & para.Range.words(1)

    If Not IsNumeric(para.Range.words(1)) Then GoTo ParaSuivant

    Debug.Print "Word(2)=" & para.Range.words(2)

    If Not DétectePrésencePoint(para.Range.words(2)) Then GoTo ParaSuivant

    ' Rechercher le premier mot ayant le style "Homme" ou "Femme"

    For Each word In para.Range.words

        If word.Style = "Homme" Or word.Style = "Femme" Then

            rng.Start = word.Start

            currentStyle = word.Style

            Debug.Print "Word=" & word.Text

            Exit For

        End If

    Next word

    **' Étendre la sélection à tous les mots suivants ayant le même style**

    **For Each word In para.Range.words**

        **Debug.Print "Word=" & word.Text**

        **'si le début du mot est bien dans le paragraphe**

        **If word.Start >= rng.Start Then**

            **If word.Style = currentStyle Then**

                **'on étend la sélection**

                **rng.End = word.End**

            **Else**

                **Exit For**

            **End If**

        **End If**

    **Next word**

  Dans cette dernière partie qui cherche les mots suivants possédant le style HOMME ou FEMME ne fonctionne pas car, entre temps, VBA "lit" le style comme étant Normal alors qu'il est bien Homme!

Pourquoi VBA fait une fausse lecture de cette propriété ?

Merci pour votre aide

Bernard

Microsoft 365 et Office | Installer, entrer des clés, activer | Autres | Autres

Question verrouillée. Cette question a été migrée à partir de la Communauté Support Microsoft. Vous pouvez voter pour indiquer si elle est utile, mais vous ne pouvez pas ajouter de commentaires ou de réponses ni suivre la question.

0 commentaires Aucun commentaire

2 réponses

  1. Anonyme
    2025-04-02T11:39:25+00:00

    Bonjour, et merci pour ces informations

    Bernard

    Cette réponse a-t-elle été utile ?

    0 commentaires Aucun commentaire
  2. Anonyme
    2025-04-01T02:54:02+00:00

    Cette réponse a été automatiquement traduite. Par conséquent, il peut y avoir des erreurs grammaticales ou des formulations étranges.

    Bonjour, BernardBouree

    Bienvenue dans la communauté de support Microsoft.

    Je comprends le problème que vous rencontrez avec la question macro. Malheureusement, le forum Microsoft Answers ne prend pas en charge VBA. il est mieux adapté pour la publication sur les questions les plus récentes de 'vba' - Stack Overflow (en anglais seulement).

    Utilisez des balises VBA et d’autres balises pertinentes pour publier des questions de programmation VBA sur les dernières questions 'vba' - Stack Overflow

    Gardez à l’esprit que Stack Overflow a des directives telles que la nécessité d’un titre descriptif, d’un énoncé de problème complet et concis et de suffisamment de détails pour reproduire votre question. Les demandes de fonctionnalités ou les questions trop larges sont considérées comme hors sujet.

    Clause de non-responsabilité : Microsoft n’offre aucune garantie, implicite ou autre, et n’est pas responsable des informations que vous recevez des sites tiers liés ou de tout support lié à la technologie.

    Même si je ne peux pas vous aider, j’espère que les informations que j’ai fournies vous aideront à trouver une meilleure direction. Je garderai ces informations dans mes dossiers au cas où l’un de nos merveilleux bénévoles aurait une idée pour vous.

    Merci de votre compréhension.

    Allen L- MSFT | Spécialiste du support communautaire Microsoft

    Cette réponse a-t-elle été utile ?

    0 commentaires Aucun commentaire