IF imbriqué

Christian3000

XLDnaute Nouveau
Bonjour à tous,

Je sèche sur deux problèmes avec les formules imbriquées if: j'ai mis au point un petit calendrier dont je voudrais que les case se colorent et/ou se biffent selon 2 conditions (cf.code plus bas). Ça marche très bien lorsque une seule condition est remplie avec une seule conséquence. Mais je ne m'en sors plus lorsque la cellule respecte les deux conditions (dans ce cas là elle devrait se colorer et le texte dedans se biffer! En fait, selon la structure de mon code, elle ne fera que se colorer...
Deuxième problème lié au premier: ma dernière ligne (clearformat) permet de supprimer la couleur de la cellule si la condition 1 a changé. J'aimerais également pouvoir supprimer le "biffage" si la condition 2 a changé. J'ai essayé cela...

Else
annee.Cells(X, y).Interior.ColorIndex = clearformat and _
annee.Cells(X, y).Font.Strikethrough = false

...mais ça ne marche pas!

Si vous pouviez m'aider, ça serait génial!

Salutations à tous,

Christian

Le code:

For X = 1 To 28
For y = 1 To 24

'Condition 1:
If (annee.Cells(X, y).Value = Range("int1").Value) _
Or (annee.Cells(X, y).Value = Range("int2").Value) _
Or (annee.Cells(X, y).Value = Range("int3").Value) _
Or (annee.Cells(X, y).Value = Range("int4").Value) Then
annee.Cells(X, y).Interior.ColorIndex = 6

'Condition 2:
ElseIf ((annee.Cells(X, y).Value >= Range("dv").Value) _
And (annee.Cells(X, y).Value <= Range("fv").Value)) Then
annee.Cells(X, y).Font.Strikethrough = True

Else
annee.Cells(X, y).Interior.ColorIndex = clearformat

End If

Next y
Next X
 

Pierrot93

XLDnaute Barbatruc
Re : IF imbriqué

Bonjour Christian

essaye peut être ainsi, non testé :

Code:
annee.Cells(X, y).Interior.ColorIndex = clearformat

If (annee.Cells(X, y).Value = Range("int1").Value) _
    Or (annee.Cells(X, y).Value = Range("int2").Value) _
    Or (annee.Cells(X, y).Value = Range("int3").Value) _
    Or (annee.Cells(X, y).Value = Range("int4").Value) Then
        annee.Cells(X, y).Interior.ColorIndex = 6
End If

'Condition 2:
If ((annee.Cells(X, y).Value >= Range("dv").Value) _
    And (annee.Cells(X, y).Value <= Range("fv").Value)) Then
        annee.Cells(X, y).Font.Strikethrough = True
End If

A noter que la condition "elseif" n'est testée que si le test "if" précédent n'a pas renvoyé "vrai", ce qui explique que la "double condition" ne soit pas testée...

bonne journée
@+
 

Christian3000

XLDnaute Nouveau
Re : IF imbriqué

Merci Pierrot!

Ton code marche très bien!
Par contre le clearformats n'a pas l'air d'être reconnu par VBA ("erreur de compilation; fonction ou variable attendue"). J'ai essayé comme ça:

annee.Cells(X, y).Interior.ColorIndex = clearformat
annee.Cells(X, y).Font.Strikethrough = False

et ça marche...
 

Pierrot93

XLDnaute Barbatruc
Re : IF imbriqué

Re,

oui pour le "clearformat", regarde le post 3, sinon tu peux également modifier ainsi, en fonction de ce que tu as et de ce que tu veux :

Code:
If (annee.Cells(X, y).Value = Range("int1").Value) _
    Or (annee.Cells(X, y).Value = Range("int2").Value) _
    Or (annee.Cells(X, y).Value = Range("int3").Value) _
    Or (annee.Cells(X, y).Value = Range("int4").Value) Then
        annee.Cells(X, y).Interior.ColorIndex = 6
Else
    annee.Cells(X, y).Interior.ColorIndex = xlNone
End If

'Condition 2:
If ((annee.Cells(X, y).Value >= Range("dv").Value) _
    And (annee.Cells(X, y).Value <= Range("fv").Value)) Then
        annee.Cells(X, y).Font.Strikethrough = True
Else
    annee.Cells(X, y).Font.Strikethrough = False
End If

@+
 

Statistiques des forums

Discussions
312 505
Messages
2 089 096
Membres
104 030
dernier inscrit
Angy