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 Sub

Le 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'avance

Bonjour, 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 If

L'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é.

Rechercher des sujets similaires à "coloration bordures"