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 :

VBA Word - Copier texte et police dans 1 signet - Copier une table d'un doc word à la fin d'un autre [WD-2010]


Sujet :

VBA Word

  1. #1
    Nouveau membre du Club
    Femme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Février 2016
    Messages
    66
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Février 2016
    Messages : 66
    Points : 31
    Points
    31
    Par défaut VBA Word - Copier texte et police dans 1 signet - Copier une table d'un doc word à la fin d'un autre
    Bonjour,

    J’ai besoin de compléter 600 documents par un texte et plusieurs tables.
    Le texte et les tables sont contenus dans un document source (DocSource)

    J’ai des difficultés à automatiser la copie de ces éléments à la fin des documents à modifier (DocEnCours).

    Pouvez-vous me venir en aide ?
    (Eric (Kergresse), si tu passes par-là, … c’est la suite du projet de la discussion initiée le 13/06/2018 « VBA – Word 2010 – Copier un tableau d’un document Word dans l’en-tête d’un autre document Word »)

    Voici les méthodes essayées (les questions sont à la fin de ce message) :
    1ère étape = « AjouterLesSignets »
    Une Sub ajoute des signets dans le DocEnCours pour marquer 2 emplacements :
    - L’emplacement d’un texte (paragraphe « Documents de référence »)
    - L’emplacement d’une table (Table d’historique de révision)

    2ème étape :
    2 sub ont pour objectif d’ajouter aux signets du DocEnCours les éléments suivants :
    - le texte contenu dans un signet du DocSource (signet « DocRefEnCours ») : Sub « AjouterTexteSignet » 
    --> Question 1
    - la 2eme table du DocSource : Sub « AjouterTableauSignet » 
    --> Question 2

    Alternative à la Sub « AjouterTableauSignet » : copier/coller la table de DocSource sans signet
    Sub « CopierTableauSource »
    --> Question 3

    Question 1 / AjouterTexteSignet :
    Le texte est correctement copié, mais pas les polices de caractère.
    Comment conserver les polices de caractère du signet d’origine

    Question 2 / AjouterTableauSignet :
    Génère une Erreur de Compilation - Membre de méthode ou de donnée introuvable
    (Je vois bien que le contenu du Bookmark est un texte alors que la table est une table...mais n'ai pas trouvé la solution)
    Comment copier une table à l’emplacement d’un signet (si toutefois possible)?

    Question 3 / CopierTableauSource :
    La macro ne génère pas d'erreur, mais ne colle pas la table 2 du DocSource à la fin du fichier DocEnCours.
    (Un collage mannuel dans le Document fini avec le raccourci clavier "CtrlV", copie la Table 2 en début de document
    Comment copier une Table d’un document Word à la fin d’un autre ?

    Merci d’avance pour votre aide,
    Je joins les codes .
    Cordialement,
    Marie-Noëlle

    Sub AjouterLesSignets
    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
     
    Sub AjouterLesSignets(ByVal DocEnCours7 As Document)
     
            Dim MonSignetRange As Range
            Dim MonSignetNom As String
     
     
            With DocEnCours7
     
                'Emplacement du paragraphe 3document de referencres"
                Selection.EndKey Unit:=wdStory  'Pour aller à la fin du document
                Set MonSignetRange = Selection.Range
                MonSignetNom = "DocRefEnCours"
                .Bookmarks.Add Name:=MonSignetNom, Range:=MonSignetRange
     
                'Emplacement de la Table d'historique de révision"
                Selection.EndKey Unit:=wdStory  'Pour aller à la fin du document
                Set MonSignetRange = Selection.Range
                MonSignetNom = "HistoriqueRev"
                .Bookmarks.Add Name:=MonSignetNom, Range:=MonSignetRange
     
            End With
     
            Set MonSignetRange = Nothing
     
    End Sub
    Sub AjouterTexteSignet
    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 AjouterTexteSignet(ByVal DocEnCours8 As Document, ByVal DocSource8 As Document)
     
            Dim TexteSignet As String
     
            With DocSource8
                TexteSignet = .Bookmarks("DocRefSource").Range.Text
     
                With DocEnCours8
                    .Bookmarks("DocRefEnCours").Range.Text = TexteSignet
                End With
     
            End With
            'il faut encore remettre en forme la police copiée
     
    End Sub
    Sub AjouterTableauSignet
    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 AjouterTableauSignet(ByVal DocSource9 As Document, ByVal DocEnCours9 As Document)
     
     
        If DocSource9.Tables.Count > 0 Then
     
             Set MaTable = DocSource9.Range.Tables(2)
     
                With DocEnCours9
                    .Bookmarks("HistoriqueRev").Range.Texte = MaTable 'Erreur de Compilation - Membre de méthode ou de donnée introuvable
                End With
     
        End If
     
     
    End Sub
    Sub CopierTableauSource
    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 CopierTableauSource(ByVal DocSource10 As Document, ByVal DocEnCours10 As Document)
     
     
     If DocSource10.Tables.Count > 0 Then
     
            DocSource10.Sections(1).Range.Tables(2).Select
            Selection.Copy
     
            With DocEnCours10.Sections(1)
                Selection.EndKey Unit:=wdStory 'ne va pas à la fin du document
                Selection.Paste                'ne copie pas (CtrlV à la main --> le tableau 2 est copié en début du document)
            End With
     
     
     
    End If
    End Sub

  2. #2
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Marino69 Voir le message
    Bonjour,

    Réponses aux points 2 et 3 :
    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
     
     
    Sub AjouterTableauSignet(ByVal DocSource9 As Document, ByVal DocEnCours9 As Document)
     
    Dim MaTable As Table
     
        If DocSource9.Tables.Count > 0 Then
     
           Set MaTable = DocSource9.Range.Tables(2)
           MaTable.Range.Copy
           DocEnCours9.Bookmarks("HistoriqueRev").Range.Paste
     
        End If
     
     
    End Sub
     
     
    Sub CopierTableauSource(ByVal DocSource10 As Document, ByVal DocEnCours10 As Document)
     
    Dim MaTable As Table
     
         If DocSource10.Tables.Count > 0 Then
     
            Set MaTable = DocSource10.Sections(1).Range.Tables(2)
            MaTable.Range.Copy
     
            With DocEnCours10.Sections(1)
                 .Range.Select
                 Selection.EndKey Unit:=wdStory, Extend:=wdMove 'ne va pas à la fin du document
                 Selection.Paste                'ne copie pas (CtrlV à la main --> le tableau 2 est copié en début du document)
            End With
     
        End If
     
    End Sub
    Quant au point 1, il te faut appliquer un style à ton objet Range. A toi de le définir dans ta liste des styles.

  3. #3
    Nouveau membre du Club
    Femme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Février 2016
    Messages
    66
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Février 2016
    Messages : 66
    Points : 31
    Points
    31
    Par défaut
    Bonjour Eric,

    Merci encore !
    Grace à ton aide il m'a fallut 5 minutes pour réparer l'ajout de table au signet.

    En revanche ... pas encore autonome pour modifier la police du signet Texte : toute la journée à scruter les forum pour trouver comment créer un style.
    Mais pour son application au signet je n'ai pas trouvé comment faire : la macro s'arrête à cette étape!

    Voilà mon code maladroit, pourrais tu m'indiquer la formule magique ?

    Encore merci
    Marino


    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
     
    Sub AjouterTexteSignet(ByVal DocEnCours8 As Document, ByVal DocSource8 As Document)
     
            Dim TexteSignet As String
            Dim StyleTitreSignet As Style
     
           'Création d'un style
            DocSource8.Styles.Add ("StyleTitreSignet")
            With DocSource8.Styles("StyleTitreSignet").Font
                .Bold = True
                .Italic = False
                .ColorIndex = wdBlack
                .Name = "Arial"
                .Size = 12
            End With
     
           'Copie du texte du signet DocRefSource vers le signet DocRefEnCours
            With DocSource8
                TexteSignet = .Bookmarks("DocRefSource").Range.Text
     
                With DocEnCours8
                    .Bookmarks("DocRefEnCours").Range.Text = TexteSignet                    'la sub s'arrête à cette étape
     
                    'Pour appliquer le style au paragraph 1 du signet
                    .Bookmarks("DocRefEnCours").Range.Paragraphs(1).Style = StyleTitreSignet
                End With
     
            End With
     
    End Sub

  4. #4
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Marino69 Voir le message
    Bonjour,

    A adapter :
    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
     
    Option Explicit
     
    Sub ModifierLeStyleDUnSignet(ByVal SignetAModifier As String, ByVal StyleDuSignet As String)
     
     
        With Selection
             .GoTo What:=wdGoToBookmark, Name:=SignetAModifier
             .Style = ActiveDocument.Styles(StyleDuSignet)
        End With
     
    End Sub
     
    Sub TestModifierLeStyleDUnSignet()
     
        ModifierLeStyleDUnSignet "Signet1", "Emphase pâle"
     
    End Sub

  5. #5
    Nouveau membre du Club
    Femme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Février 2016
    Messages
    66
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Février 2016
    Messages : 66
    Points : 31
    Points
    31
    Par défaut
    Bonjour Eric,

    Merci pour cette orientation !
    Cependant, je n'arrive pas à mettre en œuvre la procédure proposée.

    J'ai installé son code dans le module des fonctions
    et déclarées en variables publiques :
    Public DocEnCours As Document, DocSource As Document
    Public DocRefEnCours As String (=Signet du DocEnCours à modifier)
    Public SignetAModifier As String
    Public StyleDuSignet As String

    J'appelle 3 sub succesivement :
    1 - AjouterTexteSignet DocEnCours, DocSource ( --> l'exécution de la séquence s'arrête là)
    2 - CreerStyleSignet DocEnCours
    3 - ModifierStyleTitreSignetDocRefEnCours SignetAModifier, StyleDuSignet

    La première ajoute correctement le texte dans le signet DocRefEncours
    La deuxième à pour objectif de créer un style (je ne sais pas si ça marche car je n'ai pas réussi à faire fonctionner la 3 ème)
    La troisième doit modifier le style du signet DocRefEncours avec le style créé précédemment. Elle fait appelle la sub "ModifierLeStyleDunSignet" installée dans le module function

    Le problème est le suivant (je pense ?)
    La sub "ModifierLeStyleDunSignet" commence par "With Selection" et je n'arrive pas à indiquer correctement la sélection en question.

    Pourrais-tu m'aiguiller concernant "sélection"?
    et Est-ce que ce que j'ai fait tiens la route (le reste) ?

    Remerciements chaleureux !
    Marino






    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
     
    Sub AjouterTexteSignet(ByVal DocEnCours8 As Document, ByVal DocSource8 As Document)
     
            Dim TexteSignet As String
     
           'Copie du texte du signet DocRefSource vers le signet DocRefEnCours
            With DocSource8
                TexteSignet = .Bookmarks("DocRefSource").Range.Text
     
                With DocEnCours8
                    .Bookmarks("DocRefEnCours").Range.Text = TexteSignet
     
                End With
     
            End With
     
    End Sub
     
    Sub CreerStyleSignet(ByVal DocEnCoursX As Document)
        'Création d'un style pour le DocEnCours : StyleTitreSignetdéclarée en variable publique
     
            DocEnCoursX.Styles.Add ("StyleTitreSignet")
            With DocEnCoursX.Styles("StyleTitreSignet").Font
               .Bold = True
               .Italic = False
               .ColorIndex = wdBlack
               .Name = "Arial"
               .Size = 12
            End With
     
    End Sub
     
    Sub ModifierStyleTitreSignetDocRefEnCours(ByVal SignetAModifier1 As String, ByVal StyleDuSignet1 As String)
     
      'Déclarées en variables Public :
      'Public DocRefEnCours As String (=Signet du DocEnCours à modifier)
      'Public SignetAModifier As String
      'Public StyleDuSignet As String
     
     
        With DocEnCours
            SignetAModifier1 = DocRefEnCours
            StyleDuSignet1 = ("StyleTitreSignet")
     
            Set DocEnCours = Selection
            ModifierLeStyleDunSignet SignetAModifier1, StyleDuSignet1
        End With
     
        'Installé dans le Module 2 Function :
        'Sub ModifierLeStyleDunSignet(ByVal SignetAModifier As String, ByVal StyleDuSignet As String)
          'With Selection
             '.GoTo What:=wdGoToBookmark, Name:=SignetAModifier
             '.Style = ActiveDocument.Styles(StyleDuSignet)
          'End With
        'End Sub
     
     
    End Sub

  6. #6
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Marino69 Voir le message
    Bonjour Marino,

    Pourquoi essaies-tu de créer un style propre à ton signet via VBA ? Il te suffit d'en créer un définitivement dans ton Normal.dot et de l'utiliser le moment voulu.
    Dans mon exemple, j'ai pris un style existant dans ma liste. Chez toi, tu en prends un qui ne sert jamais et tu le modifies ou tu en crées un de toute pièce.

  7. #7
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Marino69 Voir le message

    Création d'un style pour le signet dans le document en cours :
    Nb : Si tu avais été voir l'aide Word pour Style.add, tu aurais vu qu'il y a deux paramètres obligatoires (le nom et le niveau). Dans le principe pour modifier ou pour ajouter, il te faut vérifier l'existence de l'objet. C'est valable pour les styles, les signets....

    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
     
    Sub CreerStyleSignet(ByVal DocEnCoursX As Document)
     
    Dim MonStyle As Style
    Dim CtrI As Integer
     
        On Error GoTo Fin
     
        With DocEnCoursX
             For CtrI = 1 To .Styles.Count
                 If .Styles(CtrI).NameLocal = "StyleTitreSignet" Then
                    'MsgBox "Ce style existe déjà !", vbCritical
                    GoTo Fin
                 End If
     
             Next CtrI
     
            Set MonStyle = .Styles.Add("StyleTitreSignet", 2)
            With MonStyle.Font
               .Bold = True
               .Italic = False
               .ColorIndex = wdBlack
               .Name = "Arial"
               .Size = 12
            End With
     
        End With
     
        GoTo Fin
     
    Fin:
     
    Set MonStyle = Nothing
     
    End Sub
     
    Sub TestCreerStyleSignet()
     
        CreerStyleSignet ActiveDocument
     
    End Sub
    Modification du style du signet :
    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
     
    Sub ModifierStyleTitreSignetDocEnCours(ByVal DocEnCours1 As Document, ByVal SignetAModifier1 As String, ByVal StyleDuSignet1 As String)
     
    Dim MonBookmark As Bookmark
    Dim MonStyle As Style
    Dim CtrI As Integer
    Dim Continuer As Boolean
     
        On Error GoTo Fin
     
        With DocEnCours1
     
             Continuer = False
             For CtrI = 1 To .Styles.Count
                 If .Styles(CtrI).NameLocal = StyleDuSignet1 Then
                     Continuer = True
                     Set MonStyle = .Styles(CtrI)
                 End If
             Next CtrI
     
             If Continuer = False Then
               MsgBox "Ce style n'existe pas !", vbCritical
               GoTo Fin
             End If
     
             For Each MonBookmark In .Bookmarks
                 With MonBookmark
                      If .Name = SignetAModifier1 Then .Range.Style = MonStyle
                 End With
             Next MonBookmark
     
        End With
     
        GoTo Fin
     
    Fin:
     
        Set MonStyle = Nothing
     
    End Sub
     
     
    Sub TestModifierStyleTitreSignetDocEnCours()
     
      ModifierStyleTitreSignetDocEnCours ActiveDocument, "Signet1", "StyleTitreSignet"
     
    End Sub

  8. #8
    Nouveau membre du Club
    Femme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Février 2016
    Messages
    66
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Février 2016
    Messages : 66
    Points : 31
    Points
    31
    Par défaut
    Bonjour Eric,

    1ere tentative :
    Ma première tentative a bien été de créer « StyleFH », dans ma liste de styles,
    d’installer Sub « ModifierLeStyleDUnSignet » telle que proposée dans ta réponse précédente
    et de l’appeler avec :
    ModifierLeStyleDUnSignet "DocRefEnCours", "StyleFH"
    Résultat : La Sub s’arrête à la sélection du signet et ne transforme aucune police.
    Du coup,
    j’ai cru qu’il fallait créer le style par macro
    et je me demandais aussi comment les titres pouvait être distingués du reste

    Voici le code installé pour cette première tentative:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Sub ModifierLeStyleDUnSignet(ByVal SignetAModifier As String, ByVal StyleDuSignet As String)
     
        With Selection
             .GoTo What:=wdGoToBookmark, Name:=SignetAModifier
             .Style = ActiveDocument.Styles(StyleDuSignet)
        End With
     
    End Sub
    2eme tentative (Merci pour tes corrections de mes créations maladroites!)
    Précision : je cherche à mettre au format du style les 2 titres contenus dans le signet (soit, les lignes 1 et 4 du signet)

    J’ai complété la Sub CreerStyleSignet et installé ModifierStyleTitreSignetDocEnCours.
    Résultat : Il n’y a pas eu de modification de la police du signet.

    J’obtiens la modification de police attendue pour le pragraphe 1 du signet, en remplaçant dans la sub ModifierStyleTitreSignetDocEnCours:
    If .Name = SignetAModifier1 Then .Range.Style = MonStyle
    Par :
    If .Name = SignetAModifier1 Then
    .Range.Paragraphs(1).Range.Style = MonStyle

    Pour obtenir le changement de police du paragraphe 4 j’ai ajouté à la suite, la même formulation :
    .Range.Paragraphs(4).Range.Style = MonStyle
    Mais là comportement différent : il n'y a pas de modification de police du paragraphe 4

    IL semble qu’il ne trouve pas le paragraphe 4,
    Le texte du signet comporte pourtant bien 4 « retours chariot »


    Mes 2 questions sont :
    - Comment faire simplement pour aller au paragraphe 4 du signet et lui appliquer le style ?
    - Comment faire marcher la 1ere tentative qui me semble plus simple (si toutefois elle sait reconnaitre les titres)
    + une 3eme : je n'ai pas trouvé l'aide Word pour Style.add, et ses deux paramètres obligatoires (le nom et le niveau) aurais-tu un lien ?


    Voici les codes tels que saisis pour la tentative 2
    Les 2 Sub sont appelées comme suit :
    CreerStyleSignet ActiveDocument (je suppose que je pourrai remplacer ActiveDocument par DocEnCours)
    ModifierStyleTitreSignetDocEnCours ActiveDocument, "DocRefEnCours", "StyleTitreSignet" (je suppose que je pourrai remplacer ActiveDocument par DocEnCours)

    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
     
    Sub CreerStyleSignet(ByVal DocEnCoursX As Document)
     
    Dim MonStyle As Style
    Dim CtrI As Integer
     
        On Error GoTo Fin
     
        With DocEnCoursX
             For CtrI = 1 To .Styles.Count
                 If .Styles(CtrI).NameLocal = "StyleTitreSignet" Then
                    'MsgBox "Ce style existe déjà !", vbCritical
                    GoTo Fin
                 End If
     
             Next CtrI
     
            Set MonStyle = .Styles.Add("StyleTitreSignet", 2)
            With MonStyle.Font
               .Bold = True
               .Italic = False
               .ColorIndex = wdBlack
               .Name = "Arial"
               .Size = 12
            End With
     
        End With
     
        GoTo Fin
     
    Fin:
     
    Set MonStyle = Nothing
     
    End Sub
     
    'Sub ModifierStyleTitreSignetDocEnCours(ByVal DocEnCoursY As Document, ByVal SignetAModifier1 As String, ByVal StyleDuSignet1 As String)
     
    'Dim MonBookmark As Bookmark : déclarée en variable public
    'Dim MonStyle As Style : déclarée en variable public
    Dim CtrI As Integer
    Dim Continuer As Boolean
    NoLigneActive As Integer
     
     
        On Error GoTo Fin
     
        With DocEnCoursY
     
             Continuer = False
             For CtrI = 1 To .Styles.Count
                 If .Styles(CtrI).NameLocal = StyleDuSignet1 Then
                     Continuer = True
                     Set MonStyle = .Styles(CtrI)
                 End If
             Next CtrI
     
             If Continuer = False Then
               MsgBox "Ce style n'existe pas !", vbCritical
               GoTo Fin
             End If
     
             For Each MonBookmark In .Bookmarks
                 With MonBookmark
                      If .Name = SignetAModifier1 Then
                        .Range.Paragraphs(1).Range.Style = MonStyle           'partie modifiée pour obtenir le changement de police du 1er paragraphe
     
                        'Essai pour modifier la police du paragraphe 4
                        '.Range.Paragraphs(4).Range.Style = MonStyle          'Ne modifie pas le paragraphe 4, même si je place cette ligne de code en premier
     
     
                        End If
                 End With
             Next MonBookmark
     
        End With
     
        GoTo Fin
     
    Fin:
     
        Set MonStyle = Nothing
     
    End Sub
    Merci pour ta très grande patience.
    Je nage ...mais je m'accroche!

    Cordialement,
    Marino

  9. #9
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Marino69 Voir le message
    Bonjour,

    Comme je ne connais pas tout, regarde comment j'ai fait. Les signets, les styles, les paragraphes sont des collections. Ce qui au moins est simple, c'est que celles ont un nombre fini d'éléments pour un document. Il te suffit donc de tester si ce que tu recherches existe bien.

    1- Recherche du signet à modifier
    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
     
    Sub SelectionnerChaqueLigneDUnSignet(ByVal DocEnCours1 As Document, ByVal MonSignet As Bookmark)
     
    Dim SignetEncours As Bookmark
     
        With DocEnCours1
             For Each SignetEncours In .Bookmarks
                 If SignetEncours = MonSignet Then
                    MsgBox MonSignet.Name
                 End If
             Next SignetEncours
        End With
     
    End Sub
     
     
    Sub TestSelectionnerChaqueLigneDUnSignet()
     
        SelectionnerChaqueLigneDUnSignet ActiveDocument, ActiveDocument.Bookmarks("Signet3")
     
    End Sub
    2 Recherche du nombre de paragraphes du signet
    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
     
    Sub SelectionnerChaqueLigneDUnSignet1(ByVal DocEnCours1 As Document, ByVal MonSignet As Bookmark)
     
    Dim SignetEncours As Bookmark
     
        With DocEnCours1
             For Each SignetEncours In .Bookmarks
                 If SignetEncours = MonSignet Then
                    MsgBox MonSignet.Range.Paragraphs.Count
                 End If
             Next SignetEncours
        End With
     
    End Sub
     
     
    Sub TestSelectionnerChaqueLigneDUnSignet1()
     
        SelectionnerChaqueLigneDUnSignet1 ActiveDocument, ActiveDocument.Bookmarks("Signet3")
     
    End Sub
    3 Recherche du texte du paragraphe 4
    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
     
    Sub SelectionnerChaqueLigneDUnSignet2(ByVal DocEnCours1 As Document, ByVal MonSignet As Bookmark)
     
    Dim SignetEncours As Bookmark
     
        With DocEnCours1
             For Each SignetEncours In .Bookmarks
                 If SignetEncours = MonSignet Then
                    If MonSignet.Range.Paragraphs.Count > 3 Then
                    MsgBox MonSignet.Range.Paragraphs(4).Range.Text
                    End If
                 End If
             Next SignetEncours
        End With
     
    End Sub
     
     
    Sub TestSelectionnerChaqueLigneDUnSignet2()
     
        SelectionnerChaqueLigneDUnSignet2 ActiveDocument, ActiveDocument.Bookmarks("Signet3")
     
    End Sub
    ' Mise en forme des paragraphes 1 et 4 du signet
    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
     
    Sub SelectionnerChaqueLigneDUnSignet3(ByVal DocEnCours1 As Document, ByVal MonSignet As Bookmark, ByVal StyleAAppliquer As Style)
     
    Dim SignetEncours As Bookmark
     
        With DocEnCours1
             For Each SignetEncours In .Bookmarks
                 If SignetEncours = MonSignet Then
                    If MonSignet.Range.Paragraphs.Count > 3 Then
                       With MonSignet.Range
                            .Paragraphs(1).Range.Style = StyleAAppliquer
                            .Paragraphs(4).Range.Style = StyleAAppliquer
                       End With
                    End If
                 End If
             Next SignetEncours
        End With
     
    End Sub
     
     
    Sub TestSelectionnerChaqueLigneDUnSignet3()
     
        SelectionnerChaqueLigneDUnSignet3 ActiveDocument, ActiveDocument.Bookmarks("Signet3"), ActiveDocument.Styles("StyleTitreSignet")
     
    End Sub


    Pièce jointe 396754

  10. #10
    Nouveau membre du Club
    Femme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Février 2016
    Messages
    66
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Février 2016
    Messages : 66
    Points : 31
    Points
    31
    Par défaut
    Bonjour Eric,

    Grace aux différentes procédures que tu m'as soufflées, j'ai pu confirmer que mon signet n'avait pas de paragraphe 4 (ni de 2 ou 3):
    - avec la condition If MonSignet.Range.Paragraphs.Count > 3 : aucune mise en forme n'était appliquée
    - et sans cette condition la mise en forme était appliquée au titre du paragraphe 1 seulement

    J'ai du ajouter la fonction "Ajouter Texte Signet" pour que le texte soit dans le range du signet (copiée du tutoriel "débutez en VBA Word du Club des Developpeurs")
    Dans ces conditions la Sub SelectionnerChaqueLigneDUnSignet a bien trouvé et modifié les titres des paragraphes 1 et 4.

    Moralité, si j'ai bien compris : par défaut, le texte des signets se rapproche plus d'une "étiquette" que d'un contenu. Il faut donc "encapsuler ce texte" dans le signet pour qu'il devienne vraiment une plage de texte.
    Je les trouve bien taquins ces signets ! !

    Et bien je vais clore cette discussion avec une fois encore tous mes remerciements.
    J'ai envie de mettre plein de pouces aux solutions proposées, mais je crois qu'on ne peut un mettre qu'un à la fois : dommage !

    J'ai encore quelques points à traiter pour ce projet : je vais donc continuer à ronger mon os.

    Bien cordialement,
    Marino


    Voilà la successions des étapes et le code, pour récapituler cette histoire de signets coquins:
    Sub AjouterLesSignets DocEnCours
    Function AjouterTexteSignet(ByVal DocSource, ByVal DocEnCours, ByVal MonSignet As Bookmark, ByVal TexteSignet As String)
    Sub CreerStyleSignet(ByVal DocEnCours As Document)
    Sub SelectionnerChaqueLigneDUnSignet(ByVal DocEnCours As Document, ByVal MonSignet As Bookmark, ByVal StyleAAppliquer As Style) : Pour appliquer le style aux lignes selectionnées



    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
    116
    117
    118
    119
    120
    121
    122
     
    Sub AjouterLesSignets(ByVal DocEnCours As Document)
    'Pour ajouter les points d'insertions des textes et table à copier
     
            Dim MonSignetRange As Range
            Dim MonSignetNom As String
     
     
            With DocEnCours
     
                'Emplacement du Texte du paragraphe "Documents de referencre"
                Selection.EndKey Unit:=wdStory                                 'Pour aller à la fin du document
                Set MonSignetRange = Selection.Range
                MonSignetNom = "DocRefEnCours"
                .Bookmarks.Add Name:=MonSignetNom, Range:=MonSignetRange
                Selection.EndKey Unit:=wdStory                                 'Pour aller à la fin du document
                Selection.Range.InsertParagraphAfter                          ' et ajouter un retour chariot pour que la souris sorte du paragraphe
     
            End With
     
            Set MonSignetRange = Nothing
     
    End Sub
     
    Function AjouterTexteSignet(ByVal DocSource, ByVal DocEnCours, ByVal MonSignet As Bookmark, ByVal TexteSignet As String)
    'Pour que le texte soit dans le "range" du signet
     
            Dim intI As Long                             'Le début su Signet
            Dim MonSignetNom As String          'Le nom du Signet
            Dim MonSignetRange As Range        'Le range du Signet
            'Dim TexteSignet As String               'Placé en variable public
     
            'Copier le texte du signet DocRefSource vers le signet DocRefEnCours
            With DocSource
                TexteSignet = .Bookmarks("DocRefSource").Range.Text
     
                With DocEnCours
                    MonSignetNom = MonSignet.Name        'Récupération du nom du signet
                    intI = MonSignet.Start                          'Récupération de la position de départ de notre signet
                    MonSignet.Range.Text = TexteSignet     'Affectation du Texte au Signet
     
                    'Affecter l'objet Range, avec une position de départ identique à celle du Signet
                    ' et une position de fin correspondant à celle du début augmentée de la longueur du texte
                    Set MonSignetRange = DocEnCours8.Range(Start:=intI, End:=intI + Len(TexteSignet))
                    DocEnCours.Bookmarks.Add MonSignetNom, MonSignetRange                                     ' Création du Bookmark sur l'objet Range
     
                End With
     
            End With
     
            Set MonSignetRange = Nothing
     
            AjouterTexteSignet = True           'Affecte la valeur True à la fonction
     
    End Function
     
     
    Sub CreerStyleSignet(ByVal DocEnCours As Document)
    ' créer un style de titre, à utiliser ulterieurement pour la mise en forme du texte du signet DocRefEnCours
     
    Dim MonStyle As Style
    Dim CtrI As Integer
     
        On Error GoTo Fin
     
        With DocEnCours
             For CtrI = 1 To .Styles.Count
                 If .Styles(CtrI).NameLocal = "StyleTitreSignet" Then
                    'MsgBox "Ce style existe déjà !", vbCritical
                    GoTo Fin
                 End If
     
             Next CtrI
     
            Set MonStyle = .Styles.Add("StyleTitreSignet", 2)
            With MonStyle.Font
               .Bold = True
               .Italic = False
               .ColorIndex = wdBlack
               .Name = "Arial"
               .Size = 12
            End With
     
        End With
     
        GoTo Fin
     
    Fin:
     
    Set MonStyle = Nothing
     
    End Sub
     
     
     
    Sub SelectionnerChaqueLigneDUnSignet(ByVal DocEnCours As Document, ByVal MonSignet As Bookmark, ByVal StyleAAppliquer As Style)
    'Pour appliquer le style aux lignes selectionnées
     
    Dim SignetEncours As Bookmark
     
        With DocEnCours
             For Each SignetEncours In .Bookmarks
                 If SignetEncours = MonSignet Then
                    If MonSignet.Range.Paragraphs.Count > 3 Then
                       With MonSignet.Range
                            .Paragraphs(1).Range.Style = StyleAAppliquer
                            .Paragraphs(4).Range.Style = StyleAAppliquer
                       End With
                    End If
                 End If
             Next SignetEncours
        End With
     
    End Sub
     
    Sub
    'Pour appeler les procédures
            AjouterLesSignets DocEnCours
            AjouterTexteSignet DocSource, DocEnCours, DocEnCours.Bookmarks("DocRefEnCours"), TexteSignet
            CreerStyleSignet DocEnCours  
            SelectionnerChaqueLigneDUnSignet DocEnCours, DocEnCours.Bookmarks("DocRefEnCours"), DocEnCours.Styles("StyleTitreSignet")
    End sub

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

Discussions similaires

  1. [AC-2010] Copier texte 1er formulaire dans le 2ieme
    Par scoobydoos dans le forum VBA Access
    Réponses: 1
    Dernier message: 15/11/2010, 15h10
  2. Réponses: 5
    Dernier message: 14/11/2009, 05h27
  3. Réponses: 1
    Dernier message: 18/11/2008, 21h42
  4. Importer un fichier texte dans des champs d'une table
    Par Cyriusix dans le forum Modélisation
    Réponses: 1
    Dernier message: 17/04/2008, 14h18
  5. Import d'un fichier texte dans UN champ d'une table
    Par Gunther dans le forum Access
    Réponses: 4
    Dernier message: 06/12/2006, 20h04

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