Macro pour éviter les if avec 3 critères
Bonjour,
J'aimerais faire une macro permettant de trier les recettes et les dépenses selon 3 critères. Seulement, je ne vois pas comment faire à part multiplier les IF en vba.
Les 3 critères sont les suivants :
1° l'équipe
2° le type de recette/dépense
3° le montant (si positif = à imputer dans tableau recette ; si négatif = à imputer dans tableau dépense)
Pourriez-vous m'expliquer ou me donner des pistes ?
Je vous en remercie d'avance
Salut Finplein et le forum
Pas sûr de comprendre ce que tu attends. le If (ou le Si) demande une réponse vrai ou Faux => il faut donc que ta condition réunisse les 3 critères pour remplir la conditionJ'aimerais faire une macro permettant de trier les recettes et les dépenses selon 3 critères. Seulement, je ne vois pas comment faire à part multiplier les IF en vba.
Là, je ne si pas sûr de comprendre la différenciation des critères 2 et 3 : à priori, c'est le même, donc je vais rester sur le principe :1° l'équipe
2° le type de recette/dépense
3° le montant (si positif = à imputer dans tableau recette ; si négatif = à imputer dans tableau dépense)
avec X, Y et Z comme données et A l'équipe :
(A=X)*("Recette"=Y)*(Z>0) : cette condition n'est vrai que dans le cas d'égalité de tous ses termes. Si au moins un des termes ne correspond pas (A<>X ou Y différent de "Recette" ou Z négatif ou égal à 0). Avec un, cent ou mille termes, le résultat vrai n'existe qu'une seule fois, tous les autres donnant un résultat faux.
Dans le cas qui nous intéresse, par formule, il en faut une seule, mais le résultat apparaitra à chaque fois avec un résultat Vrai ou un résultat faux, ce qui le rend illisible.
Donc, on passe par une macro, mais au lieu d'une condition unique, chaque terme va orienter l'endroit où inscrire le résultat => dans ce cas, il faut "hiérarchiser" les tests :
En admettant qu'on veuille renvoyer les dépenses sur une feuille et les recettes sur une autre, on va d'abord commencer par tester ce critère.
Si c'est une feuille par équipe, on teste d'abord l'équipe.
Puis on passe au suivant.
Pour les multiples tests de même niveau, plutôt qu'une succession de If, il est préférable d'utiliser Select Case :
Select Case X
case A
aller feuille A
case B
aller feuille B
case C
aller feuille C
case else
MsgBox "ce n'est pas une équipe"
end Select
N'ayant pas suffisamment d'infos, il est dur d'aider plus.
A+
J'avais mis le fichier et j'ai finalement réussi avec ceci (mais je me doute qu'il y a certainement moyen de simplifier l'histoire...) :
For x = 4 To 12
For Z = 12 To 16
Cells(x, Z).Value = ""
Next
Next
For m = 18 To 26
For n = 12 To 17
Cells(m, n).Value = ""
Next
Next
i = 4
While Cells(i, 3).Value <> ""
For j = 4 To 12
If Cells(j, 11).Value = Cells(i, 5).Value Then
For k = 12 To 16
If Cells(3, k).Value = Cells(i, 6).Value Then
If Cells(i, 7).Value > 0 Then
Cells(j, k).Value = Cells(j, k).Value + Cells(i, 7).Value
End If
End If
Next
End If
Next
For p = 18 To 26
If Cells(p, 11).Value = Cells(i, 5).Value Then
For t = 12 To 17
If Cells(17, t).Value = Cells(i, 6).Value Then
If Cells(i, 7).Value < 0 Then
Cells(p, t).Value = Cells(p, t).Value + Cells(i, 7).Value
End If
End If
Next
End If
Next
i = i + 1
Wend
End sub