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 :

selection par formatage


Sujet :

VBA Word

  1. #1
    Futur Membre du Club
    Inscrit en
    Avril 2007
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 11
    Points : 5
    Points
    5
    Par défaut selection par formatage
    Bonjour,
    je vous ecris car je n'ai pas trouve la reponse a ma question dans la FAQ.
    Je souhaite faire une macro word afin de formater un document .doc
    Celui est deja formate d'une maniere particuliere (titre en gras, 14 , arial ; nom de l'auteur en italique, 12, arial...) car il est genere par exportation depuis une base de donnees.
    Je voudrais donc recuperer chaque partie formatee d'une maniere particuliere et la formater directement.
    CEpendant, je n'ai pas trouve a quel objet appliquer Selection pour faire cela.

    Un exemple, j'ai 5 titres de films formates de la meme maniere :

    A la place du coeur ; L'argent fait le bonheur
    réalisé par et scénario de et adapté par Robert Guédiguian ; adapté de James Baldwin ; scénario de et adapté par Jean-Louis Milesi ; Arianne Ascaride et Alexandre Ogou et Laure Raoust et Jean-Pierre Darroussin et Jean-Jérôme Esposito , interprète.
    Agat films, 0199.
    Genre : DVDF.


    Je veux 1- selectionner tous les titres formates comme "A la place du coeur ; L'argent fait le bonheur "
    2- Formater cette selection en Noir, gras italique
    3- Pour cette selection apres le point virgule je veux mettre un espace et supprimer le point virgule

    Mon probleme se pose sur , comment faire la selection de la ligne avec un formatage particulier donc (mon petit 1)

    Merci beaucoup d'avance
    Bonne journée

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    171
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2003
    Messages : 171
    Points : 97
    Points
    97
    Par défaut
    voici un bout de code qui devrait te permettrai d'avance

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    dim myselect as string
    Set myRange = ActiveDocument.Range(Start:=0, End:=Selection.End)
    For Each aWord In myRange.Words
        If aWord.Font = "Arial" Then 
    myselect= myselect & aWord 
    else
    'traitement sur ta selection vire la virgule je ne sais quoi et met le formatage
    end if
     
    Next aWord

    ceci est un exemple de code non testé à toi de jouer

  3. #3
    Futur Membre du Club
    Inscrit en
    Avril 2007
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 11
    Points : 5
    Points
    5
    Par défaut
    MErci beaucoup,
    j'etudie ca

  4. #4
    Futur Membre du Club
    Inscrit en
    Avril 2007
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 11
    Points : 5
    Points
    5
    Par défaut
    Rebonjour,

    je me remets dans mes macros, et apprends sur le tas les objets selection etc. J'essaye toujours d'utiliser Visual Basic sous word avec mon probleme du 1er post
    J'ai essayé la bout de code plus haut, proposé par Tazamorte, mais j'ai une erreur pour

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If aWord.Font = "Arial" Then
    Visual BAsic me renvoit
    "L'objet n'admet pas cette méthode ou propriété."
    (j'ai Word 2003 et VB 6.3 1987-2001)
    J'ai donc essayé de trouver des choses sur l'objet 'aWord' mais ma recherche n'a pas été fructueuse. Mon problème c'est donc de sélectioner mot par mot ma selection (Range), pour regarder quelle police est utilisée et l'ajouter à ma sélection si c'est du Arial.

    J'ai essayé une autre technique (avec une boulcle) mais je ne sais pas comment selectionner un seul mot. J'ai pensé à un truc du genre (inspiré de ce qui est mis plus haut), mais qui est faux à cause de ce que je ne sais pas faire:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    dim myselect as string
    Set myRange = ActiveDocument.Range(Start:=0, End:=Selection.End)
    NbMot=myRange.Words.Count
       For i As Integer = 1 To NbMot
               if myRange.Words.style="Arial" then   'c'est là que je ne suis pas du 
                           'tout sur de ne selectionner qu'un seul mot
               myselect= myselect & myRange.Words.style
       Next i
    Merci d'avance pour votre aide,
    bonne journée

  5. #5
    Membre régulier
    Inscrit en
    Février 2007
    Messages
    71
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Février 2007
    Messages : 71
    Points : 76
    Points
    76
    Par défaut
    voilà pour parcourir le document mot par mot

    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
    Sub Macro2()
     
      Dim locIntEnd As Integer
     
      Selection.EndKey wdStory, wdMove  'déplace la sélection à fin du document
      locIntEnd = Selection.Range.End   'position du dernier caractère
      Selection.HomeKey wdStory, wdMove 'déplace la sélection au début du document
     
      Do
          Selection.MoveRight wdWord, 1, wdExtend
    '      Traitement
    '      ...
    '      ...
          Selection.MoveRight wdCharacter, 1, wdMove
      Loop While Selection.Range.End <> locIntEnd
     
    End Sub

  6. #6
    Futur Membre du Club
    Inscrit en
    Avril 2007
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 11
    Points : 5
    Points
    5
    Par défaut
    J'ai bien utilisé tout ce que vous m'avez donné, maintenant mon code ressemble à ca :

    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
    Sub Macro2()
    '
    ' Macro2 Macro
    ' Macro creada el 28/05/2007 por IFM
    '
     
     
    1- Dim locIntEnd As Integer
     
    2- Selection.EndKey wdStory, wdMove 'déplace la sélection à fin du document
    3- locIntEnd = Selection.Range.End 'position du dernier caractère
    4- Selection.HomeKey wdStory, wdMove 'déplace la sélection au début du document
     
    5- Do
    6- Selection.MoveRight wdWord, 1, wdExtend
    7-    Select Case Selection.Font.Color
    8-        Case Black
    9-            If Selection = "/ " Then
    10-                Selection = wdLine
    11-           End If
    12-           Selection.Font.Size = 12
    13-            Selection.Font.Bold = True
    14-            Selection.Font.Italic = True
    15-        Case Blue
    16-            Selection.Font.Size = 11
    17-            Selection.Font.Bold = True
    18-        Case Olive
    19-            Selection.Font.Size = 9
    20-            Selection.Font.Bold = True
    21-            Selection.Font.Bold = False
    22-     End Select
     
    23-Selection.MoveRight wdCharacter, 1, wdMove
    24-Loop While Selection.Range.End <> locIntEnd
     
     
    End Sub
    J'ai malheureusement encore 2 problèmes :
    Tout d'abord ligne 9 et 10
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        If Selection = "/ " Then
                    Selection = wdLine
    donne une boucle infinie , selon les fois sans que j'ai réussi à comprendre la logique. Et je ne suis pas tout à fait sur de mon wdLine (le but c'est de remplacer "/" par un passage à la ligne, et j'ai trouvé wdLine pour passer à la ligne 8j'ai essayé egelement \n sans succès.

    Et ensuite mon code marche sur un petit fichier doc (de 1 ou 2 page) mais quand j'ai un gros fichier (genre un fichier trop grand, de 20 pages). Pour ce problème, je suppose que c'est la méthode mot par mot qui est trop longue, et je ne sais pas s'il y a une solution simple.

    Merci encore d'avance de votre aide,
    a bientot

  7. #7
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    Essaie en ajoutant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    22-     End Select
    22bis   Selection.ExtendMode = False    
    23-Selection.MoveRight wdCharacter, 1, wdMove
    24-Loop While Selection.Range.End <> locIntEnd
    Tu dis
    A+

    Edit
    Je viens de regarder, tu dois ajouter Unit:=1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Selection.MoveEnd Unit:=wdLine, Count:=1
    A+

  8. #8
    Futur Membre du Club
    Inscrit en
    Avril 2007
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 11
    Points : 5
    Points
    5
    Par défaut
    Merci, ouskel'n'ord,

    jai essayé de rajouter ta ligne 22bis, et ce que tu m'avais donné en ligne 10; ce qui donne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     9-  If Selection = "/ " Then
    10-  Selection.MoveEnd Unit:=wdLine, Count:=1

    Ma boucle n'est plus infinie ( ce qui est plutot une bonne nouvelle et m'a grandement réjouit), mais ca ne fait pas ce que je veux ( à savoir supprimer "/" et à la place passer une ligne), Je crois qu'actuellement ca passe juste la ligne à la fin du paragrahe, et ca n'efface pas le slashe.
    Après je dois dire que j'ai de fort doutes sur la justesse de mon qui exprime "si l'bjet sélectionné est egale au caractere "slashe+espace"

    En tous cas merci encore,
    je galère plutot

    Bonne journée
    +++

  9. #9
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    Ok, je n'avais pas tout relu, simplement ton problème de boucle infinie.
    Ce que tu dois faire, c'est sélectionner ce foutu "/" et écrire ""
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Selection.typetext text:="" 
    'ou 
    Selection.typetext text:=vbcr 'si tu veux insérer une ligne
    'ou
    Selection.typeParagraph 'sans doute la syntaxe la plus correcte
    Ceci avant d'aller en fin de ligne.
    Là je n'ai pas le temps de tout relire et te mettre le code complet mais si tu as une dificulté, il y aura bien quelqu'un pour t'aider. Sinon, je reviens
    A+

  10. #10
    Futur Membre du Club
    Inscrit en
    Avril 2007
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 11
    Points : 5
    Points
    5
    Par défaut
    Bon, merci, je suis désolé j'ai l'impression de trébucher à chaque pas. Mon problème aussi c'est que je n'ai pas trouvé de bibliothèque correcte pour les mots (mon aide vb ne marche pas) et du coup j'arrive pas à avoir les propriétés des mots clefs, notament de vbCr ou TypePAragraph.

    Du coup quand je fais ce que tu me dis

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    8-        Case Black
    9-            If Selection = "/ " Then
    10-                Selection.TypeText Text:="" 
    11-           End If
    Tout va bien (sauf qu'il ne me vire pas le "/")

    Et par contre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    8-        Case Black
    9-            If Selection = "/ " Then
    10-                Selection.TypeText Text:=vbCr
     
    ou 10- Selection.TypeParagraph
    11-           End If
    qui fait vraiment ce que je veux (il me passe la ligne, sans me virer le "/"
    je me retrouve encore avec ma boucle infine. Et pourtant j'ai bien mis
    Selection.ExtendMode = False
    à la fin (ligne 22 bis)


    Bon, j'ai encore l'impression de me galérer.
    Merci en tous cas pour toute aide et les aides deja données.

    Bonne journée

  11. #11
    Membre régulier
    Inscrit en
    Février 2007
    Messages
    71
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Février 2007
    Messages : 71
    Points : 76
    Points
    76
    Par défaut
    Est ce que, en debug, tu passes bien dans la condition ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    If Selection = "/ " Then
    'qu'il serait d'ailleurs préférable d'écrire
    If Selection.Range.Text = "/ " Then
    Si tu as une boucle infinie, pourrrais-tu mettre la ligne de ton document ou le mot en particulier qui fait que ça boucle ?

    Ensuite, es-tu sur que ça marche le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Select Case Selection.Font.Color
        Case Black
    Quelle est la valeur de la variable "Black" ?

  12. #12
    Futur Membre du Club
    Inscrit en
    Avril 2007
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 11
    Points : 5
    Points
    5
    Par défaut
    Salut Speedrman,
    merci de m'aider

    je te mets mon code en entier (que j'ai un peu nettoyé)
    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
     
     Dim locIntEnd As Integer
     
     Selection.EndKey wdStory, wdMove 'déplace la sélection à fin du document
    locIntEnd = Selection.Range.End 'position du dernier caractère
    Selection.HomeKey wdStory, wdMove 'déplace la sélection au début du document
     
    'là c'est ma boucle
    Do
    Selection.MoveRight wdWord, 1, wdExtend
        Select Case Selection.Font.Color
            Case wdColorBlack
                If Selection.Range.Text = "/ " Then
                   Selection.TypeParagraph
                End If
                Selection.Font.Size = 12
                Selection.Font.Bold = True
                Selection.Font.Italic = True
            Case wdColorBlue
                Selection.Font.Size = 11
                Selection.Font.Bold = True
            Case wdColorOlive
                Selection.Font.Size = 9
                Selection.Font.Bold = True
                Selection.Font.Bold = False
         End Select
    Selection.ExtendMode = False
    Selection.MoveRight wdCharacter, 1, wdMove
    Loop While Selection.Range.End <> locIntEnd
     
     
    End Sub

    Mes changements de formattage marchent (donc mes selections aussi et mes Case Black, que j'ai changé plus proprement en Case wdColorBlack - ma variable que je teste c'est Selection.Font.Color) et si je ne mets pas mon
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    If Selection.Range.Text = "/ " Then
                   Selection.TypeParagraph
                End If
    je n'ai pas de boucle infinie


    Foilà,
    bonne journée à vous

  13. #13
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    Je viens de remarquer un "truc" : Quand tu mets
    Selection.MoveRight wdWord, 1, wdExtend
    Tu ne sélectionnes qu'un caractère, or tu mets ensuite
    If Selection.Range.Text = "/ " Then
    Déjà, tu pourrais corriger ça.
    Ensuite ? Ben je sais pas
    Je t'envoie déjà ça...

  14. #14
    Futur Membre du Club
    Inscrit en
    Avril 2007
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 11
    Points : 5
    Points
    5
    Par défaut
    Bonjour,

    merci pour la réponse.
    En fait j'ai fait plus simple avec un script que j'ai trouvé. Au lieu de passer mot par mot, je passe tout le texte directement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
     
    Selection.HomeKey unit:=wdStory
    ScreenUpdating = False
    With Selection.Find
        .ClearFormatting
        .Replacement.ClearFormatting
        .MatchWildcards = True
        .Text = " / "
        .Replacement.Text = "^p"
        .Forward = True
        .Execute Replace:=wdReplaceAll
    End With
    En tous cas merci pour les reponses, ca aide vraiment,
    bonne journee

  15. #15
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    Ça, c'est le problème de "Bien exposer son problème"
    Tu aurais mis :
    Comment remplacer "/ " par un saut de ligne dans tout le document"
    tu aurais eu tout de suite autant de réponses que de visiteur -1
    C'est donc Résolu ? Un petit clic sur et on considérera le pb comme résolu

  16. #16
    Futur Membre du Club
    Inscrit en
    Avril 2007
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 11
    Points : 5
    Points
    5
    Par défaut
    oui, merci beaucoup pour l'aide en tous cas.
    Heu, j'ai pas trouvé le bouton résolu, je sais pas si c'est la journée qui est dure

    Bonne journée

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

Discussions similaires

  1. selection par click droit
    Par mecocha dans le forum MFC
    Réponses: 2
    Dernier message: 22/12/2004, 22h35
  2. Selection par clic de souris
    Par bilbonec dans le forum OpenGL
    Réponses: 7
    Dernier message: 16/04/2004, 00h25
  3. Select par mot-clés ou 1er lettre
    Par maadadi dans le forum Langage SQL
    Réponses: 4
    Dernier message: 11/02/2004, 10h50
  4. selection par date
    Par adgabd dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 12/01/2004, 10h28
  5. [TListBox] Selection par défaut
    Par Nuts07 dans le forum Composants VCL
    Réponses: 8
    Dernier message: 12/05/2003, 10h00

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