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 :

[WORD] Remplacer avec changement de mise en forme à l'intérieur


Sujet :

VBA Word

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Août 2002
    Messages
    146
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2002
    Messages : 146
    Points : 76
    Points
    76
    Par défaut [WORD] Remplacer avec changement de mise en forme à l'intérieur
    Bonjour,

    Je n'y connais pas grand chose en Word mais j'aimerais faire la chose suivante (je rame depuis hier et ne trouve pas de solution !!!)

    J'ai une collection d'objets avec diverses propriétés que j'aimerais mettre en forme, en remplacant une balise

    Donc par exemple remplacer <MaBalise> (du texte) par :

    Prop1enGras, Prop2EnItalique, Prop3Normal, Prop4Souligné
    Prop1enGras, Prop2EnItalique, Prop3Normal, Prop4Souligné
    Prop1enGras, Prop2EnItalique, Prop3Normal, Prop4Souligné
    Prop1enGras, Prop2EnItalique, Prop3Normal, Prop4Souligné
    Prop1enGras, Prop2EnItalique, Prop3Normal, Prop4Souligné

    Ici pour une collection de taille 5, mais la taille est bien entendu variable.

    J'ai essayé de jouer avec les propriétés selection ect, mais cela ne fonctionne pas...

    Merci d'avance pour votre aide

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Août 2002
    Messages
    146
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2002
    Messages : 146
    Points : 76
    Points
    76
    Par défaut
    ... bon j'ai trouvé une piste.

    Faire un premier passage dans lequel on inclut les données par remplacement de la balise avec des balises spécifiques pour la mise en forme.

    ex :

    <B>Prop1enGras</B>, <I>Prop2EnItalique</I>, Prop3Normal, <U>Prop4Souligné</U>
    <B>Prop1enGras</B>, <I>Prop2EnItalique</I>, Prop3Normal, <U>Prop4Souligné</U>
    <B>Prop1enGras</B>, <I>Prop2EnItalique</I>, Prop3Normal, <U>Prop4Souligné</U>
    <B>Prop1enGras</B>, <I>Prop2EnItalique</I>, Prop3Normal, <U>Prop4Souligné</U>
    <B>Prop1enGras</B>, <I>Prop2EnItalique</I>, Prop3Normal, <U>Prop4Souligné</U>


    Faire un deuxième passage où l'on met en forme ce qu'il y a à l'intérieur de chacunes de ces balises.

    Je rame (encore ! ) pour ce second passage, j'ai trouvé des exemples grâce à google mais rien n'est vraiment concluant... Si quelqu'un a déjà fait ça ... ?

  3. #3
    Membre expert

    Homme Profil pro
    Spécialiste progiciel
    Inscrit en
    Février 2010
    Messages
    1 747
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Haute Loire (Auvergne)

    Informations professionnelles :
    Activité : Spécialiste progiciel
    Secteur : Service public

    Informations forums :
    Inscription : Février 2010
    Messages : 1 747
    Points : 3 016
    Points
    3 016
    Par défaut
    Bonjour,

    Il suffit de faire une recherche un peu spéciale avec utilisation des caractères génériques.
    rechercher \<B\>(*)\</B\> Le problème est de considérer les caractères < et > comme des simples caractères et pas des débuts et fin de mots d'où l'ajout de \ devant chacun.
    Ensuite il suffit dans la zone remplacer de définir le format qui va bien, ici du gras puis \1 dans la zone de recherche qui veut dire le premier élément de la zone rechercher encomptant que ceux entre parenthèses.

    Tu enregistres une macro avec ces paramètres et tu verras l'utilisation de la méthode find. Il ne te restera plus qu'à adapter ton problème aux autres balises.

  4. #4
    Rédacteur/Modérateur

    Avatar de Heureux-oli
    Homme Profil pro
    Contrôleur d'industrie
    Inscrit en
    Février 2006
    Messages
    21 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

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

    Informations forums :
    Inscription : Février 2006
    Messages : 21 087
    Points : 42 926
    Points
    42 926
    Par défaut
    Salut,

    Peut-être une piste un peu différente.

    Si toutes lesvaleurs sont séparées par une ponctuation, transformer le tout en tableau et on applique ce que l'on veut à chaque colonne.


    On peut faire l'opération dans l'autre sens ensuite.

    Le tout sans VBA.

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Août 2002
    Messages
    146
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2002
    Messages : 146
    Points : 76
    Points
    76
    Par défaut
    Merci à vous, j'ai résolu le problème.

    A vrai dire, j'ai plutôt utilisé la solution avec les balises car il pourrait y avoir de la ponctuation dans les chaînes.

    J'utilise des balises faites uniquement avec des caractères simples (lettres) pour éviter les problèmes de wildcards et autres caractères spéciaux.

    Donc, en premier lieu : je remplace la balise par des données séparées par des balises personnalisées, puis je mets en forme le texte entre ces balises.

    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
    '1 - Les balises BOLDXXX et XXXBOLD permettent de mettre "Name" en gras
    For i = 0 To MyColl.Count - 1
        buf = buf & "- BOLDXXX" & MyColl.Items(i).Name & ": XXXBOLD" & (MyColl.Items(i).ID)
    Next i
     
    '2 - Remplacement des balises de mise en forme et application du style
    Selection.HomeKey Unit:=wdStory
    ScreenUpdating = False
    With Selection.Find
        .ClearFormatting
        .Replacement.ClearFormatting
        .Replacement.Font.Italic = False
        .Replacement.Font.Bold = True
        .MatchWildcards = True
        .Text = "BOLDXXX(*)XXXBOLD"
        .Replacement.Text = "\1"
        .Forward = True
        .Execute Replace:=wdReplaceAll
    End With

  6. #6
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Août 2005
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 31
    Points : 24
    Points
    24
    Par défaut
    bonjour

    voici une autre solution en macro pour modifier la mise en forme du texte entre des caractères particuliers < ou [ ou autres...
    (ici on ne joue que sur la mise en forme et pas le contenu : la macro passe le texte en rouge et en gras)

    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
    Sub mise_en_forme_entre_crochets()
    Selection.HomeKey unit:=wdStory
    ScreenUpdating = False
    With Selection.Find
        .ClearFormatting
        .MatchWildcards = True
        .Text = "(\^091*\^093)"
        With .Replacement
                .ClearFormatting
               '.Font.Italic = True
                .Font.ColorIndex = wdRed 'wdGreen
                .Font.Bold = True
                .Text = "\1"
         End With
        .Forward = True
        .Execute Replace:=wdReplaceAll
    End With
    End Sub
    on sélectionne le texte avec l'étoile * entre les deux caractères de délimitation tapés en code ASCII
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        .Text = "(\^091*\^093)"
    le ^091 est le code ascii du crochet ouvrant [
    le ^093 est le code ascii du crochet fermant ]
    le \ avant est utilisé pour ne pas interpréter le crochet (qui est un caractère wildcard)

    pour des séparateurs guillemets ^034 " il n'est pas nécessaire d'ajouter l'antislash \ avant
    et on remplace le texte recherché par lui-même
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        .Replacement.Text = "\1"
    et voilà...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [OL-2007] HTMLBody avec Range et mise en forme
    Par VEFrancis dans le forum VBA Outlook
    Réponses: 1
    Dernier message: 19/11/2013, 14h04
  2. [PHP 5.2] remplacer du texte après mise en forme
    Par mehdi1968 dans le forum Langage
    Réponses: 15
    Dernier message: 10/05/2012, 21h40
  3. Merge doc word (2007) en gardant la mise en forme
    Par Overcrash dans le forum C#
    Réponses: 1
    Dernier message: 14/04/2011, 10h29
  4. Changement de mise en forme liée
    Par senacle dans le forum Excel
    Réponses: 12
    Dernier message: 24/07/2007, 17h16

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