Changer la couleur de fond en fonction de la valeur

Bonsoir,

Je travaille actuellement sur un fichier Excel, qui est un export depuis un logiciel de CAO/DAO (Revit).

Ce fichier possède plusieurs feuilles en fonction des catégories de nomenclature exportée.

Je souhaite modifier la couleur de fond lorsque la valeur de la case est égale à PUHT, Total HT, PUHT (m²) ou PUHT (m3).

Je vous mets le code que j'ai commencé à réaliser :

Sub PUHT_Total()
    For i = 3 To Worksheets.Count
        For j = 1 To 20
            If Sheets(i).Cells(1, j).Value = "PUHT" Or Sheets(i).Cells(1, j).Value = "Total HT" Or Sheets(i).Cells(1, j).Value = "PUHT (m²)" Or Sheets(i).Cells(1, j).Value = "PUHT (m3)" Then

                Cells(1, j).Select
                With Selection.Interior
                    .Pattern = xlSolid
                    .PatternColorIndex = xlAutomatic
                    .ThemeColor = xlThemeColorAccent6
                    .TintAndShade = 0.799981688894314
                    .PatternTintAndShade = 0

                End With
            End If
        Next j
    Next i
End Sub

Ce code s’exécute en cliquant sur le bouton "TEST" sur la première feuille nommé "00_Parametre".

Le code est censé partir à partir de la 3ème feuille de la case A1 jusqu’à A20.

S'il rencontre l'une des "Valeurs cible" la case ce colore en vert sinon il ne se passe rien et il passe à la case suivante.

S'il arrive au bout de la boucle il passe à la feuille suivante.

Malheureusement ce code ne fonctionne pas et me colore des cases dans la feuille "00_Parametres" ou lieu de parcourir l'ensemble des feuilles.

Je vous remercie par avance si vous pouvez me venir en aide.

Bonjour,

                Cells(1, j).Select
                With Selection.Interior
  • .Select est à éviter tant que c'est possible, ça ralenti pour rien.
  • surtout tu n'indiques pas la feuille de travail.
                With Sheets(i).Cells(1, j).Interior

Et tu peux imbriquer des With pour alléger le code :

Sub PUHT_Total()
    For i = 3 To Worksheets.Count
        With Sheets(i)
            For j = 1 To 20
                With .Cells(1, j)
                    If .Value = "PUHT" Or .Value = "Total HT" Or .Value = "PUHT (m²)" Or .Value = "PUHT (m3)" Then
                        With .Interior
                            .Pattern = xlSolid
                            .PatternColorIndex = xlAutomatic
                            .ThemeColor = xlThemeColorAccent6
                            .TintAndShade = 0.799981688894314
                            .PatternTintAndShade = 0
                        End With
                    End If
                End With
            Next j
        End With
    Next i
End Sub

Et si tu n'as pas d'autres "PUHT xx" :

If Left(.Value, 4) = "PUHT" Or .Value = "Total HT" Then suffit

eric

Bonsoir, je vous remercie pour cette aide précieuse je regarde dès demain et vous tient au courant si j'ai quelques problèmes.

Au premier abord cette solution me paraît convenir je vais me pencher dessus pour en comprendre un maximum. Le mieux c'est de comprendre ce que l'on copie pour pouvoir réutiliser certaines astuces plus tard...

Non testé, je n'ai pas ouvert ton fichier.

Possibles retouches en vue... Ca te fera apprendre aussi

eric

Rechercher des sujets similaires à "changer couleur fond fonction valeur"