Souci de couleurs

Bonjour,

Je commence à apprendre le VBA et je tente de me faire des exemples pour pouvoir comprendre.

Il y a quelque chose qui me surprend sur mon exemple ci-dessous.

Je cherche à agir sur les cellules avec la valeur "Pouet" de la colonne 1.
Ca se passe plutôt pas mal mais...ça déteint sur les cellules d'à côté (colonnes à côté)

Je ne comprends pas pourquoi...mais je suspecte la définition des plages PL1 et PL2 et l'option "CurrentRegion".

Que pourrais-je mettre à la place pour n'agir que sur des cellules?

Voici la macro complète

Sub Macro2()
'
' Macro2 Macro
'
'

Dim O As Worksheet 'déclare la variable O (Onglet)
Dim PL1 As Range 'déclare la variable PL1 (Plage1)
Dim PL2 As Range 'déclare la variable PL2 (Plage2)

Set O = Worksheets("Feuil1") 'définit l'onglet O
Set PL1 = O.Range("A1").CurrentRegion 'définit la plage PL1
Set PL2 = PL1.Offset(1, 0).Resize(PL1.Rows.Count - 1, PL1.Columns.Count) 'définit la plage PL2 (PL1 sans les en-têtes)
    PL1.AutoFilter Field:=1, Criteria1:="Pouet" 'Filtre par la valeur POUET
    PL2.Select 'Sélectionne la plage PL2
    PL2.SpecialCells(xlCellTypeVisible).Select 'Ne prend que les cellule sélectionnées
    PL2.Font.Underline = xlUnderlineStyleSingle 'Souligne uniquement la cellule
    PL2.Font.ColorIndex = 10 'Colore le texte et les colonnes à côté
    PL2.SpecialCells(xlCellTypeVisible).Select 'Colore la cellule et les colonnes à côté
    With Selection.Interior  'Paramètre couleur
        .Pattern = xlSolid 'Paramètre couleur
        .PatternColorIndex = xlAutomatic 'Paramètre couleur
        .ThemeColor = xlThemeColorAccent1 'Paramètre couleur
        .TintAndShade = 0.799981688894314 'Paramètre couleur
        .PatternTintAndShade = 0 'Paramètre couleur
    End With
    PL2.AutoFilter 'Defiltre
    Range("A1").Select 'Sélectionne la cellule A1

End Sub

Merci pour vos avis :)

Bonjour Oujikun, bonjour le forum,

L'option CurrentRegion et un moyen rapide de sélectionner toutes les cellules adjacentes à partir d'une cellule. Si il y a des lignes ou des colonnes vides dans le tableau elle ne doit pas être utilisée. Je crois t'avoir déjà dit qu'il fallait éviter les Select inutiles qui ne font que ralentir l'exécution du code et sont source de bugs...

Le fait de sélectionner la plage PL2, cela ne la redéfinit pas. Ton code modifié (non testé) :

Sub Macro2()
Dim O As Worksheet 'déclare la variable O (Onglet)
Dim PL1 As Range 'déclare la variable PL1 (Plage1)
Dim PL2 As Range 'déclare la variable PL2 (Plage2)

Set O = Worksheets("Feuil1") 'définit l'onglet O
Set PL1 = O.Range("A1").CurrentRegion 'définit la plage PL1
Set PL2 = PL1.Offset(1, 0).Resize(PL1.Rows.Count - 1, PL1.Columns.Count) 
PL1.AutoFilter Field:=1, Criteria1:="Pouet" 'Filtre par la valeur POUET
With PL2.SpecialCells(xlCellTypeVisible)
    .Font.Underline = xlUnderlineStyleSingle 'Souligne uniquement la cellule
    .Font.ColorIndex = 10 'Colore le texte et les colonnes à côté
    .Interior.Pattern = xlSolid 'Paramètre couleur
    .Interior..PatternColorIndex = xlAutomatic 'Paramètre couleur
    .Interior..ThemeColor = xlThemeColorAccent1 'Paramètre couleur
    .Interior.TintAndShade = 0.799981688894314 'Paramètre couleur
    .Interior.PatternTintAndShade = 0 'Paramètre couleur
End With
PL2.AutoFilter 'Defiltre
Range("A1").Select 'Sélectionne la cellule A1
End Sub

Merci pour l'optimisation Thautheme.

Mais du coup, que peut-on mettre à la place de Current Region ?

Si je l'enlève il râle (Erreur 1004) à la ligne d'après ici :

Set PL2 = PL1.Offset(1, 0).Resize(PL1.Rows.Count - 1, PL1.Columns.Count)

En modifiant comme ci-dessous, ça passe mais c'est toujours toute la ligne qui est sélectionnée

Set PL2 = PL1.Offset(1, 0)

J'ai essayé quelque chose d'autre.

Ca fonctionne dans le sens où les "cellules de la colonne d'à côté" ne sont pas touchées par les modifications.

Mais par contre....ça colore la première ligne (le titre de la colonne)

Sub Macro2()
Dim O As Worksheet 'déclare la variable O (Onglet)
Dim PL1 As Range 'déclare la variable PL1 (Plage1)
Dim PL2 As Range 'déclare la variable PL2 (Plage2)

Set O = Worksheets("Feuil1") 'définit l'onglet O
Set PL1 = O.Range("A:A") 'définit la plage PL1
Set PL2 = PL1.Resize(PL1.Rows.Count - 1, PL1.Columns.Count)
PL1.AutoFilter Field:=1, Criteria1:="Pouet" 'Filtre par la valeur POUET
With PL2.SpecialCells(xlCellTypeVisible)
.Font.Underline = xlUnderlineStyleSingle 'Souligne uniquement la cellule
.Font.ColorIndex = 10 'Colore le texte et les colonnes à côté
.Interior.Pattern = xlSolid 'Paramètre couleur
.Interior.PatternColorIndex = xlAutomatic 'Paramètre couleur
.Interior.ThemeColor = xlThemeColorAccent1 'Paramètre couleur
.Interior.TintAndShade = 0.799981688894314 'Paramètre couleur
.Interior.PatternTintAndShade = 0 'Paramètre couleur
End With
PL2.AutoFilter 'Defiltre
Range("A1").Select 'Sélectionne la cellule A1
End Sub

Bonjour Oujikun, bonjour le forum,

Si tu daignais envoyer le fichier on perdrait beaucoup moins de temps...

Rechercher des sujets similaires à "souci couleurs"