XL 2016 Bordures et mise en forme VBA

sebastien450

XLDnaute Occasionnel
Bonjour,
J'ai le code suivant qui marche, mais je me demande si une optimisation est possible... ?

VB:
For x = 4 To 3500 Step 8 ' A partir du début par pas de 8 je fais de la mise en forme
    With Range(Cells(6, x), Cells(221, x))
    .Borders(xlEdgeLeft).LineStyle = xlContinuous
    .Borders(xlEdgeLeft).Weight = xlHairline
    End With
Next x
For x = 6 To 222 Step 8 'par par de 8 je vais faire les doubles lignes
    With Range(Cells(x, 6), Cells(x, jour + 300)) 'A partir de la colonne du jour par pas de 8 je fais de la mise en forme
        .Borders(xlEdgeTop).LineStyle = xlDouble
        .Borders(xlEdgeTop).Weight = xlThick
    End With
Next x

Merci

Sébastien450
 

job75

XLDnaute Barbatruc
Chez moi cette macro s'exécute en 11,5 secondes :
VB:
Sub Bordures()
Dim n&
Application.ScreenUpdating = False
Cells.Borders.LineStyle = xlNone 'RAZ
With [D6:EDO221]
    For n = 1 To 217 Step 8
        .Rows(n).Borders(xlEdgeTop).LineStyle = xlDouble
    Next
    For n = 1 To 3497 Step 8
        .Columns(n).Borders(xlEdgeLeft).Weight = xlHairline
    Next
End With
End Sub
 

Hasco

XLDnaute Barbatruc
Repose en paix
Bonsoir,

sur la base de la macro de @job75 :
VB:
Sub Bordures()
    Dim n&
    Dim p1 As Range, p2 As Range
    Set p1 = Range("D6")
    Set p2 = Range("D6")
    Application.ScreenUpdating = False
    With Range("D6:EDO221")
        .Borders.LineStyle = xlNone
        For n = 1 To 217 Step 8
            Set p1 = Union(p1, .Rows(n))
        Next
        For n = 1 To 3497 Step 8
            Set p2 = Union(p2, .Columns(n))
        Next
    End With
    p1.Borders(xlEdgeTop).LineStyle = xlDouble
    p2.Borders(xlEdgeLeft).Weight = xlHairline
    Application.ScreenUpdating = True
End Sub

Cordialement
 

job75

XLDnaute Barbatruc
Bonjour Roblochon,

Oui sur cet exemple en utilisant Union c'est plus rapide : 0,4 seconde.

Et cela parce qu'il n'y a pas trop de plages disjointes à unir.

Sur une plage plus grande, par exemple D6:EDO30000 :

- macro du post #3 => 46 secondes

- macro du post #4 => 70 secondes.
 

Discussions similaires

Réponses
8
Affichages
640

Statistiques des forums

Discussions
312 074
Messages
2 085 070
Membres
102 770
dernier inscrit
mathieu.lemaitre