Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

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
665
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…