Variable Booléen : détecter le passage de False à True (front montant)

Bonjour,

Je cherche à détecter quand ma variable booléenne passe de False à True (comme un front montant) et incrémenter un compteur à chaque fois que c'est le cas. Existe-t-il une fonction qui permette de faire ça?

Mon exemple concret est le suivant :

  • J'ai un tableau de dates (ce sont les dates d’occurrences d’événements récupérés depuis un fichier d'événements)
  • On appelle " rafale" une succession d’événements espacés de mois de 20 secondes. Le tableau peut donc avoir plusieurs "rafales" et une "rafale" peut être plus ou moins longue ( de 2 à n événements successifs).
  • Je cherche à compter le nombre de "rafales" (et non pas le nombre d’événement dans une "rafale")

Voici un code de principe:

PresenceRafale = False

For i = 0 To (UBound(MyTable) - 1)                                   
                EcartDate = MyTable(i + 1) - MyTable(i)           

                If EcartDate < 20 Then PresenceRafale = True
                Else: PresenceRafale = False
                End If

                If "PresenceRafale passe de False à True" Then 
                CounterRafale = CounterRafale + 1
                Endif

                Next i

Merci pour votre aide,

Cdt

Bonjour Carlton, bonjour le forum,

Peut-être comme ça :

Dim C As Integer 'Compteur
PresenceRafale = False
For i = 0 To (UBound(MyTable) - 1)                                   
      EcartDate = MyTable(i + 1) - MyTable(i)           
      If EcartDate < 20 Then 
            PresenceRafale = True
            C=C+1
      Else
          PresenceRafale = False
      End If
Next i

Bonjour ThauThème ,

Malheureusement non car dans ce cas on compte la taille d'une rafale et non le nombre de rafale. Je crois que c'est ma définition de " Rafale" qui n'est pas claire.

J'essaie de m'expliquer mieux.

Soit par exemple le tableau de date suivant:

12:00:00

12:00:01

12:00:02

12:00:03

14:00:00

14:30:00

14:30:32

14:30:36

Il y a 2 "rafales" (série ou bloc d' événements espacés de moins de 20s) :

12:00:00

12:00:01

12:00:02

12:00:03

et

14:30:32

14:30:36

C'est ce résultat "2" que je cherche à obtenir et c'est pourquoi j'ai besoin d'incrémenter mon compteur uniquement quand la variable PresenceRafale change d'état et passe de False à True.

Dans le code que vous avez proposé, le compteur s'incrémente à chaque fois que PresenceRafale état est True (et non pas au changement d'état). On obtiendrait donc 6 sur le cas ci dessus, ce qui correspond au nombre de ligne espacés de moins de 20s. Mais ce n'est pas ce que je cherche.

Merci bien,

bonjour

salut ThauThème

il faut une simple colonne "de pointage" qui donne le début et la fin des rafales, et décompte ces groupes de lignes

réglage fin avec la valeur dans le SI (truc<valeuràfinetuner;machin;bidule)

pas de VBA, seulement des formules très simples

amitiés

29test.xlsx (9.28 Ko)

Bonjour le fil, bonjour le forum,

Carlton, se ne sont pas tes explications qui n'étaient pas claires, c'est moi qui, comme souvent, n'avait rien compris...

Peut-être comme ça :

Sub Macro1()
Dim PresenceRafale As Boolean
Dim C As Integer 'Compteur
Dim TVF() As Variant 'Tableau Vrai Faux

PresenceRafale = False
For I = 0 To (UBound(MyTable) - 1)
    EcartDate = MyTable(I + 1) - MyTable(I)
    If EcartDate < 20 Then
        PresenceRafale = True
    Else
        PresenceRafale = False
    End If
    ReDim Preserve TVF(I)
    TVF(I) = PresenceRafale
    If I > 0 Then
        If TVF(I) = True And TVF(I - 1) = False Then C = C + 1
    End If
Next I

Bonjour ThauThème ,

Faire un tableau de booléen pour détecter le passage False -> True, super idée ! J'étais loin d'y penser, merci!

Ca marche très bien, seulement quelques petites adaptations à faire car il ya des petits soucis de taille du tableau.

Finalement:

Sub Macro1()
Dim PresenceRafale As Boolean
Dim C As Integer 'Compteur
Dim I as Integer
Dim TVF() As Variant 'Tableau Vrai Faux

I=0
PresenceRafale = False
TVF(I) = PresenceRafale     'La première case doit être False pour pouvoir détecter le premier passage False -> True. Sinon si on rempli tout de suite et que TVF(0) = True, on loupe celui là dans le compteur.

For I = 0 To (UBound(MyTable) - 1)
    EcartDate = MyTable(I + 1) - MyTable(I)
    If EcartDate < 00:00:20 Then
        PresenceRafale = True
    Else
        PresenceRafale = False
    End If
    ReDim Preserve TVF(I)
    TVF(I) = PresenceRafale
    If I > 0 Then
        If TVF(I+1) = True And TVF(I) = False Then C = C + 1  ' On compare i+1 à i ( au lieu de i à i-1) car à sinon à l'indice 0, on chercherait TVF(-1)  
    End If
Next I

Merci beaucoup pour ton aide!

Cdt

Rechercher des sujets similaires à "variable booleen detecter passage false true front montant"