Compter le temps d'occurrence d'une valeur

Résolu
Benjj61 Messages postés 100 Statut Membre -  
Benjj61 Messages postés 100 Statut Membre -
Bonjour,

J'ai un tableau de ce type :
0
0
0
1
0
0
1
1
0
0
1
1
0
0
0
0
1
1
0
0
0
0
0
0
0
1
1
0
0
1
Et je voudrais en sortir, par exemple, qu'il y a une répétition (à la suite) du 0 :
0* sur 1 ligne
3* sur 2 lignes
1* sur 3 lignes
1* sur 4 lignes
0* sur 5 lignes
0* sur 6 lignes
1* sur 7 lignes
...
0* sur 179(et plus) lignes.

La syntaxe de sortie m'est égale, j'ai juste besoin des valeurs (0, 3, 1, 1, ..., 0).

En espérant que mon problème soit compris.

Merci!

Benjj

4 réponses

via55 Messages postés 14730 Statut Membre 2 749
 
Bonjour

Une solution par formules sans macro :
http://www.cjoint.com/c/EJwmJwJZmU6

Cdlmnt
Via
1
Le Pingou Messages postés 12638 Statut Contributeur 1 461
 
Bonjour,
Vous parlez d'un tableau et la vos données sont en colonne.... !
Pas clair du tout.

0
Benjj61 Messages postés 100 Statut Membre 4
 
Bonjour Le Pingou,

En effet, car j'ai d'autres données dans ce tableau, mais je veux ce calcul seulement sur cette colonne. Vous voyez ce que je veux dire?
0
michel_m Messages postés 18903 Statut Contributeur 3 317
 
Bonjour benjj61, Le Pingou

mon message de 12,40h annulé (décalage d'espace)
un essai:
Option Explicit
Option Base 1
Const Col As String = "A" 'colonne à compter
Const Col_d As String = "D" 'tableau résultats
'-------------------------------------------
Sub compter_les_zeros()
Dim Derlig As Integer, Cptr As Integer, T_score
Dim T_init, Nbre As Integer
'i--------nitialisations
Application.ScreenUpdating = False

'tableau résultats comptage
ReDim T_score(179, 2)
For Cptr = 1 To 179
T_score(Cptr, 1) = Cptr
T_score(Cptr, 2) = 0
Next
'tableau à compter
Derlig = Columns(Col).Find(what:="*", searchdirection:=xlPrevious).Row
T_init = Application.Transpose(Range("A1:A" & Derlig))

'----------------parcours la liste 0-1
For Cptr = 1 To UBound(T_init)
If T_init(Cptr) = 0 Then
Nbre = Nbre + 1
Else
If Nbre >= 179 Then
T_score(179, 2) = T_score(179, 2) + 1
Else
T_score(Nbre, 2) = T_score(Nbre, 2) + 1
End If
Nbre = 0
While T_init(Cptr + 1) = 1
Cptr = Cptr + 1
Wend
End If
Next

'-------------restitution
Cells(2, Col_d).Resize(179, 2) = T_score

End Sub


la maquette;
http://www.cjoint.com/c/EJwl3oAO7iv

Michel
0
Benjj61 Messages postés 100 Statut Membre 4
 
Bonjour michel_m,
Merci pour l'investissement, je vais regarder ce que cela donne et je vous tiens au courant!
0
Benjj61 Messages postés 100 Statut Membre 4
 
Bonjour via55,

Par solution de simplicité et de rapidité, j'ai pris votre solution.
Merci à tous pour l'aide apportée!

Bonne journée!
0