[résolu] Mise en forme conditionnelle par VBA

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

cissou69

XLDnaute Junior
Bonjour,

Dans mon fichier, j'aimerais mettre en forme en fonction de la valeur des cellules sur une plage de données variable. Je ne peux pas utiliser la fonction excel car j'ai plus de trois conditions...

Ci-après le code, pouvez-vous svp m'expliquer mon erreur ?

Merci d'avance,

Cissou

Code:
i = 2
j = 2
'Recherche du nombre de ligne
    Do While a <> ""
        a = Cells(j, 6).Value
        j = j + 1
    Loop
    j = j - 2

'Mise en forme en fonction de la valeur
For f = 6 To 14
    Do While b <> ""
        b = Cells(i, f).Value
        i = i + 1
    Loop
    i = i - 2
    
    If i < 2 Then
        i = 2
    End If

    If Cells(i, f).Value = "M" Then
        For k = i + 1 To j
            Cells(k, i).Font.Color = RGB(0, 255, 0)
            Cells(k, i).Interior.Color = RGB(0, 255, 0)
        Next k
    End If

    If Cells(i, f).Value = "P" Then
        For l = i + 1 To j
            Cells(l, i).Font.Color = RGB(0, 0, 255)
            Cells(l, i).Interior.Color = RGB(0, 0, 255)
        Next l
    End If

    If Cells(i, f).Value = "C" Then
        For m = i + 1 To j
            Cells(m, i).Font.Color = RGB(150, 150, 0)
            Cells(m, i).Interior.Color = RGB(150, 150, 0)
        Next m
    End If

    If Cells(i, f).Value = "F" Then
        For n = i + 1 To j
            Cells(n, i).Font.Color = RGB(255, 0, 0)
            Cells(n, i).Interior.Color = RGB(255, 0, 0)
        Next n
    End If
    
Next f

End Sub
 
Dernière édition:
Re : Mise en forme conditionnelle par VBA

Bonjour,

Déjà, pour qu'il se passe quelque chose, il faudrait initialiser a et b au début comme tu as fait pour i et j.
(ex : a="zzz" et b="zzz")

ensuite, dis-nous si le résultat correspond à ton souhait...je pense que non, alors dis-nous ce que tu veux faire...

Cordialement
 
Re : Mise en forme conditionnelle par VBA

Effectivement, le résultat n'est pas là...

Ce que je veux faire est la chose suivante:
Dans une plage de données, de la colonne 6 à 14 et de la ligne 2 à j .
Si la valeur de la cellule est égale à :
- M alors couleur vert
- P alors couleur bleu
- C alors couleur orange ou autre
- F alors couleur rouge
- N/A alors couleur gris (non présent dans le code précédent)

Merci de votre aide,
 
Re : Mise en forme conditionnelle par VBA

Bonjour cissou69, mécano41,
Une proposition avec ce que j'ai compris:
VB:
Sub test()
Application.ScreenUpdating = False
Set Plg = Range("F2:N" & Cells(Rows.Count, 6).End(xlUp).Row)
For Each C In Plg
    Select Case C.Value
        Case "M"
            C.Font.Color = RGB(0, 255, 0)
            C.Interior.Color = RGB(0, 255, 0)
        Case "P"
            C.Font.Color = RGB(0, 0, 255)
            C.Interior.Color = RGB(0, 0, 255)
        Case "C"
            C.Font.Color = RGB(150, 150, 0)
            C.Interior.Color = RGB(150, 150, 0)
        Case "F"
            C.Font.Color = RGB(255, 0, 0)
            C.Interior.Color = RGB(255, 0, 0)
        Case Else
            C.Font.ColorIndex = 0
            C.Interior.ColorIndex = xlNone
    End Select
Next C
Application.ScreenUpdating = True
End Sub
Cordialement
 
Re : Mise en forme conditionnelle par VBA

Re
Je n'avais pas vu que la plage pouvait contenir des erreurs. Une autre version pour contrer le plantage assuré:
VB:
Sub test()
Dim C As Range, Plg
Application.ScreenUpdating = False
Set Plg = Range("F2:N" & Cells(Rows.Count, 6).End(xlUp).Row)
For Each C In Plg
    If Not IsError(C.Value) Then
        Select Case C.Value
            Case "M"
                C.Font.Color = RGB(0, 255, 0)
                C.Interior.Color = RGB(0, 255, 0)
            Case "P"
                C.Font.Color = RGB(0, 0, 255)
                C.Interior.Color = RGB(0, 0, 255)
            Case "C"
                C.Font.Color = RGB(150, 150, 0)
                C.Interior.Color = RGB(150, 150, 0)
            Case "F"
                C.Font.Color = RGB(255, 0, 0)
                C.Interior.Color = RGB(255, 0, 0)
            Case Else
                C.Font.ColorIndex = 0
                C.Interior.ColorIndex = xlNone
        End Select
    ElseIf IsError(C.Value) Then
        C.Font.ColorIndex = 35
        C.Interior.ColorIndex = 35
    End If
Next C
Application.ScreenUpdating = True
End Sub
Cordialement
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

  • Question Question
Microsoft 365 worksheet_change
Réponses
29
Affichages
252
Réponses
8
Affichages
101
  • Question Question
XL 2021 VBA excel
Réponses
4
Affichages
80
Réponses
3
Affichages
600
Retour