Format sur sélection dynamique de cellules

Bonjour à tous !

Voici un petit problème VBA que je souhaite résoudre afin de pouvoir rendre ma base de données lisible.

J'ai fait une macro qui détecte quelles cellules j'ai sélectionnées, et qui surligne leurs lignes entières, jusqu'à ce que je les désélectionne :

Option Explicit
Private Sub Worksheet_SelectionChange(ByVal Target As Range)

Dim rowNumberValue As Integer

Range("A11:CF_4").Interior.ColorIndex = 0

rowNumberValue = ActiveCell.Row

If rowNumberValue >= 11 And rowNumberValue < Range("CF_4").Row Then

Selection.EntireRow.Interior.ColorIndex = 19

End If

End Sub

Ma petite question est la suivante : j'aimerais qu'à la place de toute la ligne, seules les cellules entre les colonnes A et P soient concernées.

Pour l'instant, ma "piste" (ne riez pas hein ) consiste à avoir une structure qui ressemble à ça, mais qui marche :

Range(Cells(rownumbervalue, 1):Cells(rownumbervalue, 16)).Interior.ColorIndex = 19

Où la macro détecte les numéros de ligne des cellules sélectionnées (mettons 23 et 57), puis applique le format aux plages suivantes (A23:P23) et (A57:P57).

J'imagine que c'est une bourde de syntaxe de ma part, mais n'étant pas familier encore avec VBA, je galère un peu.

Merci pour votre aide et passez un bon weekend !

Ok, j'ai trouvé en fait, mais cette fois, si je sélectionne deux cellules à la fois, seule la dernière sélection est formatée...

Option Explicit
Private Sub Worksheet_SelectionChange(ByVal Target As Range)

Dim rowNumberValue As Integer, surlignage As Range

Range("A11:CF_4").Interior.ColorIndex = 0

rowNumberValue = ActiveCell.Row
Set surlignage = Range(Cells(rowNumberValue, 1), Cells(rowNumberValue, 16))

If rowNumberValue >= 11 And rowNumberValue < Range("CF_4").Row Then

surlignage.Interior.ColorIndex = 19

End If

End Sub

C'est parce que j'ai enlevé la fonction Selection, sauf que je n'arrive pas à la remettre dans la structure telle quelle. Mais c'est déjà un avancement

Bonjour,

Pas tout compris mais bon :

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

    Cells.Interior.ColorIndex = 0

    With Target

        If .Row >= 11 And .Row < 50 Then Range(Cells(.Row, 1), Cells(.Row, 16)).Interior.ColorIndex = 19

    End With

End Sub

Salut Theze !

Merci pour ta réponse !

Le problème n'est pas encore résolu :

Dans le code, j'ai mis :

Range("A11:CF_4").Interior.ColorIndex = 0

C'est juste pour que le ColorIndex = 0 ne s'applique pas sur tout l'onglet car je veux garder mes titres en couleur.

Ton code marche bien, mais quand je sélectionne deux cellules, mettons A1 et D23, le code ne s'applique qu'à D23 mais pas à A1. Est-ce que je suis clair ?

Et quand je rajoute Selection.Range(etc.), ça déconne aussi car la macro ne formate pas les cellules dont la colonne est à gauche des cellules sélectionnées.

Re,

Testes ceci et adaptes :

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

    Dim I As Long

    'Cells.Interior.ColorIndex = 0

    With Target

        For I = Target.Row To Target.Row + Target.Rows.Count - 1

            If .Row >= 11 And .Row < 50 Then Range(Cells(I, 1), Cells(I, 16)).Interior.ColorIndex = 19

        Next I

    End With

End Sub

Merci beaucoup !

J'ai repris ton code, mais je ne suis pas parvenu à l'adapter pour que deux cellules sélectionnées sur deux lignes mène à avoir les deux lignes sélectionnées entre deux colonnes fixées. Ce n'est pas grave en soi ici vu l'utilisation finale de la macro.

Bonne soirée et merci encore !

Rechercher des sujets similaires à "format selection dynamique"