XL 2013 Compteur de résultats consécutifs

pingouinal

XLDnaute Occasionnel
Bonjour à tous,

Tout d'abord désolé pour ce titre, je n'ai pas trouvé comment synthétiser ma demande. ^_^'
Voici mon problème : dans la pièce jointe, j'aimerais compter le nombre de fois consécutivement en partant de la dernière ligne où la différence relative (donc en + ou en -) entre la colonne B et la colonne A donne 3 ou plus.

Dans l'exemple attaché, la réponse attendue est 4.
Pour le moment j'y arrive, mais uniquement avec des si imbriqués. Ce n'est donc pas des plus pratique et ça limite le nombre de lignes comptées.

Merci par avance pour votre aide.
 

Pièces jointes

  • Book1.xlsx
    7.9 KB · Affichages: 62

Robert

XLDnaute Barbatruc
Repose en paix
Bonjour Pinguouinal, bonjour le forum,

Une solution VBA :

VB:
Sub Macro1()
Dim O As Worksheet 'déclare la variable O (Onglet)
Dim TV As Variant 'déclare la variable TV (Tableu des Valeurs)
Dim I As Integer 'déclare la variable I (Incrément)
Dim T As Integer 'déclare la variable T (Total)
Dim V As Integer 'déclare la variable V (Valeur)
Dim MV As Integer 'déclare la variable VM (Valeur max)

Set O = Worksheets("Sheet1") 'définit l'onglet O
TV = O.Range("A1").CurrentRegion 'définit le tableau des valeurs TV
For I = 1 To UBound(TV, 1) 'boucle sur toutes es lignes I du tableau des valeurs TV
    If Abs(CDbl(TV(I, 2)) - CDbl(TV(I, 1))) >= 3 Then 'condition : si la valeur absolue de la différence ente des deux valeurs de la ligne est supérieure ou égale à 3
        T = T + 1 'incrémente T
        If T > 3 Then V = T: If V > VM Then VM = V 'si T est supérieur à 3 définit la valeur V, garde la plus grande valeur de V dans VM
    Else 'sinon
        T = 0 'réinitialise T
    End If 'fin de la condition
Next I 'prochaine ligne de la boucle
MsgBox VM 'affiche VM dans un message
End Sub
 

Jocelyn

XLDnaute Barbatruc
Bonjour le Forum,
Bonjour pingouinal

a tester suivant ton exemple

Code:
=SOMMEPROD((A1:A7-B1:B7>=3)*((A2:A8="")+(A2:A8-B2:B8>=3))*1)

Cordialement

EDIT : Bonjour Robert désolé pour la collision pas rafraichi
 
Dernière édition:

Robert

XLDnaute Barbatruc
Repose en paix
Bonjour Jocelyn,

Pas une collision, bien au contraire, un complément et un choix de plus pour Pingouinal !... Mais je te déteste quand même pour écrire des formules avec autant de facilité...
 

pingouinal

XLDnaute Occasionnel
Bonjour Robert, bonjour Jocelyn,

Merci beaucoup pour vos réponses.
La macro marche parfaitement mais j'avoue qu'idéalement une formule serait plus appropriée à la syntaxe et à l'utilisation de mon fichier. Je garde néanmoins cette solution sous le coude et surtout sa logique car elle pourrait m'aider pour d'autres fichiers.

J'ai donc testé la version formule, mais le résultat obtenu est 6. A priori elle compte donc l'ensemble des lignes pour lesquelles la valeur est >=3 et non pas les lignes consécutives.
Selon vous, est-il possible d'ajouter ce critère dans la formule?

D'avance merci
 

pingouinal

XLDnaute Occasionnel
Bonjour Dugenou,

Merci pour la proposition. Par contre, j'ai besoin (je me suis sûrement mal exprimé au début, mea culpa) du nombre de fois consécutives en partant de la fin.

Dans mon exemple, il s'agit effectivement du maximum mais c'est un hasard. Si les résultats de la colonne B changent, celui de la formule ne concerne alors pas forcément la dernière série, mais uniquement la plus longue.
 

Jocelyn

XLDnaute Barbatruc
re,
Re bonjour Dugenou

Bon un nouvel essai par formule matricielle suivant tes dernière info ou tu dis vouloir la série la plus longue

voir fichier joint

Cordialement
 

Pièces jointes

  • Book1-1.xlsx
    9 KB · Affichages: 52

pingouinal

XLDnaute Occasionnel
Merci pour la formule matricielle Jocelyn, mais ce que je voulais dire à Dugenou était justement l'inverse.
Il me faut bien le nombre de valeurs dans la dernière série (en partant de la dernière ligne) et pas la plus longue.
Si il y a possibilité de remplacer le "max" par une sorte de "compteur depuis la dernière ligne", ça serait la formule parfaite pour mon cas.

Merci également pour la formule Dugenou, elle fonctionne mais vu la structure de mon fichier source, il m'est délicat de rajouter une colonne.
 

pingouinal

XLDnaute Occasionnel
rebonjour CISCO,

En H, je trouve 0 car la série commençant par la dernière ligne n'entre pas dans les critères (différence >=3 ou <=-3 entre H et G).
Comme je cherche à savoir le nombre de fois consécutivement où, en partant de la dernière ligne, la différence relative entre deux colonnes est >=3, si la première différence est <3, alors la série est nulle.
 

CISCO

XLDnaute Barbatruc
Bonjour

Tu peux faire avec
Code:
INDEX(FREQUENCE(SI(A1:A7-B1:B7>=3;LIGNE(A1:A7));SI(A1:A7-B1:B7<3;LIGNE(A1:A7)));NBVAL(FREQUENCE(SI(A1:A7-B1:B7>=3;LIGNE(A1:A7));SI(A1:A7-B1:B7<3;LIGNE(A1:A7)))))
toujours en matriciel, donc à valider avec les touches Ctrl+maj+entrer.

@ plus
 

Discussions similaires

Statistiques des forums

Discussions
312 185
Messages
2 086 009
Membres
103 089
dernier inscrit
johnjohn1969