XL 2013 Code VBA simplifié pour bordures de tableau

Chrystel01

XLDnaute Occasionnel
Bonjour,

J'ai enregistré une macro automatiquement pour générer les bordures d'un tableau.
Le code généré automatiquement me semble très long et j'aimerais le simplifier car il est destiné à être intégré dans une macro plus longue.
La dernière ligne est mouvante en fonction du nb de lignes qui seront intégrées dans le tableau (je devrais pouvoi arriver à gérer ce point).

Pourriez-vous m'aider svp ?

Je vous remercie ppur votre aide et vous souhaite une bonne semaine.

Chrystel
 

Pièces jointes

  • Bordures en vba.xlsm
    416.6 KB · Affichages: 18
Solution
Re

Staple ==> oui pour K.B.

@Chrystel01

Je te propose :
VB:
Sub MAJ_Bordure_V3()
Application.ScreenUpdating = False
Dim Derlig&
Dim MaZoneRange1 As Range, MaZoneRange2 As Range

With Worksheets("TAB_RECAP")
    Derlig = .Range("A" & Rows.Count).End(xlUp).Row
    Set MaZoneRange1 = Union(.Range("A5:O" & Derlig), .Range("P5:Y" & Derlig), .Range("Z5:AK" & Derlig), .Range("AL5:AV" & Derlig))
    Set MaZoneRange2 = Union(.Range("O5:O" & Derlig), .Range("Y5:Y" & Derlig), .Range("AK5:AK" & Derlig), .Range("AV5:AV" & Derlig))
End With

With MaZoneRange1
    .Borders(xlEdgeLeft).LineStyle = 1                              '7
    .Borders(xlEdgeTop).LineStyle = 1                               '8
    .Borders(xlEdgeBottom).LineStyle = 1...

Staple1600

XLDnaute Barbatruc
Bonsoir le fil

Pardon, mais le temps c'est long
VB:
Sub Pourquoi()
Dim t, r As Range, i
Set r = Range("A5:O11,P5:Y11,Z5:AK11,AL5:AV11")
t = Array(Array(7, 1), Array(8, 1), Array(9, 1), Array(10, 1), Array(11, 1))
For i = 1 To 4
r.Borders(t(i)(0)).LineStyle = t(i)(1)
Next
End Sub
 

Phil69970

XLDnaute Barbatruc
Re

Et pour les parties en gras ....

VB:
Sub MAJ_Bordure_V2()
With Range("A5:O11,P5:Y11,Z5:AK11,AL5:AV11")
    .Borders(7).LineStyle = 1
    .Borders(8).LineStyle = 1
    .Borders(9).LineStyle = 1
    .Borders(10).LineStyle = 1
    .Borders(11).LineStyle = 1
    Range("O5:O11,Y5:Y11,AK5:AK11,AV5:AV11").Borders(10).LineStyle = 7
    Range("A5:AV11").Borders(8).LineStyle = 7
    Range("A5:AV11").Borders(9).LineStyle = 7
End With
End Sub

@Phil69970
 
Dernière édition:

Staple1600

XLDnaute Barbatruc
Bonsoir Phil69070

Mon code du message#3 était juste une conséquence de mon désoeuvrement "confinique"
Et non point une "critique" de ton code ;)
C'est plus parlant pour les novices de garder les vrais noms type
xlEdgeLeft
Mais fallait que je titille mon VBE pour que le temps passe plus vite.
 

Phil69970

XLDnaute Barbatruc
Bonsoir Staple

Je ne l'ai pas pris pour une critique mais je me suis rendu compte que je n'avais pas tout à fait répondu à la demande de Chrystel.... et comme elle voulait du condensé j'en ai profité pour .... condensé.:)
A titre personnel c'est vrai que j'aurais mis dans mon code le vrai nom et non pas sa version numérique....
Suivant le retour de Chrystel je changerais si elle le souhaite....

@Phil69970
 
Dernière édition:

Chrystel01

XLDnaute Occasionnel
Bonjour Phil69970, Bonjour Staple 1600
et bonjour le Forum,

Je vous remercie pour vos réponses.
J'ai testé vos 2 1ères suggestions qui fonctionnent parfaitement.
Je maitrise peu le VBA alors j'ai plus de facilités pour comprendre la suggestion de Phil69970 qui est plus simple pour moi car elle s'apparente plus à l'enregistrement automatique de macro.

Je voulais tester la 2ème proposisiton de Phil69970 qui m'intéresse vivement car elle surligne un peu plus certaines bordures mais je n'arrive pas à faire fonctionner le code (peut être car il n'y a plus la notion type .Borders(xlEdgeLeft) ?)
D'autre part, à quoi correspond SVP le n° à droite de "borders" ? ex .Borders(7) ?

Merci encore pour vos retours :)
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Bonsoir à tous,

Le code suivant devrait le faire tout en restant assez lisible (avec les bordures des cadres plus épaisses) :
VB:
Sub MAJ_Bordure()
Dim xArea
   Application.ScreenUpdating = False
   For Each xArea In Range("A5:O11,P5:Y11,Z5:AK11,AL5:AV11").Areas
       xArea.Borders.LineStyle = xlContinuous
       xArea.Borders.Weight = xlMedium
       xArea.Borders(xlInsideHorizontal).LineStyle = xlLineStyleNone
       xArea.Borders(xlInsideVertical).Weight = xlThin
   Next xArea
End Sub
 

Pièces jointes

  • Chrystel01- Bordures- v1.xlsm
    16.4 KB · Affichages: 8
Dernière édition:

Phil69970

XLDnaute Barbatruc
@Chrystel01

Le même code en en version moins condensé

VB:
Sub MAJ_Bordure_V3()
With Range("A5:O11,P5:Y11,Z5:AK11,AL5:AV11")
    .Borders(xlEdgeLeft).LineStyle = 1          '7
    .Borders(xlEdgeTop).LineStyle = 1           '8
    .Borders(xlEdgeBottom).LineStyle = 1        '9
    .Borders(xlEdgeRight).LineStyle = 1         '10
    .Borders(xlInsideVertical).LineStyle = 1    '11
    Range("O5:O11,Y5:Y11,AK5:AK11,AV5:AV11").Borders(xlEdgeRight).LineStyle = 7     '10
    Range("A5:AV11").Borders(xlEdgeTop).LineStyle = 7                               '8
    Range("A5:AV11").Borders(xlEdgeBottom).LineStyle = 7                            '9
End With
End Sub

Borders(7) veut dire Borders(xlEdgeLeft)
J'ai mis en bout de ligne la version numérique abrégé de chaque nom....

*J'ai modifié le code du post # qui devrait fonctionner maintenant

@Phil69970
 

Chrystel01

XLDnaute Occasionnel
Merci beaucoup !!!
Toutes vos propositions sont courtes en restant compréhensibles :)
Je voulais surtout éviter la trentaine de lignes créées automatiquement...
et pouvoir être capable de refaire des bordures simplement sur d'autres cas que je pourrais rencontrer.
Donc c'est parfait et je vous remercie beaucoup pour votre aide à tous car j'ai appris en plus différentes méthodes !!!
 

Staple1600

XLDnaute Barbatruc
Re, Bonsoir mapomme

[mode humour post G.]
Pour ma part, je me suis fait violence car comme disait il y a longtemps Peter et Kate
Hans plays with Lotte, Lotte plays with Jane Jane plays with Willi, Willi is happy again Suki plays with Leo, Sacha plays with Britt Adolf builts a bombfire, Enrico plays with it It's a knockout If looks could kill, they probably will In games without frontiers-war without tears Games without frontiers-war without tears
J'ai donc fait du Game With Borders et en lieu et place de Kate B.
j'étais accompagné de Valéria Bin Aire (qui chante beaucoup moins bien) ;)
[/mode humour post G.]
 

Staple1600

XLDnaute Barbatruc
Re

=>mapomme
Sion, c'est plus court et l'effet est le même non?
VB:
Sub MAJ_Bordure_mapomme_bis()
Dim xArea
   Application.ScreenUpdating = False
   For Each xArea In Range("A5:O11,P5:Y11,Z5:AK11,AL5:AV11").Areas
    xArea.Borders.Weight = 2
    xArea.Borders(xlInsideHorizontal).LineStyle = xlLineStyleNone
    xArea.Borders(xlInsideVertical).Weight = xlThin
   Next xArea
End Sub
 

Discussions similaires

Statistiques des forums

Discussions
312 242
Messages
2 086 532
Membres
103 243
dernier inscrit
SAH