Microsoft 365 Compter avec la condition que la valeur suivante ne soit pas 3 - NB.SI.ENS ?

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 !

Alstroemeria

XLDnaute Nouveau
Bonjour 😀 !

1) J'aimerais compter dans la colonne A, toutes les lignes de niveau 2 MAIS en excluant celles qui sont suivies par un niveau 3. (La liste est dans l'ordre, donc si un niveau 2 possède un niveau 3 alors il sera forcément à la ligne suivante, aussi il n'est pas possible d'avoir un niveau 3 tout seul)

2) Il faut que le niveau soit de l'année 2024

En faisant la soustraction : nombre de Niveau 2 - nombre de Niveau 3, j'arrive de manière détourné à trouver ce que je veux, mais j'aimerais savoir s'il serait possible de compter cela avec une formule plutôt ?

Pour compter le nombre de Niveau 2 de 2024 je fais :
VB:
=NB.SI.ENS(A:A;G4;C:C;$E$1)

Je vous remercie 😊
 

Pièces jointes

Solution
Bonjour Alstroemeria,
J'ai un petit souci de compréhension.
compter dans la colonne A, toutes les lignes de niveau 2 MAIS en excluant celles qui sont suivies par un niveau 3.
Je trouve que votre système ne marche pas car vous avez à de nombreuses reprises la suite 2,3,3.
Or en comptant les 3 et faire la différence, je trouve votre résultat incorrect car comptant trop de 3.
(en PJ j'ai mis une MFC en colonne A : Rouge si 3 n'est pas précédé de 2)
Je vous propose la solution ( qui demande une colonne supplémentaire qu'on peut masquer ) avec :
VB:
=SI(ET(C2=2024;A2="2";A3<>"3");1;0)
Et je trouve 304 et non 218.
Je laisse ça à votre jugement, ne sachant si c'est une solution correcte. 🙂
( on peut aussi le faire en VBA avec une...
Bonjour Alstroemeria,
J'ai un petit souci de compréhension.
compter dans la colonne A, toutes les lignes de niveau 2 MAIS en excluant celles qui sont suivies par un niveau 3.
Je trouve que votre système ne marche pas car vous avez à de nombreuses reprises la suite 2,3,3.
Or en comptant les 3 et faire la différence, je trouve votre résultat incorrect car comptant trop de 3.
(en PJ j'ai mis une MFC en colonne A : Rouge si 3 n'est pas précédé de 2)
Je vous propose la solution ( qui demande une colonne supplémentaire qu'on peut masquer ) avec :
VB:
=SI(ET(C2=2024;A2="2";A3<>"3");1;0)
Et je trouve 304 et non 218.
Je laisse ça à votre jugement, ne sachant si c'est une solution correcte. 🙂
( on peut aussi le faire en VBA avec une fonction perso, si vous acceptez le VBA )
 

Pièces jointes

Bonjour Alstroemeria,
J'ai un petit souci de compréhension.

Je trouve que votre système ne marche pas car vous avez à de nombreuses reprises la suite 2,3,3.
Or en comptant les 3 et faire la différence, je trouve votre résultat incorrect car comptant trop de 3.
(en PJ j'ai mis une MFC en colonne A : Rouge si 3 n'est pas précédé de 2)
Je vous propose la solution ( qui demande une colonne supplémentaire qu'on peut masquer ) avec :
VB:
=SI(ET(C2=2024;A2="2";A3<>"3");1;0)
Et je trouve 304 et non 218.
Je laisse ça à votre jugement, ne sachant si c'est une solution correcte. 🙂
( on peut aussi le faire en VBA avec une fonction perso, si vous acceptez le VBA )
Je vous remercie grandement Sylvanu ! vous avez bien vu le souci

Je ne savais pas qu'il était possible de faire plus de 2 valeurs logiques avec la formule ET

Je suis intéressée de voir comment vous feriez avec le VBA si cela ne vous prend pas trop de temps, autrement j'utiliserai cette solution 🤗

 
Merci mromain, cela fonctionne aussi

Lorsque j'applique vos solutions sur un fichier comme celui que je vous ai envoyé, cela marche bien

Mais quand je teste sur une plage de donnée concaténé par Power querry, et bien cela ne fonctionne plus (pour les 2 techniques). ❓
Pourtant, les formules basiques nb.SI.Ens que j'avais noté elles fonctionnent toujours.

Connaissez-vous la raison ?
 
Re,
Je suis intéressée de voir comment vous feriez avec le VBA
En PJ un essai avec une fonction perso. La syntaxe est :
Compter2sans3(Plage à considérer, Année)
Mettre Plage plus grande que la plage nécessaire pour bien prendre le dernier élément.

VB:
Function Compter2sans3(Plage, Année%)
Dim T, i%
T = Plage
For i = 1 To UBound(T) - 1
    If T(i, 3) = Année And T(i, 1) = "2" And T(i + 1, 1) <> "3" Then Compter2sans3 = Compter2sans3 + 1
Next i
End Function
 

Pièces jointes

Re-bonjour,

@Alstroemeria
cela ne fonctionne plus
Qu'est-ce qui ne fonctionne plus ? Les formules renvoient une erreur ? Elles renvoient 0 ?
Dans le fichier exemple que tu as fourni au post #1, le Niveau est un texte et non un nombre. Est-ce toujours le cas dans ton fichier réel ?

@sylvanu
Ta proposition VBA du post #7 semble juste oublier la dernière ligne. En la retouchant ainsi, le résultat semble OK :
VB:
Function Compter2sans3(Plage, Année%)
Dim T, i%
    T = Plage
    For i = 1 To UBound(T) - 1
        If T(i, 3) = Année And T(i, 1) = "2" And T(i + 1, 1) <> "3" Then Compter2sans3 = Compter2sans3 + 1
    Next i
    i = UBound(T)
    If T(i, 3) = Année And T(i, 1) = "2" Then Compter2sans3 = Compter2sans3 + 1
End Function

A+
 
- 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

Retour