IdentifiantMot de passe
Loading...
Mot de passe oubli� ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les r�ponses en temps r�el, voter pour les messages, poser vos propres questions et recevoir la newsletter

VBA Word Discussion :

Modifier automatiquement tous les nombres ordinaux d'un document avec mise en forme exposant


Sujet :

VBA Word

  1. #1
    Membre habitu�
    Homme Profil pro
    Archiviste d'association
    Inscrit en
    Juillet 2017
    Messages
    12
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 58
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activit� : Archiviste d'association
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2017
    Messages : 12
    Par d�faut Modifier automatiquement tous les nombres ordinaux d'un document avec mise en forme exposant
    Bonsoir � Tous,

    C'est ma premi�re contribution, apr�s avoir d�couvert et exploit� la grande richesse de ce site depuis deux semaines (vieux maut tard que jamais ).
    Je me lance, ayant fouill� pendant 48h sans trouver de sujet parfaitement similaire. J'esp�re ne pas �tre pass� � c�t� de quelque chose, et cela m'a aussi incit� � �tre tr�s pr�cis dans le titre de mon post.
    Je pars d'un (tr�s) long document Word 2003 que j'ai obtenu par num�risation scanner+OCR.
    J'ai construit une longue macro pour traiter tous les probl�mes de "rechercher-remplacer" auquel on est confront� en pareil cas.
    J'en arrive au probl�me des nombres ordinaux, qui ob�issent � des r�gles typographiques assez pr�cises, comme par exemple :

    Remplacer toutes les occurrences "2nd" sans exposant en "2d" avec le "d" en exposant.


    Apr�s avoir beaucoup cherch� sur la piste du VBA, j'en suis rest� � une solution de param�trage de Word, plus p�rticuli�rement des mises en forme automatiques.
    En reprenant l'exemple "2nd" de :

    - S�lectionner une occurrence "2nd" dans le fichier Word
    - S�lectionner le caract�re "n" et mettre le caract�re "d" en exposant (Maj+Ctrl+=)
    - s�lectionner les deux caract�res "2d" ("d" �tant d�sormais en exposant).
    Cette s�lection est n�cessaire pour activer l'option "Texte mise en forme" de la bo�te de dialogue que l'on va ouvrir
    - Menu : Insertion\Insertion automatique�\Insertion automatique (Alt+I+E+I)
    - Onglet : Correction automatique
    - Dans la zone Remplacer (� gauche), saisir "2nd"
    - Touche tabulation pour s�lectionner � droite la cha�ne "2d" qui figure par d�faut dans la zone "Par".
    - Cocher l'option "Texte mise en forme" juste au-dessus. Cela a pour effet de mettre les caract�res "nd" en exposant
    - Cliquer sur le bouton "Ajouter".
    - Valider la bo�te de dialogue avec le bouton "Ok"

    Toutes les occurrences "2nd" sans exposant sont transform�es automatiquement en "2d" avec exposant.
    Si on saisit dans le texte une cha�ne "2nd" (sans exposant), elle sera transform�e en "2d" (Avec exposant)
    Si on lance la commande Format\Mise en forme automatique\Bo�te de dialogue : option Mettre en forme automatiquement avec le Document g�n�ral.

    Mon probl�me est donc r�solu de cette mani�re, et vu la difficult� que j'ai eu � trouver sur Internet, je n'h�site pas � partager cette solution.
    N�anmoins j'aurai aim� savoir s'il aurait pu �tre trait� par macro ? C'est donc par pure curiosit�.
    Avez-vous le souvenir d'avoir d�j� travaill� ce sujet ?

    Merci par avance de votre int�r�t.

    PS : Le sujet concerne aussi les occurrences "3�me", "4�me", etc, Ier, IIe, etc

  2. #2
    R�dacteur/Mod�rateur

    Avatar de Heureux-oli
    Homme Profil pro
    Contr�leur d'industrie
    Inscrit en
    F�vrier 2006
    Messages
    21 086
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 61
    Localisation : Belgique

    Informations professionnelles :
    Activit� : Contr�leur d'industrie
    Secteur : A�ronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : F�vrier 2006
    Messages : 21 086
    Par d�faut
    Salut,

    Oui, on peut le faire par VBA.
    Le VBA devient int�ressant quand le traitement devient r�current.

    Jette un �il l� : http://heureuxoli.developpez.com/off...-et-remplacer/
    On peut partir d'une liste pour les remplacements.
    J'ai pas encore de d�codeur, alors, postez en clair ! Comment mettre une balise de code ?
    D�butez en VBA

    Mes articles


    Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous �tes pr�venus !

  3. #3
    Membre habitu�
    Homme Profil pro
    Archiviste d'association
    Inscrit en
    Juillet 2017
    Messages
    12
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 58
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activit� : Archiviste d'association
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2017
    Messages : 12
    Par d�faut
    Bonjour et merci de tes indications Heureux-oli,

    Pardon pour ce d�lai de r�action; j'ai retourn� le probl�me un peu dans tous les sens, apr�s avoir exploit�
    l'exemple du traitement par remplacement � partir d'une liste d'occurrences dans un tableau.
    cf. http://heureuxoli.developpez.com/off...-et-remplacer/
    J'ai t�ch� de l'adapter � mon cas particulier :

    - Cr�ation d'un tableau � deux colonnes sur fichier Word contenant en colonne A les occurrences � rechercher (Melle, Mgr), et en colonne B les occurrences de remplacement (idem qu'en A, sauf que "elle" et "gr" sont format�s en exposant) Cf. fichier ListExposants.doc

    - Cr�ation d'un document test sur Word avec le texte contenant les occurrences � modifier. Cf. fichier ExempleTraitementExposants.doc

    - Adaptation du code VBA :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    'Recherche et remplacement d'une liste de mots
    '===============================
    '
    Function NetText(stTemp As String) As String
    '===========================================
    'Fonction de nettoyage
    'Supprime les deux caract�res de fin de cellule
    '
    'NetText = Left(stTemp, Len(stTemp) - 2) 'Left(cha�ne,nb_caract�res � gauche)
                                            'stTemp : variable de cha�ne de caract�re ?
                                            'Len donne le nombre de caract�res d'une cha�ne (=nbcar() sur Excel)
    NetText = Left(stTemp, Len(stTemp))'Remplace la ligne pr�c�dente, car pas besoin de supprimer les deux caract�res de fin de cellule
    End Function
    'Nous l'utiliserons dans la proc�dure suivante pour obtenir les mots recherch�s et les mots de remplacement.
    '
    Sub RemplacerListeDeMots()
    '==================
    'Cette macro a pour r�le de remplacer les mots d'un document par
    'une liste de mots se trouvant dans une table � deux colonnes
    '___________________________________________________
    '
    'D�claration des variables correspondant aux fichiers
    '----------------------------------------------------
    'Le document oDocSource contient la liste des mots � chercher
    'et le document oDocCible les mots � remplacer
    Dim oDocSource As Document, oDocCible As Document
    '
    'D�claration des variables Table
    Dim oTbl As Table 'D�finition de tableau
    Dim oRow As Row 'D�finition de ligne
    '
    'Une bo�te de dialogue pour choisir les documents
    Dim oDlg As FileDialog
    '
    '
    'Dans un premier temps, nous allons ouvrir les deux documents, le premier contenant la liste des mots � rechercher
    '(tableau � deux colonnes) et le second �tant celui dans lequel nous souhaitons faire les remplacements.
    '
    'Pour ouvrir les documents, au lieu de les mettre en "dur" dans le code, nous allons utiliser un objet "FileDialog".
    'Cet objet permet de s�lectionner un r�pertoire ou un fichier. Dans notre exemple, nous allons l'utiliser pour les fichiers.
    'Ce choix s'obtient par l'argument pass� lors de l'affectation.
    '
    Set oDlg = Application.FileDialog(msoFileDialogFilePicker)
    '
    '
    'Ouverture du premier document
    '-----------------------------
    'Ouverture de la bo�te de dialogue
    'Pour afficher cette bo�te de dialogue, nous allons utiliser sa m�thode ".Show".
    'Comme il s'agit d'un �change avec l'utilisateur, nous avons la possibilit� de choisir un titre pour la bo�te de dialogue
    'et nous n'avons besoin que d'un seul fichier.
    With oDlg
        .AllowMultiSelect = False
        .Title = "Document contenant le tableau des mots avec exposant"
        .Show 'Affichage de la bo�te de dialogue. On demande � l'utilisateur
            '  qu'il d�signe le fichier avec le tableau
    End With
    'Cet objet va renvoyer le nom du fichier choisi par l'utilisateur.
    'Comme il n'y a qu'un seul fichier, nous r�cup�rons le premier �l�ment.
    '
    'La propri�t� SelectedItems contient :
    Set oDocSource = Documents.Open(oDlg.SelectedItems(1)) 'Il n'est pas n�cessaire
    '               de passer par une variable, nous pouvons directement utiliser
    '               le r�sultat de oDlg.SelectedItems(1)en argument.
    '
    'Il faut r�p�ter l'op�ration une seconde fois pour le document cible
    'On affiche � nouveau la bo�te de dialogue pour que l'utilisateur donne
    'le nom du fichier cible
    With oDlg
        .AllowMultiSelect = False
        .Title = "Document cible avec les occurrences � remplacer"
        .Show 'Affichage de la bo�te de dialogue. On demande � l'utilisateur
        '      qu'il d�signe le fichier cible o� seront effectu�s les remplacements
    End With
    '
    'L'objet oDlg va renvoyer le nom du fichier choisi par l'utilisateur.
    'Comme il n'y a qu'un seul fichier, nous r�cup�rons le premier �l�ment :
    'Choix du fichier : oDlg.SelectedItems(1)
    '
    'Ouverture du second document : Document cible avec les occurrences � remplacer
    Set oDocCible = Documents.Open(oDlg.SelectedItems(1))
    '
    '
    'Cr�ation de la boucle sur les �l�ments du tableau
    'Boucle sur les �l�ments du tableau qui seront utilis�s pour la recherche et le remplacement.
    'On affecte le premier tableau du document source � la variable tableau pour ensuite faire une boucle sur les lignes du tableau.
    'Dans notre cas, c'est assez simple, la premi�re colonne contient le mot � rechercher et la seconde, le mot de remplacement.
    '
    'Affectation de la table
    Set oTbl = oDocSource.Tables(1) 'On affecte le tableau du document source � la
                                    'variable oTbl pour ensuite faire une boucle sur les
                                    'lignes du tableau
    'Boucle sur les cellules de la table
    For Each oRow In oTbl.Rows 'Pour chaque ligne des lignes du tableau...
            oDocCible.Select 'S�lection du document cible
                Selection.HomeKey unit:=wdStory 'La recherche d�marre au d�but du document
    'Dans cette boucle, nous utilisons directement le r�sultat dans notre fonction de recherche et remplacement.
                With Selection.Find
    '                .ClearFormatting 'Ne pas tenir compte des formats dans le remplacement
    				'  Ligne neutralis�e afin de ne pas agir sur le format exposant lors du remplacement
                    .Forward = True
                    .Text = NetText(oRow.Cells(1).Range.Text) 'Utilisation de la fonction de nettoyage
                    .Replacement.Text = NetText(oRow.Cells(2).Range.Text) 'Utilisation de la fonction de nettoyage
    '                .Replacement.ClearFormatting 'Remise � z�ro des param�tres de format de la fen�tre rechercher remplacer
    				'  Ligne neutralis�e afin de ne pas agir sur le format exposant lors du remplacement
                    .Execute Replace:=wdReplaceAll 'Ex�cution de remplacer tout
                End With
    '
    Next oRow 'La boucle continue le traitement sur la ligne suivante
    'Lib�ration des objets
    Set oDlg = Nothing
    Set oTbl = Nothing
    oDocSource.Close savechanges:=wdDoNotSaveChanges 'Fermeture du fichier du tableau sans enregistrer
    Set oDocSource = Nothing
    End Sub

    Cette macro ne donne aucun r�sultat. J'ai tent� plusieurs petites modifications, mais cela ne donne rien : Les occurrences "Melle" et "Mgr" ne sont pas transform�es en "Melle" et "Mgr". Que faut-il corriger ? Merci pour ton attention.
    Fichiers attach�s Fichiers attach�s

  4. #4
    Membre habitu�
    Homme Profil pro
    Archiviste d'association
    Inscrit en
    Juillet 2017
    Messages
    12
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 58
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activit� : Archiviste d'association
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2017
    Messages : 12
    Par d�faut
    J'ai peut-�tre trouv� une autre solution VBA; je travaille dessus actuellement.
    � bient�t

  5. #5
    Membre habitu�
    Homme Profil pro
    Archiviste d'association
    Inscrit en
    Juillet 2017
    Messages
    12
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 58
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activit� : Archiviste d'association
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2017
    Messages : 12
    Par d�faut
    Citation Envoy� par La_R�gie Voir le message
    J'ai peut-�tre trouv� une autre solution VBA; je travaille dessus actuellement.
    � bient�t
    �a y est, je crois que j'ai quelque chose qui marche. N'�tant pas expert en VBA, il y aurait sans doute des mani�res plus propres d'�crire du code, et je suis preneur de solutions plus �l�gantes, avec si possible les commentaires pour mieux comprendre.
    En attendant, voici ce sur quoi j'ai travaill� :

    Public Const RespectCasseOui As Boolean = True
    Public Const MotCompletOui As Boolean = True
    Public Const CaracGeneriqueOui As Boolean = True
    Public Const RespectCasseNon As Boolean = False
    Public Const MotCompletNon As Boolean = False
    Public Const CaracGeneriqueNon As Boolean = False
    '
    Sub TraitementExposants()
    '-------------------------------
    ' Remplacement des espaces par espaces ins�cables et premi�re identification des exposants
    Call RpltChaineCar("Mme ", "Mme^s", RespectCasseOui, MotCompletOui, CaracGeneriqueNon)
    Call RpltChaineCar("Mmes ", "Mmes^s", RespectCasseOui, MotCompletOui, CaracGeneriqueNon)
    Call RpltChaineCar("Mlle ", "Mlle^s", RespectCasseOui, MotCompletOui, CaracGeneriqueNon)
    Call RpltChaineCar("Mlles ", "Mlles^s", RespectCasseOui, MotCompletOui, CaracGeneriqueNon)
    Call RpltChaineCar("M. ", "M.^s", RespectCasseOui, MotCompletOui, CaracGeneriqueNon)
    Call RpltChaineCar("Mgr ", "Mgr^s", RespectCasseOui, MotCompletOui, CaracGeneriqueNon)
    Call RpltChaineCar("Mgrs ", "Mgrs^s", RespectCasseOui, MotCompletOui, CaracGeneriqueNon)
    Call RpltChaineCar("MM. ", "MM.^s", RespectCasseOui, MotCompletOui, CaracGeneriqueNon)
    Call RpltChaineCar("Mme de ", "Mme^sde^s", RespectCasseOui, MotCompletOui, CaracGeneriqueNon) 'Cas des noms � particule
    Call RpltChaineCar("Mlle de ", "Mlle^sde^s", RespectCasseOui, MotCompletOui, CaracGeneriqueNon) 'Cas des noms � particule
    Call RpltChaineCar("M. de ", "M.^sde^s", RespectCasseOui, MotCompletOui, CaracGeneriqueNon) 'Cas des noms � particule
    Call RpltChaineCar("Mr ", "M.^s", RespectCasseOui, MotCompletOui, CaracGeneriqueNon)
    Call RpltChaineCar("Mr de ", "M.^sde^s", RespectCasseOui, MotCompletOui, CaracGeneriqueNon) 'Cas des noms � particule
    Call RpltChaineCar("Mrs ", "Mme^s", RespectCasseOui, MotCompletOui, CaracGeneriqueNon)
    Call RpltChaineCar("Dr ", "Dr^s", RespectCasseOui, MotCompletOui, CaracGeneriqueNon)
    Call RpltChaineCar("Dr. ", "Dr^s", RespectCasseOui, MotCompletOui, CaracGeneriqueNon) '"Dr." n'esty pas cens� exister, mais remplac� par "Dr"
    'Les remplacements suivants utilisent les caract�res g�n�riques
    ' Ajout ins�cable apr�s "Mgr Xxx"
    Call RpltChaineCar("(<Mgr) ([A-Z])", "\1^s\2", RespectCasseNon, MotCompletNon, CaracGeneriqueOui)
    Call RpltChaineCar("(<Mgrs) ([A-Z])", "\1^s\2", RespectCasseNon, MotCompletNon, CaracGeneriqueOui)
    ' Ajout ins�cable pour "Me Xxx"
    Call RpltChaineCar("(<Me) ([A-Z])", "\1^s\2", RespectCasseNon, MotCompletNon, CaracGeneriqueOui)
    ' Ajout ins�cable pour "Duc de Xxx"
    Call RpltChaineCar("(<Duc) (de) ([A-Z])", "\1^s\2^s\3", RespectCasseNon, MotCompletNon, CaracGeneriqueOui)
    ' Ajout ins�cable pour "Marquis de Xxx" et contraction pour exposant
    Call RpltChaineCar("(<Marquis) (de) ([A-Z])", "Mis^s\2^s\3", RespectCasseNon, MotCompletNon, CaracGeneriqueOui)
    ' Ajout ins�cable pour "Comte de Xxx" et contraction pour exposant
    Call RpltChaineCar("(<Comte) (de) ([A-Z])", "Cte^s\2^s\3", RespectCasseNon, MotCompletNon, CaracGeneriqueOui)
    ' Ajout ins�cable apr�s "Mar�chal Xxx" et contraction pour exposant
    Call RpltChaineCar("(Mar�chal) ([A-Z])", "Mal^s\2", RespectCasseNon, MotCompletNon, CaracGeneriqueOui)
    ' Ajout ins�cable apr�s "G�n�ral Xxx" et contraction pour exposant
    Call RpltChaineCar("(G�n�ral) ([A-Z])", "Gal^s\2", RespectCasseNon, MotCompletNon, CaracGeneriqueOui)
    ' Ajout ins�cable apr�s "Colonel Xxx" et contraction pour exposant
    Call RpltChaineCar("(Colonel) ([A-Z])", "Cel^s\2", RespectCasseNon, MotCompletNon, CaracGeneriqueOui)
    ' Ajout ins�cable apr�s "Capitaine Xxx" et contraction pour exposant
    Call RpltChaineCar("(Capitaine) ([A-Z])", "Cne^s\2", RespectCasseNon, MotCompletNon, CaracGeneriqueOui)
    '
    'Contraction de certains nombre ordinaux pour exposant
    'Les remplacements suivants utilisent les caract�res g�n�riques
    'Chiffres modernes - Remplacement par contraction
    Call RpltChaineCar("([1])i�res", "\1res", RespectCasseNon, MotCompletNon, CaracGeneriqueOui)
    Call RpltChaineCar("([1])ieres", "\1res", RespectCasseNon, MotCompletNon, CaracGeneriqueOui)
    Call RpltChaineCar("([1])i�re", "\1re", RespectCasseNon, MotCompletNon, CaracGeneriqueOui)
    Call RpltChaineCar("([1])iere", "\1re", RespectCasseNon, MotCompletNon, CaracGeneriqueOui)
    Call RpltChaineCar("([1])�res", "\1res", RespectCasseNon, MotCompletNon, CaracGeneriqueOui)
    Call RpltChaineCar("([1])�re", "\1re", RespectCasseNon, MotCompletNon, CaracGeneriqueOui)
    Call RpltChaineCar("([1])iers", "\1ers", RespectCasseNon, MotCompletNon, CaracGeneriqueOui)
    Call RpltChaineCar("([1])ier", "\1er", RespectCasseNon, MotCompletNon, CaracGeneriqueOui)
    Call RpltChaineCar("([2])ndes", "\1des", RespectCasseNon, MotCompletNon, CaracGeneriqueOui)
    Call RpltChaineCar("([2])nde", "\1de", RespectCasseNon, MotCompletNon, CaracGeneriqueOui)
    Call RpltChaineCar("([2])nds", "\1ds", RespectCasseNon, MotCompletNon, CaracGeneriqueOui)
    Call RpltChaineCar("([2])nd", "\1d", RespectCasseNon, MotCompletNon, CaracGeneriqueOui)
    Call RpltChaineCar("([0-9])i�mes", "\1es", RespectCasseNon, MotCompletNon, CaracGeneriqueOui)
    Call RpltChaineCar("([0-9])�mes", "\1es", RespectCasseNon, MotCompletNon, CaracGeneriqueOui)
    Call RpltChaineCar("([0-9])i�me", "\1e", RespectCasseNon, MotCompletNon, CaracGeneriqueOui)
    Call RpltChaineCar("([0-9])�me", "\1e", RespectCasseNon, MotCompletNon, CaracGeneriqueOui)
    Call RpltChaineCar("([0-9])emes", "\1es", RespectCasseNon, MotCompletNon, CaracGeneriqueOui)
    Call RpltChaineCar("([0-9])eme", "\1e", RespectCasseNon, MotCompletNon, CaracGeneriqueOui)
    'Chiffres romains - Remplacement par contraction
    Call RpltChaineCar("(<[I])i�res", "\1res", RespectCasseNon, MotCompletNon, CaracGeneriqueOui)
    Call RpltChaineCar("(<[I])i�re", "\1re", RespectCasseNon, MotCompletNon, CaracGeneriqueOui)
    Call RpltChaineCar("(<[I])iere", "\1re", RespectCasseNon, MotCompletNon, CaracGeneriqueOui)
    Call RpltChaineCar("(<[I])�res", "\1res", RespectCasseNon, MotCompletNon, CaracGeneriqueOui)
    Call RpltChaineCar("(<[I])�re", "\1re", RespectCasseNon, MotCompletNon, CaracGeneriqueOui)
    Call RpltChaineCar("(<[I])ere", "\1re", RespectCasseNon, MotCompletNon, CaracGeneriqueOui)
    Call RpltChaineCar("(<[I])iers", "\1ers", RespectCasseNon, MotCompletNon, CaracGeneriqueOui)
    Call RpltChaineCar("(<[I])ier", "\1er", RespectCasseNon, MotCompletNon, CaracGeneriqueOui)
    Call RpltChaineCar("(<[IVX]@)iemes", "\1es", RespectCasseNon, MotCompletNon, CaracGeneriqueOui)
    Call RpltChaineCar("(<[IVX]@)i�mes", "\1es", RespectCasseNon, MotCompletNon, CaracGeneriqueOui)
    Call RpltChaineCar("(<[IVX]@)ieme", "\1e", RespectCasseNon, MotCompletNon, CaracGeneriqueOui)
    Call RpltChaineCar("(<[IVX]@)i�me", "\1e", RespectCasseNon, MotCompletNon, CaracGeneriqueOui)
    Call RpltChaineCar("(<[IVX]@)emes", "\1es", RespectCasseNon, MotCompletNon, CaracGeneriqueOui)
    Call RpltChaineCar("(<[IVX]@)�mes", "\1es", RespectCasseNon, MotCompletNon, CaracGeneriqueOui)
    Call RpltChaineCar("(<[IVX]@)eme", "\1e", RespectCasseNon, MotCompletNon, CaracGeneriqueOui)
    Call RpltChaineCar("(<[IVX]@)�me", "\1e", RespectCasseNon, MotCompletNon, CaracGeneriqueOui)

    '
    ' Traitement des exposants identification des exposant par bornage de tags � leurs extr�mit�s
    ' Utilisation de caract�res g�n�riques
    ' Le troisi�me argument seulement peut �tre vide
    Call PrepaExpo("<M", "me>", "")
    Call PrepaExpo("<M", "mes>", "")
    Call PrepaExpo("<M", "lle>", "")
    Call PrepaExpo("<M", "lles", "")
    ' Call PrepaExpo("<M", "r", "^s") ' "Mr." ne doit pas �tre mis en exposant, mais doit �tre remplac� par "M."
    ' Call PrepaExpo("<M", "rs", "^s") ' "Mrs" ne doit pas �tre mis en exposant, mais doit �tre remplac� par "Mme"
    Call PrepaExpo("<M", "gr>", "^s")
    Call PrepaExpo("<M", "grs>", "^s")
    Call PrepaExpo("<M", "e>", "^s") 'Me (Ma�tre)
    Call PrepaExpo("<D", "r", "^s") ' Dr.
    Call PrepaExpo("<M", "is>", "^s") 'Marquis
    Call PrepaExpo("<C", "te>", "^s") 'Comte
    Call PrepaExpo("<M", "al>", "^s") 'Mar�chal
    Call PrepaExpo("<G", "al>", "^s") 'G�n�ral
    Call PrepaExpo("<C", "el>", "^s") 'Colonel
    Call PrepaExpo("<C", "ne>", "^s") 'Capitaine
    Call PrepaExpo("<[I]", "er>", "") '"<[I]" : Commen�ant par "I" - "er>" : Se terminant par "er"
    Call PrepaExpo("<[IVX]@", "e>", "") ' Si�cle - "<[IVX]@" : Commen�ant par l'un de ces trois caract�res - "e>" : Se terminant par "e"
    Call PrepaExpo("<[1]", "er>", "")
    Call PrepaExpo("<[1]", "ers>", "")
    Call PrepaExpo("<[1]", "re>", "")
    Call PrepaExpo("<[1]", "res>", "")
    Call PrepaExpo("<[2]", "d>", "")
    Call PrepaExpo("<[2]", "de>", "")
    Call PrepaExpo("<[2]", "ds>", "")
    Call PrepaExpo("<[2]", "des>", "")
    Call PrepaExpo("[0-9]", "e>", "")
    ' Call PrepaExpo("[0-9]", "�me>", "") 'N'est pas cens� exister, les occurrences "�me>" ayant �t� rempl�c�es par "e>"
    ' Call PrepaExpo("[0-9]", "i�me>", "")'N'est pas cens� exister, les occurrences "i�me>" ayant �t� rempl�c�es par "e>"
    ' Call PrepaExpo("<[1I]", "i�re>", "")'N'est pas cens� exister, les occurrences "i�re>" ayant �t� remplac�es par "re>"
    ' Call PrepaExpo("<[1I]", "i�res>", "") 'N'est pas cens� exister, les occurrences "i�res>" ayant �t� remplac�es par "res>"
    ' On met en exposant tous les tags marqu�s
    DetagagExpo
    End Sub
    Private Sub RpltChaineCar(Cherchee As String, Remplacee As String, RespectCasse As Boolean, MotComplet As Boolean, CaracGenerique As Boolean)
    ' Cette maccro effectue des remplacements sur cha�nes de caract�res
    'Liste des arguments de la macro :
    ' Cherchee pour .Text
    ' Remplacee pour .Replacement.Text
    ' RespectCasse pour .MatchCase
    ' MotComplet pour .MatchWholeWord
    ' CaracGenerique pour .MatchWildcards
    ' Selection.HomeKey Unit:=wdStory
    Selection.Find.ClearFormatting
    Selection.Find.Replacement.ClearFormatting
    With Selection.Find
    .Text = Cherchee
    .Replacement.Text = Remplacee
    .Forward = True
    .Wrap = wdFindContinue
    .Format = False
    .MatchCase = RespectCasse
    .MatchWholeWord = MotComplet
    #If Mac Then
    #Else
    .MatchKashida = False 'Espace kachid� : Concerne l'agencement du texteD�finit le taux d'expansion kachid� pour l'expansion d'espace
    'lors de la justification de lignes de texte dans l'objet. Cette propri�t� est
    'utilis�e pour les syst�mes d'�criture arabe
    'La valeur True si recherche mettent en correspondance le texte des signes kachid�s
    'dans un document en langue arabe. En lecture/�criture bool�en.
    .MatchDiacritics = False 'Si False, ne prend pas en compte les signes diacritiques dans la rechertche.
    'Exemples de signes diacritiques : les accents, le tr�ma et la c�dille
    .MatchAlefHamza = False ' Il semble que cela d�signe des caract�res arabes
    .MatchControl = False
    #End If
    .MatchWildcards = CaracGenerique
    .MatchSoundsLike = False
    .MatchAllWordForms = False
    End With
    Selection.Find.Execute Replace:=wdReplaceAll
    End Sub
    Private Sub PrepaExpo(Prefixe As String, Italique As String, Suffixe As String)
    ' Cette macro marque la chaine de caract�res centrale en exposant (ajout de tag "�TAGUEDEB�" et "�TAGUEFIN�" )
    ' Seul le 3e argument peut �tre vide. Liste des arguments de la macro :
    ' Prefixe
    ' Italique
    ' Suffixe
    '
    Dim vRecherche As String
    Dim vRemplace As String
    '
    If Suffixe <> "" Then
    vRecherche = "(" & Prefixe & ")(" & Italique & ")(" & Suffixe & ")"
    vRemplace = "\1�TAGUEDEB�\2�TAGUEFIN�\3"
    Else
    vRecherche = "(" & Prefixe & ")(" & Italique & ")"
    vRemplace = "\1�TAGUEDEB�\2�TAGUEFIN�"
    End If
    If Italique <> "" Then
    Selection.Find.ClearFormatting
    Selection.Find.Replacement.ClearFormatting
    With Selection.Find
    .Text = vRecherche
    .Replacement.Text = vRemplace
    .Forward = True
    .Wrap = wdFindContinue
    .Format = True
    .MatchCase = True
    .MatchWholeWord = True
    .MatchWildcards = True
    .MatchSoundsLike = False
    .MatchAllWordForms = False
    End With
    Selection.Find.Execute Replace:=wdReplaceAll
    End If
    End Sub
    Private Sub DetagagExpo()
    'Cette macro proc�de au d�tagage des exposants :
    'Retrait des tags � chaque extr�mit�s des exposants
    Selection.Find.ClearFormatting
    Selection.Find.Replacement.ClearFormatting
    With Selection.Find.Replacement.Font
    .Superscript = True
    .Subscript = False
    End With
    With Selection.Find
    .Text = "�TAGUEDEB�(*)�TAGUEFIN�"
    .Replacement.Text = "\1"
    .Forward = True
    .Wrap = wdFindContinue
    .Format = True
    .MatchCase = False
    .MatchWholeWord = False
    .MatchAllWordForms = False
    .MatchSoundsLike = False
    .MatchWildcards = True
    End With
    Selection.Find.Execute Replace:=wdReplaceAll
    End Sub

    Merci par avance de vos commentaires et am�liorations �ventuelles

  6. #6
    Membre � l'essai
    Homme Profil pro
    Charg� de communication print
    Inscrit en
    Novembre 2017
    Messages
    6
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 46
    Localisation : France, Yvelines (�le de France)

    Informations professionnelles :
    Activit� : Charg� de communication print
    Secteur : Communication - M�dias

    Informations forums :
    Inscription : Novembre 2017
    Messages : 6
    Par d�faut Efficace
    OK, je r�pond longtemps apr�s le message post�, mais simplement pour dire que ce code me semble tr�s bien fonctionner.
    Pour l'anecdote, j'ai demand� � deux I.A. diff�rentes de me r�soudre le m�me probl�me (Gemini et ChatGPT) et aucune des deux n'a r�ussi � me fournir une macro fonctionnelle.
    J'ai aussi eu un sourcil hauss� sur quelques abr�viations diff�rentes des usages que je connais, comme 1re l� o� je mets 1�re ou 2d l� o� je mets 2nd.
    Mais votre rigueur surpasse la mienne et j'ai pu constater que l'Acad�mie fran�aise fait bien des recommandations conformes � votre fa�on de faire.
    J'aurais donc appris deux choses aujourd'hui !
    Merci.

Discussions similaires

  1. R�ponses: 2
    Dernier message: 14/09/2006, 14h24
  2. R�ponses: 10
    Dernier message: 02/08/2006, 15h32
  3. Modifier dynamiquement TOUS les URL d'une page
    Par Torpedox dans le forum Langage
    R�ponses: 2
    Dernier message: 06/04/2006, 05h21
  4. R�ponses: 14
    Dernier message: 17/10/2005, 09h41
  5. Ouvrir automatiquement tous les fch. texte d'un repertoire
    Par metalimad dans le forum VB 6 et ant�rieur
    R�ponses: 5
    Dernier message: 18/02/2005, 14h47

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo