XL 2010 Compter le nombre de valeurs consecutives

e1701086

XLDnaute Nouveau
Bonjour à tous,

Je fais appel à vous car je bloque depuis quelques jours sur une requête. Je voudrais calculés le nombre de jours qu'un achat a été réalisé consécutivement. Pour cela, j'ai recodé la variable Achat en 0/1. ce que je souhaiterais c'est faire la somme de tous les 1 tant qu'il n'y a pas de 0 apparaissant. Je voudrais grouper cela par acteur. Je ne sais pas si cela a été clair ou pas. Ainsi, je vous propose un fichier Excel avec mon fichier de base et les résultats souhaités pour que vous puissiez mieux comprendre.


Merci d'avance pour votre retour.
Cordialement.
 

Pièces jointes

  • exemple.xlsx
    43.8 KB · Affichages: 12
Solution
Bonjour à tous,

1. oui le signe "*" sert à multiplier les conditions dans la formule.

2. c'est un filtre et il ne se remet pas à jour après changement d'acteur, il faut donc filtrer de nouveau.

2bis. Comme signalé, c'est une autre approche et je ne savais pas qu'il y avait des graphiques à mettre en place.

Job75 ;) que je salue et félicite pour sa version VBA a répondu complètement à ta demande, c'est l'essentiel.

JHA

job75

XLDnaute Barbatruc
Bonjour e17010086, laurent3372, JHA,

Voyez le fichier joint et cette macro dans Module1 (Alt+F11) :
VB:
Sub Resultat()
Dim F As Worksheet, d As Object, tablo, resu(), i&, x$, n&, lig&
Set F = Tabelle1 'CodeName de la feuille
Set d = CreateObject("Scripting.Dictionary")
If F.FilterMode Then F.ShowAllData 'si la feuille est filtrée
With F.[A1].CurrentRegion
    .Sort .Columns(2), xlAscending, Header:=xlYes 'tri croissant sur les dates
    tablo = .Resize(, 3) 'matrice, plus rapide
End With
ReDim resu(1 To UBound(tablo), 1 To 4)
For i = 2 To UBound(tablo)
    x = LCase(Trim(tablo(i, 1))) 'la casse est ignorée, espaces superflus en A11 et sur Pierre et Jacques
    If x <> "" Then
        If tablo(i, 3) = 1 Then
            If Not d.exists(x) Then
                n = n + 1
                d(x) = n 'mémorise la ligne
                resu(n, 1) = tablo(i, 1)
                resu(n, 2) = tablo(i, 2)
            End If
            lig = d(x) 'restitue la ligne
            resu(lig, 3) = tablo(i, 2)
            resu(lig, 4) = resu(lig, 4) + 1 'comptage
        Else
            If d.exists(x) Then d.Remove x 'retire l'item du Dictionary
        End If
    End If
Next
'---restitution---
With F.[K8] '1ère cellule de destination, à adapter
    If n Then .Resize(n, 4) = resu
    .Offset(n).Resize(F.Rows.Count - n - .Row + 1, 4).ClearContents 'RAZ en dessous
End With
End Sub
Elle est très rapide car elle utilise des tableaux VBA et le Dictionary.

A+
 

Pièces jointes

  • Exemple(1).xlsm
    58.8 KB · Affichages: 18

e1701086

XLDnaute Nouveau
Bonjour JHA,

Merci pour votre retour.
Suite à votre nouveau fichier, j'ai quelques questions.
1. A quoi sert "*" dans les formules ? A multiplier ?
2. Pourquoi lorsque je change d'acteur, le filtre 0 sur le Nbre de validation ne se maintient pas ?
2. Mon rendu final doit être un histogramme avec en abscisse tous les acteurs, en ordonnées le Nbre de validation le tout en filtrant sur une certaines périodes. Comment puis-je faire cela ?

Merci encore pour votre rendu qui me sera très utile.
 

JHA

XLDnaute Barbatruc
Bonjour à tous,

1. oui le signe "*" sert à multiplier les conditions dans la formule.

2. c'est un filtre et il ne se remet pas à jour après changement d'acteur, il faut donc filtrer de nouveau.

2bis. Comme signalé, c'est une autre approche et je ne savais pas qu'il y avait des graphiques à mettre en place.

Job75 ;) que je salue et félicite pour sa version VBA a répondu complètement à ta demande, c'est l'essentiel.

JHA
 

e1701086

XLDnaute Nouveau
Bonjour,

J'ai une autre question. A partir du code VBA fourni par @job75 , Comment cela serait possible pour que dans mon tableau de base, si je filtre sur 2020, avoir seulement le nombre de valeurs consécutive sur cette année dans mon tableau de résultat ? Par consequent le compteur commencerait à zero pour la premiere date de l'année 2020, par exemple ?
 

job75

XLDnaute Barbatruc
Bonjour,

A priori sur le fichier du post #5 on peut filtrer les années de 3 manières : sur la colonne L, sur la colonne M ou sur les 2 colonnes.

Pour filtrer sur une ou 2 colonnes utilisez le filtre automatique, manuellement ou par macro.

A+
 

Discussions similaires

Réponses
4
Affichages
462
Réponses
4
Affichages
288

Statistiques des forums

Discussions
315 116
Messages
2 116 413
Membres
112 743
dernier inscrit
adilfakhir