Ajouter une Bordure de Titre

Résolu
BUDGETS Messages postés 1608 Date d'inscription   Statut Membre Dernière intervention   -  
BUDGETS Messages postés 1608 Date d'inscription   Statut Membre Dernière intervention   -

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


A voir également:

19 réponses

charles
 

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
BUDGETS Messages postés 1608 Date d'inscription   Statut Membre Dernière intervention  
 

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
charles
 

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
BUDGETS Messages postés 1608 Date d'inscription   Statut Membre Dernière intervention  
 

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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
charles
 

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
BUDGETS Messages postés 1608 Date d'inscription   Statut Membre Dernière intervention  
 

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


0
charles
 

Re,

Très bien.

0
BUDGETS Messages postés 1608 Date d'inscription   Statut Membre Dernière intervention  
 

Bonsoir Charles,

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


0
charles
 

Bonjour,

Avez-vous regardé l'aide de Microsoft ?

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

0
BUDGETS Messages postés 1608 Date d'inscription   Statut Membre Dernière intervention   > 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
charles > BUDGETS Messages postés 1608 Date d'inscription   Statut Membre Dernière intervention  
 

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
BUDGETS Messages postés 1608 Date d'inscription   Statut Membre Dernière intervention  
 

Bonjour Charles,

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


0
BUDGETS Messages postés 1608 Date d'inscription   Statut Membre Dernière intervention  
 

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
charles
 

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
BUDGETS Messages postés 1608 Date d'inscription   Statut Membre Dernière intervention  
 

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
charles
 

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
BUDGETS Messages postés 1608 Date d'inscription   Statut Membre Dernière intervention  
 

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
charles
 

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
BUDGETS Messages postés 1608 Date d'inscription   Statut Membre Dernière intervention  
 

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

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


0
charles
 

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
BUDGETS Messages postés 1608 Date d'inscription   Statut Membre Dernière intervention  
 

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
charles
 

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
BUDGETS Messages postés 1608 Date d'inscription   Statut Membre Dernière intervention  
 

Borders :variable non définie.

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


0
charles
 

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
BUDGETS Messages postés 1608 Date d'inscription   Statut Membre Dernière intervention  
 

Cela  correspond-il  ) vos souhaits ?

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

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


0
charles
 

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
BUDGETS Messages postés 1608 Date d'inscription   Statut Membre Dernière intervention  
 

"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
charles
 

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
BUDGETS Messages postés 1608 Date d'inscription   Statut Membre Dernière intervention   > 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
charles
 

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
BUDGETS Messages postés 1608 Date d'inscription   Statut Membre Dernière intervention   > 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
charles > BUDGETS Messages postés 1608 Date d'inscription   Statut Membre Dernière intervention  
 

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
BUDGETS Messages postés 1608 Date d'inscription   Statut Membre Dernière intervention  
 

"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
BUDGETS Messages postés 1608 Date d'inscription   Statut Membre Dernière intervention  
 

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
charles
 

Re,

C'est dans ce lien là :

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

0
BUDGETS Messages postés 1608 Date d'inscription   Statut Membre Dernière intervention  
 

Merci.

Bones soirée, nuit et continuation. 


0