Erreur sur une mise en forme conditionnelle

Bonjour à tous,

Je tente désespérément de mettre en place une mise en forme conditionnelle sur une ligne de cellules variable (ObjRange) dans mon fichier de planification (Planning). Ce dernier comporte une ligne Fermeture : si celle-ci contient une cellule avec "Fermé", la cellule de la même colonne située dans mon ObjRange doit se colorer en vert.

Voici le code :

Sub Test()
    Set Metier = Sheets("Planning").Cells.Find(What:="Métier", LookAt:=xlWhole)
    Set Niveau = Sheets("Planning").Cells.Find(What:="Niveau", LookAt:=xlWhole)
    Set Fermeture = Sheets("Planning").Cells.Find(What:="Fermeture", LookAt:=xlWhole)
    DerCol = Cells(Niveau.Row, Columns.Count).End(xlToLeft).Column
    Set ObjRange = Sheets("Planning").Range(Cells(Metier.Row + 1, Metier.Column + 1), Cells(Metier.Row + 1, DerCol))
    With ObjRange.FormatConditions
        .Add Type:=xlExpression, Formula1:="=" & Sheets("Planning").Cells(Fermeture.Row, Fermeture.Column + 1) & "=""Fermé"""
        .Item(.Count).Interior.Color = vbGreen
    End With
End Sub

J'obtiens l'erreur "Argument ou appel de procédure incorrect" à la ligne :

.Add Type:=xlExpression, Formula1:="=" & Sheets("Planning").Cells(Fermeture.Row, Fermeture.Column + 1) & "=""Fermé"""

Mais impossible de trouver la solution...

Merci d'avance pour vos lumières !

Bonjour,

Il conviendrait de déclarer les variables (toutes et en tête de procédure).

Il serait bon aussi de tester si la recherche n'a pas échouée (quand on utilise Find, c'est une précaution élémentaire).

Eviter les répétitions avec une instruction With améliorerait le code.

Pour le reste, comme on ne voit pas la configuration, je ne peux me prononcer de façon certaine... excepté le fait que la formule conditionnelle est inadéquate. Elle doit être insérée sous forme de formule, dans la langue utilisateur.

Donc, l'expression qui renvoie la valeur de la cellule testée dans la formule est à remplacer par l'adresse de cette cellule, à toi de savoir si elle doit être en références absolues, relatives, ou mixtes...

Cordialement.

Merci pour cette réponse !

Effectivement, c'est juste un morceau de code que je teste séparément, mais il est prévu sur le code final de déclarer les variables et de tester les Find.

En pièce jointe, le fichier simplifié (par souci de confidentialité) sur lequel je voudrais ajouter la mise en forme conditionnelle.

Il me semblait bien que le problème venait de la formule conditionnelle :

Sheets("Planning").Cells(Fermeture.Row, Fermeture.Column + 1)

Mais comment la traduire dans la langue utilisateur ?

3test.xlsm (26.71 Ko)

En principe écrire les formules dans la langue utilisateur, est la façon la plus commune, c'est celle dont tu les écris dans Excel.

Tu n'appliques ta MFC que sur la ligne 14 ?

Sauf élément nouveau, voilà qui devrait convenir :

Sub Test()
    Dim Metier As Range, Fermeture As Range, ObjRange As Range, DerCol%, Adr$
    With Worksheets("Planning")
        Set Metier = .Cells.Find("Métier", LookAt:=xlWhole)
        Set Fermeture = .Cells.Find("Fermeture", LookAt:=xlWhole)
        If Metier Is Nothing Or Fermeture Is Nothing Then Exit Sub
        DerCol = .Cells(Metier.Row, .Columns.Count).End(xlToLeft).Column
        Set ObjRange = Metier.Offset(1, 1).Resize(, DerCol - Metier.Column)
        Adr = Fermeture.Offset(, 1).Address(True, False)
    End With
    With ObjRange.FormatConditions
        .Delete
        .Add(xlExpression, , "=" & Adr & "=""Fermé""").Interior.Color = vbGreen
    End With
End Sub

NB- Une formule conditionnelle (de MFC) se définit pour la cellule supérieure gauche de la plage d'application. cette dernière cellule étant N14, la formule sera : =N$11="Fermé", avec ligne fixe et colonne variable pour qu'elle s'applique à toutes les cellules de la plage d'application.

Il est traditionnel de supprimer les MFC antérieures avant d'en remettre, cet aspect sera à revoir si d'autres MFC recouvrent ou chevauchent la même plage d'application... Le système le plus économique lorsqu'on code des MFC en VBA est de supprimer toutes les MFC de la plage et les remplacer (et si chevauchements avec d'autres MFC, même chose mais pour la feuille entière).

Cordialement.

2pruneau-test.xlsm (26.30 Ko)
Rechercher des sujets similaires à "erreur mise forme conditionnelle"