Coloration et bordures
Bonjour,
Je souhaite faire une mise en forme automatique en vba suite à un filtre vba sur un tableau.
pour le moment, j'ai fait ce code assez basique:
Sub colorier_selection()
Dim ligne As Range: Dim ligne_tdb As Integer
Dim chaine_a_traiter As String
Dim selection As Range
Application.ScreenUpdating = False
Sheets("Tableau de bord").Select
'comptage du nombre de ligne non vide
ligne_tdb = 11
chaine_a_traiter = Range("B" & ligne_tdb).Value
While chaine_a_traiter <> ""
ligne_tdb = ligne_tdb + 1
chaine_a_traiter = Range("B" & ligne_tdb).Value
Wend
ligne_tdb = ligne_tdb - 1
'détermination de la plage à sélectionner
Set selection = Range("B11:AK" & ligne_tdb)
'coloration des lignes paires et mise de bordure autour de la sélection
If selection.Rows.Count > 1 Then
For Each ligne In selection.Rows
If ligne.Row Mod 2 = 0 Then
With ligne.Borders(xlEdgeLeft)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
With ligne.Borders(xlEdgeTop)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
With ligne.Borders(xlEdgeBottom)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
With ligne.Borders(xlEdgeRight)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
Range(ligne).Font.Color = RGB(166, 201, 236)
End If
Next ligne
End If
'coloration des lignes impaires et mise de bordure autour de la sélection
If selection.Rows.Count > 1 Then
For Each ligne In selection.Rows
If ligne.Row Mod 2 = 1 Then
If ligne.Row Mod 2 = 0 Then
With ligne.Borders(xlEdgeLeft)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
With ligne.Borders(xlEdgeTop)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
With ligne.Borders(xlEdgeBottom)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
With ligne.Borders(xlEdgeRight)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
Range(ligne).Font.Color = RGB(255, 255, 153)
End If
Next ligne
End If
Application.ScreenUpdating = True
End SubLe problème est que sur le dernier "Next ligne", j'ai une erreur de compilation pour next sans for mais je ne vois pas pourquoi.
quelqu'un aurait une idée?
J'ai également voulu mettre
Range(ta variable).Borders.LineStyle = 1à la place de toutes les lignes de bordures mais excel mais sort également une erreur.Merci d'avanceBonjour, il manque un END IF sur la deuxième boucle !
le premier IF :If selection.Rows.Count > 1 Then
Le deuxième IF:If ligne.Row Mod 2 = 0 Then
Le troisième IF : If ligne.Row Mod 2 = 0 Then
ici dans le code une erreur d'indentation, pour suivre votre exemple, après le then vous auriez du mettre un retrait de ligne et vous auriez vu à la fin que la "pyramide" ne correspondait pas...
en bas du code il n'y a qu'un END IF !
@ bientôt
LouReeD
Bonjour,
sans fichier, je vous propose de simplifier le code ainsi pour la boucle sur les lignes de la sélection:
'coloration des lignes paires et mise de bordure autour de la sélection
If selection.Rows.Count > 1 Then
' pour toutes les lignes de la sélections
For Each ligne In selection.Rows
' alors on met toutes les bordures en gros
ligne.Borders.Weight = xlThin
' on enlève les verticales centrales
ligne.Borders(xlInsideVertical).LineStyle = xlnone
' si le numéro de ligne est pair
If ligne.Row Mod 2 = 0 Then
Range(ligne).Font.Color = RGB(166, 201, 236)
' sinon le numéro de ligne est impair
Else
Range(ligne).Font.Color = RGB(255, 255, 153)
End If
Next ligne
End IfL'idée a été de regrouper ce que l'on faisait sur les lignes sélectionnées, je suis parti sur le principe que les cellules ne sont pas séparées d'une bordure, et pour aller plus vite, on met en xlThin les "Bordures" et non plus celle de droite, d'en haut, de gauche et d'en bas, et ensuite on enlève les bordures verticales centrales.
Le .LineStyle = xlContinuous est par défaut donc dès que l'on donne une couleur à une bordure ou bien une largeur, le trait continu par défaut est affiché.
@ bientôt
LouReeD
bonjour xabino, LouReeD,
Je souhaite faire une mise en forme automatique en vba suite à un filtre vba sur un tableau.
on veut cela pour les lignes visibles paires et unpaires ou pour les lignes "en général" ??
Et une solution avec une MFC ?
Merci pour vos réponses rapide et utiles.
En effet je ne m'étais pas aperçu qu'en réalité une ligne était doublée à cause d'un mauvais copié collé.