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 :

Insérer une zone de texte par Macro


Sujet :

VBA Word

  1. #1
    Membre à l'essai
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Septembre 2020
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs

    Informations forums :
    Inscription : Septembre 2020
    Messages : 25
    Points : 22
    Points
    22
    Par défaut Insérer une zone de texte par Macro
    J'essaie de créer une macro qui insère une zone de texte dans mon doc, tout le temps au même endroit (disons à 3 cm du bord gauche de ma page, et à mi-hauteur). Je peux être amené à insérer plusieurs zone de texte sur la même page (que je positionne ensuite manuellement haut/bas avec les flèches du clavier, mais au moins elles ont toutes la même distance au bord gauche de la feuille. Je n'ai plus au'à les monter ou les descendre)

    Dans cette zone de texte, j'aimerais que la macro fasse apparaitre tout le temps le même texte, avec la même mise en forme (police 8, gras, italique)


    J'ai presque trouvé ce qu'il faut, mais comme je suis passé par une macro en enregistrement auto pour la partie mise en page du code, je bloque car la macro ne reconnait la "text box 32" (c'est la zone de texte où j'ai cliqué pour enregistrer le code de mise en page)

    Vous pourriez me dire ce qu'il faut que je me modifie svp?


    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
     
     
     Dim myS As Shape
     
    Set myS = ActiveDocument.Shapes.AddTextbox(Orientation:=msoTextOrientationHorizontal, Left:=30, Top:=200, Width:=100, Height:=100)
    With myS
        .Line.Transparency = 1
     
     
    End With
     
    myS.Select
    Selection.Range.Text = "nom société"
    myS.Select
    Selection.Font.Bold = True
    myS.Select
    Selection.Font.Size = 8
    myS.Select
    Selection.Paragraphs.Alignment
     
    Set myS = Nothing
     
     
    End Sub
    J'édite mon message car j'ai trouvé ce que je voulais.

  2. #2
    Membre à l'essai
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Septembre 2020
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs

    Informations forums :
    Inscription : Septembre 2020
    Messages : 25
    Points : 22
    Points
    22
    Par défaut
    enfin presque...

    Si qq'un pouvait me dire, dans le code ci-dessus, quelle ligne rajouter pour supprimer les espacements avant et après mon texte (les mettre à 0), ce serait cool :




    edit : ok voilà le code qui fonctionne

    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
     
    myS.Select
    Selection.Range.Text = "nom société"
    myS.Select
    Selection.Font.Bold = True
    myS.Select
    Selection.Font.Italic = True
    myS.Select
    Selection.Font.Size = 8
    myS.Select
    Selection.Paragraphs.Alignment = wdAlignParagraphRight
    myS.Select
    Selection.Range.ParagraphFormat.SpaceBefore = 0
    myS.Select
    Selection.Range.ParagraphFormat.SpaceAfter = 0

  3. #3
    Membre à l'essai
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Septembre 2020
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs

    Informations forums :
    Inscription : Septembre 2020
    Messages : 25
    Points : 22
    Points
    22
    Par défaut
    ce coup-ci je sèche...

    Je ne sais pas si ce que je souhaite faire est possible... Qq'un peut-il me dire si c'est réalisable ou si je peux arrêter de chercher?

    Je m'explique : sur mon document j'ai 3 paragraphes qui correspondent au Style "para1".

    Une fois que la macro a fait apparaître la zone de texte, je la déplace vers le haut ou le bas avec les flèches du clavier pour l'aligner avec mon paragraphe. Bon ça fonctionne, mais c'est un peu long de faire comme ça.

    Alors j'aimerais pouvoir déplacer cette zone de texte avec les flèches du clavier (haut/bas) de manière à ce que la zone de texte s'aligne à la même hauteur que celle de la 1ère ligne du paragraphe "para1" (qu'il soit juste en face).

    Est-il possible en VBA d'identifier un Style? est-ce la bonne méthode?

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    376
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 376
    Points : 596
    Points
    596
    Par défaut
    Bonjour,

    Mais, en fait, tu tiens à réinventer l'eau chaude ?
    Une macro pour ça est inutile... tu n'as qu'à enregistrer ta zone de texte en tant que bloc de construction zone de texte avec toutes les caractéristiques nécessaires, il suffira d'utiliser le raccourci + F3 ou de cliquer dans la galerie des zones de texte.

    Maintenant pour aligner ta zone de texte avec le paragraphe, je ne vois pas vraiment de solution simple parce que la position d'un texte sur une page est en nombre de lignes (c'est l'information que tu vois en bas sur la barre d'état) alors que ta zone de texte qui a donc un habillage et ne fait pas partie de la couche texte, a une position en cm ou en pouces sur une page.

    En fait, je ne sais pas où tu veux en arriver, mais j'ai doute sur le process !

    m@rina

  5. #5
    Membre à l'essai
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Septembre 2020
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs

    Informations forums :
    Inscription : Septembre 2020
    Messages : 25
    Points : 22
    Points
    22
    Par défaut
    hello

    Oops.. je connaissais pas la fonction "bloc de construction zone de texte". Cela dit, il faut que j'explique mieux là où je veux en venir.

    Voilà un aperçu du template :



    Ce template est fait sur 1 seule colonne (il n'est pas non plus en mode tableau car je souhaiterais essayer de m'en passer pour les raisons évoquées précédemment). La zone que j'ai surlignée en bleu (ce surlignage ne fait pas partie du template, c'est juste pour localiser ce dont je parle), je veux m'en servir pour insérer un petit texte qui sert à introduire de temps en temps mes paragraphes.

    Donc ça veut dire que ce ptit texte introductif doit toujours être aligné de la même manière (alignement sur le trait rouge). Je dois y avoir accès rapidement car sur un doc de 300 pages j'appelle souvent cette zone de texte et si elle est bien alignée (sur le trait rouge) dès son insertion ca me fait gagner du temps. Je n'ai plus qu'à ajuster manuellement son positionnement vertical pour que la zone de texte soit positionnée en face du début d'un paragraphe...alors j'appuie 10 fois ou 50 fois sur les flèches haut/bas pour la monter ou la faire descendre

    C'est cette dernière étape, que je fais manuellement, que je cherche à automatiser car c'est un peu longuet d'appuyer sur les flèches haut/bas du clavier sur un doc de 300 pages.

    C'est pour ça que je me demande si c'est possible de déplacer verticalement la zone de texte, avec les flèches haut/bas du clavier, en faisant en sorte que ses déplacements s’arrêtent en face la 1ère ligne de chaque paragraphe (qui a un Style propre) : s'il y a 3 paragraphes sur ma page, ca me ferait QUE 3 possibilités de déplacement vertical de la zone de texte (zone de texte que j'ai au préalable sélectionner avec la souris)

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    376
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 376
    Points : 596
    Points
    596
    Par défaut
    Bonjour,

    En fait c'est très simple. Tu crées ta zone de texte avec la position horizontale précise, et la mise en forme que tu souhaites. Pour la position verticale, tu choisis une position absolue par rapport au paragraphe et tu enregistres la zone en tant que bloc de construction que tu mets où tu veux, dans les zones de texte de préférence, histoire de s'y retrouver.

    Je te mets un exemple ici :
    https://www.cjoint.com/c/KBmozh4nLZH

    Les blocs de construction ne pouvant se mettre que dans un modèle (building blocks.dotx par défaut ou un modèle quelconque), le fichier que je te joins est donc un modèle.
    Fais un test : positionne le curseur à la fin d'un paragraphe quelconque et tape "gauche" (sans les " ") suivi par F3. La zone de texte va automatiquement s'insérer sur le paragraphe où tu te trouves. Concernant la hauteur, la zone de texte va s'agrandir' en fonction du texte saisi à l'intérieur.
    J'ai mis un fond jaune à la zone histoire de la voir.

    m@rina

  7. #7
    Membre à l'essai
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Septembre 2020
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs

    Informations forums :
    Inscription : Septembre 2020
    Messages : 25
    Points : 22
    Points
    22
    Par défaut
    super cette astuce, merci m@rina ça fonctionne plutôt bien.

    A l'usage je pense qu'il faut que j'évite d'insérer dans ces zones de texte des " Légendes automatiques " car je m'aperçois que lorsque je fais Ctrl+A puis F9 pour mettre toute la tables des matières à jour, les Figures qui sont placées à l'intérieur de ces zones de texte ne sont pas mises à jour. Il faut que je les mette à jour une par une

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    376
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 376
    Points : 596
    Points
    596
    Par défaut
    Bon, déjà une bonne chose qui fonctionne !!
    Avant de se lancer dans les macros, il faut toujours étudier ce que propose le logiciel nativement plutôt que de vouloir le réinventer !

    Concernant les légendes, oui, effectivement, je dis toujours d'ailleurs qu'il s'agit, entre autres, d'un problème avec les images avec habillage, car les légendes se mettent dans des zones de texte et qu'on ne peut pas les actualiser sans cliquer dans chacune d'elles.

    Il faut savoir que les champs se mettent à jour à l'impression. Aussi, si tu utilises l'ancien aperçu avant impression, tes champs et donc tes légendes se mettront à jour tout seuls. C'est une idée.
    Cela étant, la zone de texte que j'ai créée peut être remplacée par une cellule de tableau, en utilisant les mêmes paramètres pour la position. ça reviendra au même sauf que tu pourras faire tes mises à jour de légende

    m@rina

  9. #9
    Membre à l'essai
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Septembre 2020
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs

    Informations forums :
    Inscription : Septembre 2020
    Messages : 25
    Points : 22
    Points
    22
    Par défaut
    hello

    @m@rina : as-tu connaissance de bug avec les blocs de constructions? Vu qu'il y en a sur les Titres... je me méfie de ne pas dépenser de l'énergie inutilement.

    les blocs de construction (les zones de textes dont je parle ci-dessus) fonctionnaient très bien jusqu'à hier. Depuis hier soir, après avoir enregistrer en .dotm, elles fonctionnent mal : elles apparaissent toujours quand je les appelle, par contre elles ne mémorisent pas l'alignement que je leur affecte (le bon alignement est en rouge, mais elles s'alignent comme sur l'exemple ci-contre en noir)

    c'est curieux


  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    376
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 376
    Points : 596
    Points
    596
    Par défaut
    Bonjour,

    Non, il n'y a pas de bug de ce point de vue là.

    Je sais, tout ça est long à faire et surtout demande énormément de rigueur, tout ça pour faciliter la vie des utilisateurs, il faut quand même le dire.
    Donc, oui il faut tout vérifier partout, tout le temps.
    Quand tu crées ta zone de texte, tu dois utiliser un style. Et tu dois bien faire attention à ce style:
    - l'alignement
    - les espacements avant/après
    - etc.

    Par ailleurs, tu dois formater correctement ta zone de texte : espace ou non ajouté en haut, en bas, à droite, à gauche...

    et bien sûr l'emplacement précis.


    J'ajoute autre chose qui n'a rien à voir avec ta question mais c'est important à partir du moment où tu crées des modèles à diffuser.
    Les blocs de construction doivent obligatoirement se situer dans un modèle comme j'explique ici :
    https://faqword.com/index.php/word/1...s-construction

    Toi tu as donc le choix entre :
    - un fichier building blocks.dotx
    - le modèle que tu es en train de créer
    - le normal.dotm

    Je raye tout de suite le Normal.dotm.
    Concernant les deux autres :

    Le modèle que tu crées, c'est très bien, mais il faudra bien spécifier dans la macro le nom du modèle avec son chemin entier. Et dans ce cas, la macro n'est disponible qu'avec le document basée sur ce modèle.

    L'autre choix est d'utiliser UN fichier de type building blocks.dotx mais pas celui d'origine car tu seras obligé de distribuer ce fichier et il vaut mieux éviter d'écraser le fichier perso des utilisateurs.
    L'avantage de cette solution est que la macro peut fonctionner dans n'importe quel document et pas seulement le document basé sur ce modèle.

    Après je sais pas comment tu te débrouilles avec les macros, comment tu les mets à disposition pour les utilisateurs...
    m@rina

  11. #11
    Membre à l'essai
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Septembre 2020
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs

    Informations forums :
    Inscription : Septembre 2020
    Messages : 25
    Points : 22
    Points
    22
    Par défaut
    hello

    J'ai testé mon template sur le PC d'une collègue et les blocs de constructions ne fonctionnaient plus...sûrement parce qu'ils ne sont pas enregistrés comme il faut. J'ai pourtant fait le test en les enregistrant selon les instructions de m@rina ; une fois dans building blocks.dotx puis dans le modèle sur lequel je travaille mais non... Ca ne fonctionne pas chez elle.

    Est-ce que 2 versions d'Office différente 2016 VS Office 365 peuvent expliquer ce problème?

    Je rencontre la même bizarrerie avec une Macro qui fonctionne bien sur Word 2016, mais pas sur Office 365. La macro sert à intégrer une ligne de tableau scindée en 3 colonnes. Sur l’exemple ci-dessous :

    • le 1er tableau c'est le résultat souhaité (qui fonctionne bien sours Word 2016)
    • et celui en dessous c'est le résultat de la macro dès que je la teste sur mon PC pro (office 365) : les 3 colonnes ont une largeur identique et je ne comprends pas pqoi



    Le code de la macro pour ceux que ca intéresse (désolé pour les puristes je débute en VBA)

    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
     
     
    Sub Macro()
     
     
    Dim tablecount As Integer
        If ActiveDocument.Tables.Count <> 0 Then
          tablecount = ActiveDocument.Tables.Count
        Else
          tablecount = 0
        End If
        tablecount = tablecount + 1
     
     
        With ActiveDocument
     
            .Tables.Add Range:=Selection.Range, NumRows:=1, NumColumns:=3, _
                              DefaultTableBehavior:=wdWord9TableBehavior, _
                              AutoFitBehavior:=wdAutoFitFixed
            With .Tables(tablecount)
                 .Columns.PreferredWidthType = wdPreferredWidthPoints
                 .Columns(1).PreferredWidth = InchesToPoints(12.1)
                 .Columns(2).PreferredWidth = InchesToPoints(0.1)
                 .Columns(3).PreferredWidth = InchesToPoints(1.5)
            End With
     
            With .Tables(tablecount)
                 .Borders.Enable = True
                 .Borders(wdBorderBottom).LineStyle = wdLineStyleSingle
                 .Borders(wdBorderLeft).LineStyle = wdLineStyleSingle
                 .Borders(wdBorderRight).LineStyle = wdLineStyleSingle
                 .Borders(wdBorderTop).LineStyle = wdLineStyleSingle
            End With
     
     
        End With
     
        Selection.Tables(1).Columns(1).Shading.Texture = wdTextureNone
        Selection.Tables(1).Columns(1).Shading.ForegroundPatternColor = wdColorAutomatic
        Selection.Tables(1).Columns(1).Shading.BackgroundPatternColor = -671023309
     
        Selection.Tables(1).Columns(3).Shading.Texture = wdTextureNone
        Selection.Tables(1).Columns(3).Shading.ForegroundPatternColor = wdColorAutomatic
        Selection.Tables(1).Columns(3).Shading.BackgroundPatternColor = -671023309
     
        Selection.Tables(1).Columns(1).Borders(wdBorderTop).LineStyle = wdLineStyleNone
        Selection.Tables(1).Columns(1).Borders(wdBorderLeft).LineStyle = wdLineStyleNone
        Selection.Tables(1).Columns(1).Borders(wdBorderBottom).LineStyle = wdLineStyleNone
        Selection.Tables(1).Columns(1).Borders(wdBorderRight).LineStyle = wdLineStyleNone
        Selection.Tables(1).Columns(1).Borders(wdBorderDiagonalDown).LineStyle = wdLineStyleNone
        Selection.Tables(1).Columns(1).Borders(wdBorderDiagonalUp).LineStyle = wdLineStyleNone
     
        Selection.Tables(1).Columns(2).Borders(wdBorderTop).LineStyle = wdLineStyleNone
        Selection.Tables(1).Columns(2).Borders(wdBorderLeft).LineStyle = wdLineStyleNone
        Selection.Tables(1).Columns(2).Borders(wdBorderBottom).LineStyle = wdLineStyleNone
        Selection.Tables(1).Columns(2).Borders(wdBorderRight).LineStyle = wdLineStyleNone
        Selection.Tables(1).Columns(2).Borders(wdBorderDiagonalDown).LineStyle = wdLineStyleNone
        Selection.Tables(1).Columns(2).Borders(wdBorderDiagonalUp).LineStyle = wdLineStyleNone
     
        Selection.Tables(1).Columns(3).Borders(wdBorderTop).LineStyle = wdLineStyleNone
        Selection.Tables(1).Columns(3).Borders(wdBorderLeft).LineStyle = wdLineStyleNone
        Selection.Tables(1).Columns(3).Borders(wdBorderBottom).LineStyle = wdLineStyleNone
        Selection.Tables(1).Columns(3).Borders(wdBorderRight).LineStyle = wdLineStyleNone
        Selection.Tables(1).Columns(3).Borders(wdBorderDiagonalDown).LineStyle = wdLineStyleNone
        Selection.Tables(1).Columns(3).Borders(wdBorderDiagonalUp).LineStyle = wdLineStyleNone
     
        Selection.Tables(1).AutoFitBehavior (wdAutoFitFixed)
     
        Selection.Font.Bold = wdToggle
        Selection.SelectCell
        Selection.ParagraphFormat.Alignment = wdAlignParagraphLeft
        Selection.Cells.VerticalAlignment = wdCellAlignVerticalCenter
     
    Selection.Tables(1).Select
        With Selection.ParagraphFormat
            .SpaceBefore = 2
            .SpaceBeforeAuto = False
            .SpaceAfter = 4
            .SpaceAfterAuto = False
            .LineSpacingRule = wdLineSpaceSingle
            .LineUnitBefore = 0
            .LineUnitAfter = 0
        End With
     
    Selection.TypeText Text:="Mon texte personnalisé....?"
        Selection.ParagraphFormat.Alignment = wdAlignParagraphLeft
     
     
    End Sub

  12. #12
    Membre à l'essai
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Septembre 2020
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs

    Informations forums :
    Inscription : Septembre 2020
    Messages : 25
    Points : 22
    Points
    22
    Par défaut créer un tableau sous word via macro
    ca y est, le code fonctionne (mais il gagnerait à être + propre et ca m'intéresserait pour progresser)



    je le mets là si qq'un a besoin de créer un tableau sous word :

    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
    123
    124
    125
    126
    127
    128
    129
    130
     
    Sub TableMult()
    Dim oTbl As Table
     
    Set oTbl = ActiveDocument.Tables.Add(Range:=Selection.Range, NumRows:=3, numcolumns:=3)
     
       With oTbl
           .Borders.Enable = True
           .Borders(wdBorderBottom).LineWidth = wdLineWidth050pt
           .Borders(wdBorderLeft).LineWidth = wdLineWidth050pt
           .Borders(wdBorderRight).LineWidth = wdLineWidth050pt
           .Borders(wdBorderTop).LineWidth = wdLineWidth050pt
       End With
     
     
        Selection.Tables(1).Rows.SetLeftIndent LeftIndent:=85, RulerStyle:= _
            wdAdjustNone
        Selection.Tables(1).Columns(3).SetWidth ColumnWidth:=80, RulerStyle:= _
            wdAdjustNone
     
    ''Centre et mets en gras le contenu des celleules de la colonne 3
        Selection.Tables(1).Columns(3).Select
            Selection.ParagraphFormat.Alignment = wdAlignParagraphCenter
            Selection.Font.Bold = wdToggle
     
    ''Centre et mets en gras le contenu des celleules de la colonne 1
        Selection.Tables(1).Columns(1).Select
            Selection.ParagraphFormat.Alignment = wdAlignParagraphLeft
            Selection.Font.Bold = wdToggle
     
     
    ''Texte de la colonne 1
        Selection.Tables(1).Cell(2, 1).Select
           Selection.TypeText Text:="Mets ici ton texte personnalisé....?"
     
    ''Texte de la colonne 3
        Selection.Tables(1).Cell(2, 3).Select
           Selection.TypeText Text:="Perso"
     
     
     
     
    ''Dimension des colonnes
        Selection.Tables(1).Columns(1).PreferredWidth = CentimetersToPoints(12.2)
        Selection.Tables(1).Columns(2).PreferredWidth = CentimetersToPoints(0.4)
        Selection.Tables(1).Columns(3).PreferredWidth = CentimetersToPoints(1.5)
     
     
    ''Colorie une 1ère fois les colonnes
        Selection.Tables(1).Columns(1).Shading.Texture = wdTextureNone
        Selection.Tables(1).Columns(1).Shading.BackgroundPatternColor = -671023309
     
        Selection.Tables(1).Columns(3).Shading.Texture = wdTextureNone
        Selection.Tables(1).Columns(3).Shading.BackgroundPatternColor = -671023309
     
     
    ''Colorie une 2ème fois les lignes
        Selection.Tables(1).Rows(1).Shading.Texture = wdTextureNone
        Selection.Tables(1).Rows(1).Shading.BackgroundPatternColor = 16777215
     
        Selection.Tables(1).Rows(3).Shading.Texture = wdTextureNone
        Selection.Tables(1).Rows(3).Shading.BackgroundPatternColor = 16777215
     
     
    ''Format des bordures
        Selection.Tables(1).Columns(1).Borders(wdBorderTop).LineStyle = wdLineStyleNone
        Selection.Tables(1).Columns(1).Borders(wdBorderLeft).LineStyle = wdLineStyleNone
        Selection.Tables(1).Columns(1).Borders(wdBorderBottom).LineStyle = wdLineStyleNone
        Selection.Tables(1).Columns(1).Borders(wdBorderRight).LineStyle = wdLineStyleNone
        Selection.Tables(1).Columns(1).Borders(wdBorderDiagonalDown).LineStyle = wdLineStyleNone
        Selection.Tables(1).Columns(1).Borders(wdBorderDiagonalUp).LineStyle = wdLineStyleNone
     
        Selection.Tables(1).Columns(2).Borders(wdBorderTop).LineStyle = wdLineStyleNone
        Selection.Tables(1).Columns(2).Borders(wdBorderLeft).LineStyle = wdLineStyleNone
        Selection.Tables(1).Columns(2).Borders(wdBorderBottom).LineStyle = wdLineStyleNone
        Selection.Tables(1).Columns(2).Borders(wdBorderRight).LineStyle = wdLineStyleNone
        Selection.Tables(1).Columns(2).Borders(wdBorderDiagonalDown).LineStyle = wdLineStyleNone
        Selection.Tables(1).Columns(2).Borders(wdBorderDiagonalUp).LineStyle = wdLineStyleNone
     
        Selection.Tables(1).Columns(3).Borders(wdBorderTop).LineStyle = wdLineStyleNone
        Selection.Tables(1).Columns(3).Borders(wdBorderLeft).LineStyle = wdLineStyleNone
        Selection.Tables(1).Columns(3).Borders(wdBorderBottom).LineStyle = wdLineStyleNone
        Selection.Tables(1).Columns(3).Borders(wdBorderRight).LineStyle = wdLineStyleNone
        Selection.Tables(1).Columns(3).Borders(wdBorderDiagonalDown).LineStyle = wdLineStyleNone
        Selection.Tables(1).Columns(3).Borders(wdBorderDiagonalUp).LineStyle = wdLineStyleNone
     
        Selection.Tables(1).Rows(2).Borders(wdBorderTop).LineStyle = wdLineStyleNone
        Selection.Tables(1).Rows(2).Borders(wdBorderLeft).LineStyle = wdLineStyleNone
        Selection.Tables(1).Rows(2).Borders(wdBorderBottom).LineStyle = wdLineStyleNone
        Selection.Tables(1).Rows(2).Borders(wdBorderRight).LineStyle = wdLineStyleNone
        Selection.Tables(1).Rows(2).Borders(wdBorderDiagonalDown).LineStyle = wdLineStyleNone
        Selection.Tables(1).Rows(2).Borders(wdBorderDiagonalUp).LineStyle = wdLineStyleNone
     
     
    ''Format de la hauteur de ligne
        Selection.Tables(1).Rows(1).Select
        With Selection.ParagraphFormat
            .SpaceBefore = 1
            .SpaceBeforeAuto = False
            .SpaceAfter = 1
            .SpaceAfterAuto = False
            .LineSpacingRule = wdLineSpaceSingle
            .LineUnitBefore = 0
            .LineUnitAfter = 0
        End With
     
        Selection.Tables(1).Rows(3).Select
        With Selection.ParagraphFormat
            .SpaceBefore = 0.1
            .SpaceBeforeAuto = False
            .SpaceAfter = 0.1
            .SpaceAfterAuto = False
            .LineSpacingRule = wdLineSpaceSingle
            .LineUnitBefore = 0
            .LineUnitAfter = 0
        End With
     
         Selection.Tables(1).Rows(2).Select
        With Selection.ParagraphFormat
            .SpaceBefore = 4
            .SpaceBeforeAuto = False
            .SpaceAfter = 4
            .SpaceAfterAuto = False
            .LineSpacingRule = wdLineSpaceSingle
            .LineUnitBefore = 0
            .LineUnitAfter = 0
        End With
     
     
    End Sub

  13. #13
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    376
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 376
    Points : 596
    Points
    596
    Par défaut
    Bonjour,

    Pour répondre à ta question concernant les blocs de construction, non il n'y a pas de différences entre 2016 et 365, du point de vue macro. Il faut juste savoir que tant que les blocs n'ont pas été utilisés (sauf s'ils sont dans le modèle), il faut les charger.

    Maintenant concernant ta macro, je ne comprends pas toutes ces lignes de code inutiles.
    Tu commences par dire que tu veux des bordures. A titre d'info quand on veut des bordures identiques sur' tous les côtés, inutile de faire 4 lignes.
    Mais surtout c'est que tu as plein de lignes (sous l'indication Format des bordures) pour les retirer... ???

    Idem pour les couleurs : j'en mets, je retire, je remets...

    voici un exemple, bcp plus court, pour arriver au même résultat.

    Sub TableMult2()
    Dim oTbl As Table, cellule As Cell

    Set oTbl = ActiveDocument.Tables.Add(Range:=Selection.Range, NumRows:=3, NumColumns:=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
    With oTbl
        .PreferredWidth = CentimetersToPoints(14)
        .Rows.Alignment = wdAlignRowRight
        .Borders.Enable = False
     
        With .Columns(1)
            .PreferredWidth = CentimetersToPoints(12.2)
            .Cells(2).Range.Text = "Mets ici ton texte personnalisé...?"
        End With
        .Columns(2).PreferredWidth = CentimetersToPoints(0.4)
         With .Columns(3)
            .PreferredWidth = CentimetersToPoints(1.5)
            .Cells(2).Range.Text = "Perso"
        End With
     
        For Each cellule In .Columns(1).Cells
            cellule.Range.Font.Bold = True
            cellule.Range.ParagraphFormat.Alignment = wdAlignParagraphLeft
        Next
     
        For Each cellule In .Columns(3).Cells
            cellule.Range.Font.Bold = True
            cellule.Range.ParagraphFormat.Alignment = wdAlignParagraphCenter
        Next
     
        .Rows(2).Shading.BackgroundPatternColor = -671023309
        .Rows(2).Cells(2).Shading.BackgroundPatternColor = wdColorWhite
     
    End With
     
    End Sub
    m@rina

  14. #14
    Membre à l'essai
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Septembre 2020
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs

    Informations forums :
    Inscription : Septembre 2020
    Messages : 25
    Points : 22
    Points
    22
    Par défaut
    hello

    le sujet ayant été déplacé je n'avais pas vu ta réponse. Un grand merci pour cette simplification qui m'aide a comprendre le VBA.

    Y a plein de lignes inutiles oui. Avec les 2 dernières lignes concernant l'épaisseur des bordures, je cherchais à créer un espace entre ma dernière ligne de tableau et le texte que j'insère juste en-dessous (comme on le fait avec les paramètres de paragraphe).

    Vu que ce n'est pas possible j'avais créé une ligne de tableau vierge, invisible...mais c'est une fausse bonne idée car l'utilisateur risque de cliquer involontairement dedans et de s'y perdre.

    Ca ma va comme ca

Discussions similaires

  1. [XL-2003] insertion de lien hypertexte dans une zone de texte par un bouton parcourir
    Par csophie49 dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 22/02/2012, 17h55
  2. Réponses: 5
    Dernier message: 23/01/2010, 20h57
  3. Réponses: 3
    Dernier message: 03/08/2007, 17h34
  4. Effacer une zone de text par l'intermediaire d'un bouton
    Par claire_cartier dans le forum GTK+ avec C & C++
    Réponses: 25
    Dernier message: 18/04/2007, 15h59
  5. Remplir une zone de texte par rapport à une checkbox
    Par beegees dans le forum Général JavaScript
    Réponses: 43
    Dernier message: 04/09/2006, 17h01

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