Ajouter une Bordure de Titre

Résolu

Bonjour à toutes et à tous,

Feuille Propositions menus midi retrait ! ligne 1 : Le titre s'affiche bien et la bordure se fait correctement sans l'intérieur dans les différentes colonnes. Cette première ligne est parfaite.

Toutes les 14 lignes : le titre s'affiche bien mais la bordure est absente. 
qui va pouvoir m'aider à résoudre ce problème ? Ensuite, cette absence résolue, je m'attaquerai à remplir les lignes et colonnes suivantes.

D'avance merci pour votre aide. Bonnes fin de journée à toutes et à tous. Prenez bien soin de vous. Cordialement.

Quand cjoint refonctionnera, je vous joindrai le fichier.

Procédure GénPropMMR :

Option Explicit

Sub GénPropMMR()

'Déclaration des variables. nm = numéro menu. Je représente le nombre de lignes, excepté la ligne titre;le décompte commence donc à la ligne 2. DatJ = Date du jour.

Dim Lig As Long, Col As Long, nm As Long, J As Long
Dim Datj As Date

    ' ScreenUpdating True si la mise à jour de l’écran est activée. Type de données Boolean en lecture-écriture.
    Application.ScreenUpdating = False
    
    'Initialisations. WorksheetFunction.WorkDay : Renvoie un nombre représentant une date qui est le nombre de jours ouvrés indiqué avant ou après une date (date de début).
    'Les jours ouvrés excluent les week-ends et les jours de congés. Utilisez la fonction WORKDAY pour exclure les week-ends et les jours de congés lorsque vous calculez les
    'dates d'échéance des factures, les heures de livraison attendues ou le nombre de jours ouvrés effectués. 12 représente le nombre de mois, 31 équivaut au nombre de jours
    'maximum d'un mois. nm =1 : le numéro menu commence à 1.
    Datj = WorksheetFunction.WorkDay(DateSerial(Range("Année_en_Cours") - 1, 12, 31), 1)
    nm = 1
    
    'Remplissage. Worksheet("Propositions MMR") : il s'agit de la feuille dont le nom est indiqué à l'intérieur de la parenthèse.
    With Worksheets("Propositions menus midi retrait")
        'B:H : représente les colonnes de la feuille Propositions MMR qui seront à remplir. ClearContents : Masquer toutMéthode ClearContents telle qu'elle s'applique à l'objet
        'Range. Efface les formules de la plage.
        .Range("B:H").ClearContents
        'For  Lig = 1 to 532 Step 14 : 1 to 532 : reprense le nombre de lignes à remplir (y compris la ligne titre). Step : Le mot clé Step est employé dans les contextes suivants :
        'For...Next, instruction.
        For Lig = 1 To 532 Step 14
        Call AjouterBordureTitre
            'For Col = 2 to 8 : Pour les colonnes 2 à 8 (la colonne A n'est pas prise en compte, le décompte commence donc à la colonne B jusqu'à la colonne H incluses.
            For Col = 2 To 8
                'En tête. À la ligne 1 (nom compris la ligne titre), va écrire MMR et formater le numéro menu (nm);À la ligne 2, (immédiatement après la précédente), va écrire la date
                'du jour.
                .Cells(Lig + 0, 1) = "Propositions menus midi retraite"
                
                 
                 'Incrémentations pour menu suivant.
                 'nm = nm + 1
                 'Datj = WorksheetFunction.WorkDay(Datj, 1)
                 'If Year(Datj) > Range("Année_en_Cours").Value Then Exit For
            Next Col
        Next Lig
    End With
'Call AjouterBordureTitre
End Sub

Procédure AjouterBordureTitre

Option Explicit

Sub AjouterBordureTitre()
Dim Lig As Long, Col As Long, nm As Long, J As Long
Dim Datj As Date
'
' AjouterBordureTitre Macro
'

'
 
    Range("A1:H1").Select
 'For Lig = 1 To 532 Step 14
    Selection.Borders(xlDiagonalDown).LineStyle = xlNone
    Selection.Borders(xlDiagonalUp).LineStyle = xlNone
    With Selection.Borders(xlEdgeLeft)
        .LineStyle = xlContinuous
        .ColorIndex = xlAutomatic
        .TintAndShade = 0
        .Weight = xlThick
    End With
    With Selection.Borders(xlEdgeTop)
        .LineStyle = xlContinuous
        .ColorIndex = xlAutomatic
        .TintAndShade = 0
        .Weight = xlThick
    End With
    With Selection.Borders(xlEdgeBottom)
        .LineStyle = xlContinuous
        .ColorIndex = xlAutomatic
        .TintAndShade = 0
        .Weight = xlThick
    End With
    With Selection.Borders(xlEdgeRight)
        .LineStyle = xlContinuous
        .ColorIndex = xlAutomatic
        .TintAndShade = 0
        .Weight = xlThick
    End With
    For Lig = 1 To 532 Step 14
    Selection.Borders(xlInsideVertical).LineStyle = xlNone
    Selection.Borders(xlInsideHorizontal).LineStyle = xlNone
    Range("A4").Select
Next Lig
End Sub

Modération : merci de mettre en forme le message et le code comme expliqué ici.

Windows / Chrome 13,1.0.0.0


BUDGETS

19 réponses

Résumé de la discussion

Problème récurrent dans la macro GénPropMMR sur la feuille Propositions menus midi retrait, où la première ligne est correctement bordée mais les titres répétés toutes les 14 lignes perdent la bordure intérieure. Des conseils pertinents suggèrent d’agir uniquement sur la bordure basse, d’effacer la plage avant de relancer et d’ajouter l’effacement des bordures horizontales intérieures pour que la bordure soit dense et continue sur toutes les occurrences. D'autres interventions évoquent l'emploi possible de Copy pour répliquer les bordures sur les lignes suivantes et recommandent de consulter la documentation Microsoft sur les propriétés des bordures d'Excel.

Bobot (l’IA à votre service)
  1. Bonjour,

    Allez-vous enfin  nous expliquer pourquoi vous tenez tant à faire la mise en forme par vba sur une plage constante ?

    Cela pourrait se justifier si votre plage était variable en nombre de lignes et de colonnes, mais ce n'est pas le cas, n'est-ce pas ? Seul le contenu de quelques cellules doit évoluer.

    Comme je vous l'ai dit la mise en forme complète et définitive prends moins d'une minute alors que vous êtes sur le vba depuis plusieurs semaines !

    0
    1. Bonjour Charles,

      Je souhaite à faire la mise en forme par VBA afin d'apprendre comment cela se fait. Manuellement, je sais. C'est toujours utile d'approfondir ses connaissances en programmation,  même si je ne suis pas un expert.

      https://www.cjoint.com/c/NLkmslPQcC5


      0
      1. Bonjour,

        L'intention est louable, mais vos lacunes en Excel et Vba sous pénalisent.

        On peut tenter d'y aller pas à pas.

        Donnez l'instruction vba pour (une seule suffit) :

        1) Mettre les bordures épaisses autour de la cellule A1

        2) Mettre les bordures épaisses autour des cellules A1 à H1

        Donnez différentes façons pour désigner la cellule A

        0
        1. Bonjour Charles,

          Mettre les bordures épaisses autour des cellules A1 à H1 :

          Range("A1:H1").Select Sélection des cellules;

          .Weight = xlThick Bordures épaisses 

          Donnez différentes façons pour désigner la cellule A : je ne sais pas (une première possible : range("A").select. d'autres : aucune idée.

          J'ai pensé également à copier les cellules A1:H1 avec la bordure dans le presse-papier puis avec step14 d'une part et Paste d'autre part à copier le contenu du presse papier.


          0
          1. Re,

            Si vous vous contentez de recopier partiellement l'enregistreur de macros vous allez avoir du mal à faire ce que vous voulez. Sans les bases vous ne pourrez pas finaliser votre feuille Proposition MMR. De toutes façons, il faut y aller par étapes/

            Faites et testez une procédure qui met les bordures autour des cellules de A1 à H1

            0
            1. Ceci a déjà été fait avec la macro AjouterBordureTitre et le résultat me convient.


              0
              1. Re,

                Très bien.

                0
            2. Bonsoir Charles,

              Avez-vous regardé la macro AjouterBordureTitre ? Peut-on supprimer certaines lignes et, si oui, lesquelles ? 


              0
              1. Bonjour,

                Avez-vous regardé l'aide de Microsoft ?

                https://learn.microsoft.com/fr-fr/office/vba/api/excel.borders

                0
              2. @charles

                J'ai le sentiment d'avoir fait tout ce qui était possible sans obtenir le résultat escompté malgré l'aide du lien proposé dans votre précédent message. Alors merci de me proposer votre solution afin que toutes les 14 lignes  la bordure sorte. D'avance merci. Je ne vois pas d'inconvénients à ce que , si le jugez utile, de faire appel à quelqu'un.

                J'ai testé, sans succès, à partir du lien indiqué dans votre message, l'exemple génère une bordure simple autour de toutes les cellules de la plage. ws: variable non définie.

                0
              3. @BUDGETS

                Bonjour,

                J'ai testé, sans succès, à partir du lien indiqué dans votre message, l'exemple génère une bordure simple autour de toutes les cellules de la plage. ws: variable non définie.

                Oui, c'est bien ce qui est indiqué dans l'aide. Que faudrait-il faire ensuite pour ne garder que les bordures extérieures ? Avez-vous décortiqué ce que vous a donné l'enregistreur de macros ?

                Je réitère ma question : quelles sont les différentes façons de désigner une cellule, par exemple la cellule B3 ? Vous avez les exemples dans  votre fichier.

                0
            3. Bonjour Charles,

              J'ai imprimé votre lien. Je vais les tester pour voir  ce que cela donne.


              0
              1. Bonjour Charles,

                Oui, c'est bien ce qui est indiqué dans l'aide. Que faudrait-il faire ensuite pour ne garder que les bordures extérieures ? Avez-vous décortiqué ce que vous a donné l'enregistreur de macros ? Indiqué dans l'aide : je n'ai pas compris ce que vous voulez dire. faire ensuite pour ne garder que les bordures extérieures? à mon avis, supprimer certaines instructions. Enregistreur de macros :je n'ai as compris pourquoi il y a tant d'instructions et, voire même, tant de répétitions.


                0
                1. Bonjour de nouveau,

                  Vous avez dit : J'ai testé, sans succès, à partir du lien indiqué dans votre message, l'exemple génère une bordure simple autour de toutes les cellules de la plage.

                  Sans succès ? Vous avez une erreur ou le résultat n'est pas celui que vous voulez ?

                  Faites un fichier séparé avec ce code et postez le

                  0
              2. Bonjour Charles,

                Le fichier séparé que vous avez demandé. Il y a des erreurs. Pour l'instant, je ne sais pas si le résultat est celui que je veux.

                https://www.cjoint.com/c/NLqiF11ME55


                0
                1. Bonjour,

                  C'est un début.

                  1) En regardant mieux l'aide vous auriez pu voir que ws représente le Worksheet, c'est à dire la feuille sur laquelle vous voulez travailler, ici Feuil1

                  2) Ensuite, même sur 3 lignes vous avez réussi à mal recopier le code proposé, il y a pourtant un bouton copier sur le site, vérifiez !

                  0
              3. Le nouveau fichier rectifié qui sort une erreur de syntaxe.

                https://www.cjoint.com/c/NLqjJcb6FC5

                À partir de samedi prochain, vous serez absent, ce sont les vacances de Noël ? Savez-vous si vous pourrez être présent à nouveau à partir du lundi 06 janvier 2025 ?


                0
                1. Re,

                  Votre niveau est vraiment très faible.

                  Voici une syntaxe correcte : modifiez puis ajoutez le code pour mettre une bordure épaisse rouge en bas

                  Sub Bordures()
                  Dim RNG As Range
                      Set RNG = Worksheets("Feuil1").Range("B6", "D8")
                      'Bordures simples
                      With RNG.Borders
                          .LineStyle = xlContinuous
                          .Weight = xlThin
                      End With
                  End Sub
                  

                  J'ai une prolongation jusqu’à mi-janvier pour assurer un biseau avec Dimitri mon successeur.

                  0
              4. Cela semble ne pas donner le résultat souhaité.

                https://www.cjoint.com/c/NLqlnFXHaT5


                0
                1. Re,

                  Pas mal, mais il faut agir uniquement sur la bordure basse, regardez bien l'aide.

                  Effacez la plage avant de relancer, sinon vous gardez la mise en forme précédente.

                  Et maintenant rajoutez l'effacement des bordures horizontales intérieures

                  0
              5. Dans quelle partie de l'aide dois-je regarder pour remplir uniquement la partie basse ?

                Ce n'est pas sûr que ce soit ce que vouliez quant à l'effacement.

                https://www.cjoint.com/c/NLqpgz8mzD5

                "assurer un biseau avec Dimitri mon successeur." : c'est quoi un biseau ?


                0
                1. Re,

                   Dans le lien que je vous ai déjà mis

                  https://learn.microsoft.com/fr-fr/office/vba/api/excel.borders

                  Un biseau, il prend peu à peu ses fonctions et je me désengage peu à peu.

                  0
              6. Borders :variable non définie.

                https://www.cjoint.com/c/NLqpobTQFz5


                0
                1. Re,

                  Il y a de l'idée.

                  Attention avec la clause with, il faut un point au début de l’instruction suivante

                  Voici une possibilité :

                  Sub Bordures()
                  Dim RNG As Range
                      Set RNG = Worksheets("Feuil1").Range("B6", "D8")
                      'Bordures simples
                      With RNG.Borders
                          .LineStyle = xlContinuous
                          .Weight = xlThin
                      End With
                      With RNG
                          'Bordures inférieure et horizontale intérieure
                          .Borders(xlEdgeBottom).Weight = xlThick
                          .Borders(xlEdgeBottom).Color = RGB(255, 0, 0)
                          .Borders(xlInsideHorizontal).LineStyle = xlNone
                      End With
                  End Sub
                  

                  Maintenant, donnez plusieurs façons de désigner une plage de cellules

                  0
              7. Cela  correspond-il  ) vos souhaits ?

                Place de cellules :A1:F25; "A1","F25";et peut être A1.F25

                https://www.cjoint.com/c/NLqq52T1Ih5


                0
                1. Re,

                  Pas tout à fait, vous avez des exemples dans le fichier Propositions et là

                  https://excel-pratique.com/fr/vba/selections

                  Donc donnez différentes façons de désigner la plage B3:F3 (par exemple)

                  0
              8. "Pas tout à fait" : cela concerne ce que vous attendiez de la macro ? Ou, plus plausible, la façon de designer une plage de cellules.

                range("B3:F3).select

                cells(3,2).select

                cells(3,6).select

                Columns("B:F").select

                Dans ma réponse précédente, j'ai oublié encore une fois d'ajouter .select

                Dans Sélections, quel est le chapitre que je dois consulter ?

                Il y a un fichier Propositions ?

                Personnellement, je trouve cette aide Sélections très claire et, chose très rare, très commentée. Elle donne des exemples et la manière de créer. Bravo.


                0
                1. Re,

                  Dans la façon de désigner une cellule, on va faire simple pour commencer la cellule différentes façons de désigner la cellule A1

                  Le fichier propositions est le dernier que j'ai transmis ou celui sur lequel vous avez travaillé

                  0
                2. @charles

                  Bonjour Charles,

                  Dans le lien concernant l'aide que vous m'avez indiqué, j'ai imprimé l'article Objet Borders (Excel) mais maintenant je n'arrive pas à le retrouver. Merci de m'aider. 

                  0
                3. Bonjour,

                  Effectivement pour désigner une cellule on va utiliser soit Range soit Cells.

                  Cells est plus facile à utiliser dans une boucle.

                  Dans le fichier de test pour sélectionner la plage B6 à D6 (1 ligne 3 colonnes) on peut faire

                  Range("B6:D6") ou Range("B6","D6")

                  avec Cells on ne peut pas désigner directement une plage, il faut passer par Range en donnant les deux extrêmes comme ceci

                  Range(Cells(6,2),Cells(6,4))

                  ou mieux en désignant la première cellule, Cells(6,2) et en redimensionnant cette zone avec Resize en indiquant le nombre de lignes et de colonnes comme ceci

                  Cells(6,2).Resize(1,3), on travaille alors sur la zone voulue (1 lignes 3 colonnes)

                  Dans le fichier de test bordures, essayer de remplacer les Range par Cells, on verra les boucles après

                  0
                4. @charles

                  Bonjour Charles,

                  Merci pour vos instructions. Je vais voir cela en fin d'après-midi. Merci de répondre à mon message de ce jour numéro30 de 9 heures 41.

                  0
                5. @BUDGETS

                  Re,

                  Vous avez dit : Dans le lien concernant l'aide ...  j'ai imprimé l'article Objet Borders (Excel) mais maintenant je n'arrive pas à le retrouver. Merci de m'aider. 

                  ???

                  C'est le lien ou le papier que vous n'arrivez pas à retrouver ?

                  0
              9. "Le fichier propositions est le dernier que j'ai transmis " : quel est son nom exact et sa date d'envoi ou le numéro du message ?


                0
                1. C'est le lieu où Objet Borders (Excel) se trouve dans le lien que vous m'avez indiqué (https://excel-pratique.com/fr/vba/selections)


                  0
                  1. Re,

                    C'est dans ce lien là :

                    https://learn.microsoft.com/fr-fr/office/vba/api/excel.borders

                    0
                2. Merci.

                  Bones soirée, nuit et continuation. 


                  0