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

Word Discussion :

Usage d'un style lié sur une portion de paragraphe


Sujet :

Word

  1. #1
    Membre régulier
    Homme Profil pro
    Manager de projet (retraité)
    Inscrit en
    Juillet 2010
    Messages
    150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Manager de projet (retraité)

    Informations forums :
    Inscription : Juillet 2010
    Messages : 150
    Points : 71
    Points
    71
    Par défaut Usage d'un style lié sur une portion de paragraphe
    Bonjour à tous,
    J'édite en Word (2021) un programme de concert dans lequel je cite, pour chaque morceau, les musiciens qui l'interprètent.
    On peut avoir par exemple la ligne suivante éditée avec un style nommé Musicien :
    "Guitare et chant : Eric Clapton"
    Je voudrais avoir "Guitare et chant" en gras en laissant "Eric Clapton" en épaisseur normale. J'ai pour cela crée un style lié nommé Instrument.

    Quand je sélectionne manuellement "Guitare et chant" et que j'applique le style Instrument ça fait exactement ce qui je veux.
    Mais comme j'ai de nombreuses lignes à traiter, je souhaite le faire en VBA en parcourant les paragraphes du document.
    Pour cela je parcours le document paragraphe par paragraphe en filtrant sur le style "Musicien"

    J'ai écrit la procédure suivante mais j'ai l'erreur de compilation :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Sub AffecterStyleInstrument()
     Dim aPara As Paragraph, intPos As Integer, rngInstrument As Range
     
     For Each aPara In ActiveDocument.Paragraphs
      If aPara.Style = "Musicien" Then
       intPos = InStr(1, aPara.Range.Text, ":")
       Set rngInstrument = aPara.Range(Start:=0, End:=intPos)
      End If
     Next aPara
    End Sub
    "Nombre d'argument incorrect ou affectation de propriété incorrecte"
    Ma question : par quel moyen sélectionner le texte à gauche du ":" pour lui appliquer ensuite le style Instrument ?
    Merci d'avance pour votre aide.

  2. #2
    Membre confirmé
    Homme Profil pro
    Auto entrepreneur
    Inscrit en
    Décembre 2021
    Messages
    352
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Auto entrepreneur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2021
    Messages : 352
    Points : 554
    Points
    554
    Par défaut Utiliser SetRange
    Citation Envoyé par arundel Voir le message
    Bonjour,

    A tester :
    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
    Sub AffecterStyleInstrument()
     
    Dim aPara As Paragraph, intPos As Long
     
        For Each aPara In ActiveDocument.Paragraphs
            With aPara
                If .Style = "Musicien" Then
                   intPos = InStr(1, .Range.Text, ":", vbTextCompare)
                   .Range.Select
                   Selection.SetRange Start:=0, End:=intPos
                   Selection.Style = "Instrument"
                End If
            End With
        Next aPara
     
    End Sub

  3. #3
    Membre régulier
    Homme Profil pro
    Manager de projet (retraité)
    Inscrit en
    Juillet 2010
    Messages
    150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Manager de projet (retraité)

    Informations forums :
    Inscription : Juillet 2010
    Messages : 150
    Points : 71
    Points
    71
    Par défaut
    Merci pour ta réponse rapide.

    Point positif : plus d'erreur de compilation
    Problème résiduel : la sélection (ligne 10) détermine une sous-chaine de la longueur voulue mais qui part du début du document et non du paragraphe courant dans la boucle. En d'autres termes à chaque itération on repart du début du document.
    As-tu une nouvelle idée ?

    Merci d'avance

  4. #4
    Membre confirmé
    Homme Profil pro
    Auto entrepreneur
    Inscrit en
    Décembre 2021
    Messages
    352
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Auto entrepreneur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2021
    Messages : 352
    Points : 554
    Points
    554
    Par défaut
    Testez :

    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
    Sub TesterAffecterStyleInstrument()
     
        ' AffecterStyleInstrument "Titre 2", "Titre"
        AffecterStyleInstrument "Musicien", "Instrument"
     
    End Sub
     
     
     
    Sub AffecterStyleInstrument(ByVal StyleMusicien As String, ByVal StyleInstrument As String)
     
     Dim I As Long, IntPos As Long, CaractereDebut As Long
     Dim MonRange As Range
     
         With ActiveDocument
              For I = 1 To .Paragraphs.Count
                  .Select
                  Set MonRange = Selection.Range
                  With .Paragraphs(I)
                       If .Range.Style = StyleMusicien Then
                          IntPos = InStr(1, .Range.Text, ":", vbTextCompare)
                          .Range.Select
                          Selection.HomeKey unit:=wdStory, Extend:=wdExtend
                          CaractereDebut = Selection.Characters.Count
                          MonRange.SetRange Start:=CaractereDebut, End:=CaractereDebut + IntPos
                          MonRange.Style = StyleInstrument
                       End If
                  End With
               Next I
               Set MonRange = Nothing
        End With
     
    End Sub
    Si problème, mettez en ligne un exemple.

  5. #5
    Membre régulier
    Homme Profil pro
    Manager de projet (retraité)
    Inscrit en
    Juillet 2010
    Messages
    150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Manager de projet (retraité)

    Informations forums :
    Inscription : Juillet 2010
    Messages : 150
    Points : 71
    Points
    71
    Par défaut
    Bravo à toi !

    Petite frayeur au départ car toute la ligne Musicien était passée en gras après application du style "Instrument".
    J'ai alors eu l'idée de réessayer en invoquant le style "Instrument car" et çà marche ! Seule la partie avant les 2 points est en gras, la suite étant non touchée.
    C'était pas évident car le style est bien référencé "Instrument" mais lors d'un essai manuel l'éditeur de macro m'avait généré "Instrument car", ce qui m'avait intrigué.

    Je n'ai rien vu qui signale cette curiosité dans la doc MS ni dans les forums techniques. A mémoriser dans la base de connaissance pour la suite et pour les petits camarades.

    Encore merci.

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

Discussions similaires

  1. [Datatable] Style conditionnel sur une ligne
    Par Hikage dans le forum JSF
    Réponses: 2
    Dernier message: 06/06/2011, 17h28
  2. Style XP sur une fenêtre et bouton 'personnalisé'
    Par Sunchaser dans le forum C++Builder
    Réponses: 3
    Dernier message: 09/07/2007, 23h30
  3. [java.lang.class] Votre avis sur une portion de code
    Par be_tnt dans le forum Langage
    Réponses: 3
    Dernier message: 18/10/2006, 16h55
  4. gestion d'erreur resume next sur une portion de code
    Par aarlock dans le forum Access
    Réponses: 2
    Dernier message: 02/06/2006, 15h28

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