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 :

Formatage de tableau [WD-2007]


Sujet :

VBA Word

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2019
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Mauritanie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2019
    Messages : 5
    Points : 1
    Points
    1
    Par défaut Formatage de tableau
    Bonjour,

    Je suis en train d'essayer d'écrire une macro pour formater un tableau issu de publipostage conditionnel. J'ai potentiellement une centaine de tableau à formater de la même façon à l'issue du publipostage.
    J'ai réussi à régler la largeur de chaque colonne, la hauteur des lignes, mettre en gras le contenu de la première ligne, régler l'espacement après le texte sur 0, centré verticalement tout le contenu des cellules et centrer mon tableau dans la page. Jusque là j'étais content de moi.
    Mais je n'arrive pas à faire une chose toute bête, je veux que le texte contenu dans une colonne spécifique (par exemple la colonne 4) soit centré horizontalement, mais pas tout le contenu de mon tableau. Voici le code que j'ai déjà écrit (en fait j'ai essayer de compiler des morceaux de code pris à gauche à droite...)

    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 Macro4()
            Dim myTable As Table
            'If Selection.Information(wdWithInTable) = False Then Exit Sub
           'Set myTable = Selection.Tables(1)
            Set myTable = Application.ActiveDocument.Tables(1)
            With myTable
                'Mettre les titres de la première ligne en gras
               .Rows.First.Range.Font.Bold = True
                'Centrer les titres et le tableau
               .Rows.Alignment = wdAlignRowCenter
               .Rows(1).Alignment = wdAlignRowCenter
                'Centrer le contenu des colonnes verticalement
               .Columns(1).Cells.VerticalAlignment = wdCellAlignVerticalCenter
               .Columns(2).Cells.VerticalAlignment = wdCellAlignVerticalCenter
               .Columns(3).Cells.VerticalAlignment = wdCellAlignVerticalCenter
               .Columns(4).Cells.VerticalAlignment = wdCellAlignVerticalCenter
     
                'Adapter la largeur des colonnes
               .Columns(1).Width = 30
               .Columns(2).Width = 120
               .Columns(3).Width = 120
               .Columns(4).Width = 20
               'Adapter la Hauteur des lignes'
               .Rows.Height = 50
               'Espacement après le texte de zéro point
               With myTable
               .Style.ParagraphFormat.SpaceAfter = 0
    End With
    End With
    End Sub
    Si quelqu'un peut m'aider... Je suis preneur, je commence à m'arracher les cheveux... et je n'en ai plus beaucoup !

  2. #2
    Nouveau Candidat au Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2019
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Mauritanie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2019
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    J'ai réussi à avancer un peu dans mon problème (avec surement un code très moche... désolé pour ceux qui s'y connaissent, mais ça fait le job).

    Par contre, j'ai encore un dernier problème : mon document word contient plusieurs tableaux, et ma macro ne gère que le premier tableau. J'ai bien trouvé la fonction for... next, mais je n'arrive pas à comprendre comment la mettre en oeuvre.

    Ci-dessous mon code actuel :

    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
    Sub TableauEmargement()
    '
    ' TableauEmargement Macro
    '
    Dim myTable As Table
            For Each myTable In ActiveDocument.Tables
     
            'If Selection.Information(wdWithInTable) = False Then Exit Sub
           'Set myTable = Selection.Tables
            Set myTable = Application.ActiveDocument.Tables(1)
            With myTable
                'Mettre les titres de la première ligne en gras
               .Rows.First.Range.Font.Bold = True
                'Centrer les titres
               .Rows.Alignment = wdAlignRowCenter
               .Rows(1).Alignment = wdAlignRowCenter
                'Centrer le contenu de la 1ère colonne
               .Columns(1).Cells.VerticalAlignment = wdCellAlignVerticalCenter
               .Columns(2).Cells.VerticalAlignment = wdCellAlignVerticalCenter
               .Columns(3).Cells.VerticalAlignment = wdCellAlignVerticalCenter
               .Columns(4).Cells.VerticalAlignment = wdCellAlignVerticalCenter
               .Columns(5).Cells.VerticalAlignment = wdCellAlignVerticalCenter
               .Columns(6).Cells.VerticalAlignment = wdCellAlignVerticalCenter
               .Columns(4).Cells.VerticalAlignment = wdCellAlignVerticalCenter
               .Columns(7).Cells.VerticalAlignment = wdCellAlignVerticalCenter
                'Réduire la largeur de la première colonne
               .Columns(1).Width = 30
               .Columns(2).Width = 130
               .Columns(3).Width = 130
               .Columns(4).Width = 80
               .Columns(5).Width = 20
               .Columns(6).Width = 120
               .Columns(7).Width = 150
     
               'Hauteur des lignes'
               .Rows.Height = 20
    End With
            Application.ActiveDocument.Tables(1).Columns(1).Select
            Selection.ParagraphFormat.Alignment = wdAlignParagraphCenter
            Application.ActiveDocument.Tables(1).Columns(4).Select
            Selection.ParagraphFormat.Alignment = wdAlignParagraphCenter
            Application.ActiveDocument.Tables(1).Columns(5).Select
            Selection.ParagraphFormat.Alignment = wdAlignParagraphCenter
            Application.ActiveDocument.Tables(1).Columns(6).Select
            Selection.ParagraphFormat.Alignment = wdAlignParagraphCenter
            Application.ActiveDocument.Tables(1).Columns(7).Select
            Selection.ParagraphFormat.Alignment = wdAlignParagraphCenter
    Next myTable
    End Sub

  3. #3
    Inactif  

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2012
    Messages
    4 904
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4 904
    Points : 10 168
    Points
    10 168
    Billets dans le blog
    36
    Par défaut
    Bonjour,

    à première vue et non-testé

    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
    Sub TableauEmargement()
    '
    ' TableauEmargement Macro
    '
    Dim myTable As Table
            'Déjà ici tu choisis de passer tous tes tableaux
             'Et mytable devient le tableau suivant dès que le programme atteint next
            For Each myTable In ActiveDocument.Tables
     
            'If Selection.Information(wdWithInTable) = False Then Exit Sub
           'Set myTable = Selection.Tables
           'Pour tous les tableaux. on enlève la ligne suivant
     
            'Set myTable = Application.ActiveDocument.Tables(1)
            With myTable
                'Mettre les titres de la première ligne en gras
               .Rows.First.Range.Font.Bold = True
                'Centrer les titres
               .Rows.Alignment = wdAlignRowCenter
               .Rows(1).Alignment = wdAlignRowCenter
                'Centrer le contenu de la 1ère 
               dim i as integer
     
               for i = 1 to 7
     
                   .Columns(i).Cells.VerticalAlignment = wdCellAlignVerticalCenter
               next
     
                'Réduire la largeur de la première colonne
               .Columns(1).Width = 30
               .Columns(2).Width = 130
               .Columns(3).Width = 130
               .Columns(4).Width = 80
               .Columns(5).Width = 20
               .Columns(6).Width = 120
               .Columns(7).Width = 150
     
               'Hauteur des lignes'
               .Rows.Height = 20
    End With
            Application.ActiveDocument.Tables(1).Columns(1).Select
            Selection.ParagraphFormat.Alignment = wdAlignParagraphCenter
            Application.ActiveDocument.Tables(1).Columns(4).Select
            Selection.ParagraphFormat.Alignment = wdAlignParagraphCenter
            Application.ActiveDocument.Tables(1).Columns(5).Select
            Selection.ParagraphFormat.Alignment = wdAlignParagraphCenter
            Application.ActiveDocument.Tables(1).Columns(6).Select
            Selection.ParagraphFormat.Alignment = wdAlignParagraphCenter
            Application.ActiveDocument.Tables(1).Columns(7).Select
            Selection.ParagraphFormat.Alignment = wdAlignParagraphCenter
    Next myTable
    End Sub
    À ma connaissance, le seul personnage qui a été diagnostiqué comme étant allergique au mot effort. c'est Gaston Lagaffe.

    Ô Saint Excel, Grand Dieu de l'Inutile.

    Excel n'a jamais été, n'est pas et ne sera jamais un SGBD, c'est pour cela que Excel s'appelle Excel et ne s'appelle pas Access junior.

  4. #4
    Nouveau Candidat au Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2019
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Mauritanie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2019
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Merci pour votre réponse, la boucle fonctionne parfaitement bien. Tous les tableaux de mon document passent bien à la moulinette !

    Mon problème c'est que la dernière partie de mon code, pour centrer le contenu de certaines colonnes fonctionne bien sur le tableau 1 (puisque c'est ce que mon code demande), mais pas sur les autres. Si je supprime le (1) après chaque Tables, évidemment ça ne marche plus, car la macro ne sait plus de quel Tables il s'agit (enfin je pense), et je n'arrive pas à trouver comment modifier cette partie.

    En prenant modèle sur votre proposition de boucle, j'arrive à le faire pour un nombre défini de tableau, mais pas pour tous les tableaux (à moins de lui dire combien j'ai de tableau dans mon fichier).

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

    En me servant de la réponse de Clément que je salue, testez ce code :
    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
     
     
    Sub TableauEmargement()
    '
    ' TableauEmargement Macro
    '
    Dim myTable As Table
    Dim MesAlignementsDeColonnes As Variant, MesLargeursDeColonnes As Variant
    Dim I As Integer
     
            'Déjà ici tu choisis de passer tous tes tableaux
            'Et mytable devient le tableau suivant dès que le programme atteint next
            For Each myTable In ActiveDocument.Tables
     
                    MesLargeursDeColonnes = Array(30, 130, 130, 80, 20, 120, 150)
                    MesAlignementsDeColonnes = Array(1, 4, 5, 6, 7)
     
                    With myTable
     
                          With .Rows
                               .First.Range.Font.Bold = True 'Mettre les titres de la première ligne en gras
                               .Alignment = wdAlignRowCenter 'Centrer les titres
                               .Height = 20 'Hauteur des lignes'
                          End With
     
                          .Rows(1).Alignment = wdAlignRowCenter 'Centrer le contenu de la 1ère
     
     
                          For I = LBound(MesLargeursDeColonnes) To UBound(MesLargeursDeColonnes)
                              With .Columns(I + 1)
                                   .Cells.VerticalAlignment = wdCellAlignVerticalCenter
                                   .Width = MesLargeursDeColonnes(I)
                              End With
                          Next
     
                          For I = LBound(MesAlignementsDeColonnes) To UBound(MesAlignementsDeColonnes)
                              .Columns(MesAlignementsDeColonnes(I)).Select
                              Selection.ParagraphFormat.Alignment = wdAlignParagraphCenter
                          Next I
     
                    End With
     
            Next myTable
     
    End Sub

  6. #6
    Nouveau Candidat au Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2019
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Mauritanie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2019
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Super ! ca marche très bien, et surtout c'est devenu très rapide pour traiter tout mon document. Votre code est magnifique, bien plus compliqué à comprendre pour moi qui suis novice, mais j'adore, je vais le décortiquer pour essayer de bien le comprendre. C'est ma première fois en VBA, donc je pense que pour un dépucelage, c'est pas mal hhhh

  7. #7
    Nouveau Candidat au Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2019
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Mauritanie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2019
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Merci à vous, votre code est très efficace !

    Citation Envoyé par Eric KERGRESSE Voir le message
    Bonjour,

    En me servant de la réponse de Clément que je salue, testez ce code :
    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
     
     
    Sub TableauEmargement()
    '
    ' TableauEmargement Macro
    '
    Dim myTable As Table
    Dim MesAlignementsDeColonnes As Variant, MesLargeursDeColonnes As Variant
    Dim I As Integer
     
            'Déjà ici tu choisis de passer tous tes tableaux
            'Et mytable devient le tableau suivant dès que le programme atteint next
            For Each myTable In ActiveDocument.Tables
     
                    MesLargeursDeColonnes = Array(30, 130, 130, 80, 20, 120, 150)
                    MesAlignementsDeColonnes = Array(1, 4, 5, 6, 7)
     
                    With myTable
     
                          With .Rows
                               .First.Range.Font.Bold = True 'Mettre les titres de la première ligne en gras
                               .Alignment = wdAlignRowCenter 'Centrer les titres
                               .Height = 20 'Hauteur des lignes'
                          End With
     
                          .Rows(1).Alignment = wdAlignRowCenter 'Centrer le contenu de la 1ère
     
     
                          For I = LBound(MesLargeursDeColonnes) To UBound(MesLargeursDeColonnes)
                              With .Columns(I + 1)
                                   .Cells.VerticalAlignment = wdCellAlignVerticalCenter
                                   .Width = MesLargeursDeColonnes(I)
                              End With
                          Next
     
                          For I = LBound(MesAlignementsDeColonnes) To UBound(MesAlignementsDeColonnes)
                              .Columns(MesAlignementsDeColonnes(I)).Select
                              Selection.ParagraphFormat.Alignment = wdAlignParagraphCenter
                          Next I
     
                    End With
     
            Next myTable
     
    End Sub

  8. #8
    Inactif  

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2012
    Messages
    4 904
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4 904
    Points : 10 168
    Points
    10 168
    Billets dans le blog
    36
    Par défaut
    Bonjour,

    Citation Envoyé par tiptof60 Voir le message
    Merci pour votre réponse, la boucle fonctionne parfaitement bien. Tous les tableaux de mon document passent bien à la moulinette !

    Mon problème c'est que la dernière partie de mon code, pour centrer le contenu de certaines colonnes fonctionne bien sur le tableau 1 (puisque c'est ce que mon code demande), mais pas sur les autres. Si je supprime le (1) après chaque Tables, évidemment ça ne marche plus, car la macro ne sait plus de quel Tables il s'agit (enfin je pense), et je n'arrive pas à trouver comment modifier cette partie.
    Malheureusement, quand je peux fréquenter le forum, c'est en utilisant la batterie de mon portable. Cela m'oblige souvent à passer au plus court. Et je n'ai pas eu le temps de compléter à la maison. (J'ai deux ou trois projets VB.net en chantier ou en préparation). Mais Éric a fait plus complet, et plus court, que ce à quoi je pensais. . Grâce à ses tableaux, auxquels je ne pensais pas.
    À ma connaissance, le seul personnage qui a été diagnostiqué comme étant allergique au mot effort. c'est Gaston Lagaffe.

    Ô Saint Excel, Grand Dieu de l'Inutile.

    Excel n'a jamais été, n'est pas et ne sera jamais un SGBD, c'est pour cela que Excel s'appelle Excel et ne s'appelle pas Access junior.

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

Discussions similaires

  1. Formatage de tableau sous latex
    Par pierre.xavier dans le forum Tableaux - Graphiques - Images - Flottants
    Réponses: 4
    Dernier message: 07/01/2012, 23h39
  2. [XL-2003] Reproduire le formatage du tableau en image jointe
    Par NoxWeed dans le forum Excel
    Réponses: 2
    Dernier message: 14/04/2011, 13h51
  3. [WD-2003] Formatage de Tableau
    Par Sigismonde dans le forum VBA Word
    Réponses: 2
    Dernier message: 03/07/2009, 14h19
  4. [smarty] formatage numérique tableau
    Par harlock59 dans le forum Langage
    Réponses: 3
    Dernier message: 11/07/2006, 10h28
  5. Réponses: 2
    Dernier message: 03/03/2005, 14h57

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