Re: Range en VBA / Manipulation des Borders en Boucle sur Range
Bonjour Greg, P@tB, le Forum...
Belle journée ici, surtout après la soirée d'hier soir , on souhaite la même chose à l'OM !!!
Bon, revenons à l'Objet Range pour une mise en forme de Border. Il n'y a pas longtemps, j'ai fait Lien supprimé qui avait besoin de formattage en cours d'un traitement en boucle...
Ce Fil étant précisément sur la mise en forme d'une Range avec des Borders, je me permets de m'incruster pour vous présenter mes recherches la dessus ...
Attention la réponde de P@tB est largement suffisante pour la question de Greg, mais en général on ne met pas qu'un Border à Gauche, mais on veut encadrer la plage... Une première méthode, of course, consiterait à faire çà :
Sub LaTendanceSeraitDeFaireCeci()
With Worksheets(1).Range("N2:W11,G2:K11")
With .Borders(xlEdgeLeft)
.LineStyle = xlContinuous
.Weight = xlThick
.ColorIndex = xlAutomatic
End With
With .Borders(xlEdgeTop)
.LineStyle = xlContinuous
.Weight = xlThick
.ColorIndex = xlAutomatic
End With
With .Borders(xlEdgeBottom)
.LineStyle = xlContinuous
.Weight = xlThick
.ColorIndex = xlAutomatic
End With
With .Borders(xlEdgeRight)
.LineStyle = xlContinuous
.Weight = xlThick
.ColorIndex = xlAutomatic
End With
End With
End Sub
Mais je pense qu'il est interressant de boucler sur l'Object Border comme ceci (soit sur les valeur numériques avec N as Byte, soit par une boucle sur Array avec N as Variant ):
Sub BorderSeveralRange()
Dim WS As Worksheet
Dim UR As Range
Dim N As Byte 'NB si on utilise la méthode Array ci-dessous, alors "N" sera Dim As Variant
Set WS = Worksheets("Sheet1")
Set UR = Application.Union(WS.Range("N2:W11"), WS.Range("G2:K11"))
With UR
For N = 7 To 10
' For Each N In Array(7, 8, 9, 10)
' For Each N In Array(xlEdgeLeft, xlEdgeTop, xlEdgeBottom, xlEdgeRight)
With .Borders(N)
.LineStyle = xlContinuous
.Weight = 4
.ColorIndex = xlAutomatic
End With
Next
End With
End Sub
J'utilise ici un Set d'Object Range en Union,.Range mais on pourrait faire comme P@tB... en fait, le Set d'Object Range va devenir plus utile dans ce qui suit...
Admettons, on veut encadrer en gras le contour de tableaux sur des plages différentes, tout en ayant chacune cellule de ces plages elle-même encadrée avec un trait fin...
Sub BorderSeveralRangeAndIndividualCell()
Dim WS As Worksheet
Dim UR As Range, CL As Range
Set WS = Worksheets("Sheet1")
Set UR = Application.Union(WS.Range("N2:W11"), WS.Range("G2:K11"))
For Each CL In UR
Bordering CL, 2
Next CL
Bordering UR, 4
End Sub
Sub Bordering(C As Range, y As Byte)
Dim N As Byte
With C
For N = 7 To 10
With .Borders(N)
.LineStyle = xlContinuous
.Weight = y
.ColorIndex = xlAutomatic
End With
Next N
End With
End Sub
Voilà, c'est une méthode interressante, je ne sais pas vraiment si à l'usage on gagne du temps, mais en écriture et lisibilité, il n'y a pas photo !! lol
Bonne Fin de Matinée
@+Thierry