Bonjour,
Comme sous-entendu par @LooReed, on peut vérifier des conditions. On peut mettre le résultat de ces conditions dans des variables qu'on appelle booléennes (VRAI/FAUX), mais il faut bien comprendre qu'un booléen n'a que 2 états possibles, vrai ou faux, et donc il ne peut pas etre utilisé pour plus de 2 cas. Or a priori vous voulez vérifier 3 conditions donc il faudrait à minima 2 variables booléennes.
Cependant, en faisant une petite analyse logique on peut un peu simplifier ce schmilblick.
Votre code :
Dim MaVar As String
If Range("B2").value = "DouzeMois" then
MaVar="If Not IsEmpty(.Cells(j, 7))"
Else
MaVar="If Not IsEmpty(.Cells(j, 7)) And Month(.Cells(j, 1)) = Range("B2").value Then"
Endif
Déjà dans les 2 cas vous voulez vérifier que .Cells(j,7) n'est pas vide. Puisque c'est vérifié dans les 2 cas c'est redondant, et ça devrait etre vérifié d'abord.
On aurait plutot :
Déjà dans les 2 cas vous voulez vérifier que .Cells(j,7) n'est pas vide. Puisque c'est vérifié dans les 2 cas c'est redondant, et ça devrait être vérifié d'abord. On n'a au final que 2 conditions : soit B2 est "DouzeMois", soit B2 est un numéro de mois. D'après le code de @LooReed vous effectuez le meme calcul dans les 2 cas, donc on peut simplifier ainsi :
Dim MaCondition As Boolean
If Not IsEmpty(.Cells(j, 7)) Then
If (Range("B2").value = Month(.Cells(j, 1))) Or (Range("B2").value = "DouzeMois) Then
MaCondition = True
Else
MaCondition = False
End If
End If
With Feuil2
Do While Not IsEmpty(.Cells(j, 4))
If MaCondition Then
xVal = Application.Match(.Cells(j, 7), xVect, 0)
Idx = (xVal * 3) - 1
xArr(i, 1) = .Cells(j, 4).Value
xArr(i, Idx) = .Cells(j, 8).Value
xArr(i, Idx + 1) = .Cells(j, 9).Value
xArr(i, Idx + 2) = .Cells(j, 6).Value
i = i + 1
End If
j = j + 1
Loop
End With