Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

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

e1701086

XLDnaute Nouveau
Bonjour,
Excusez-moi, ceci était une erreur. Je vous joins le nouveau fichier. Ceci dit, Avez-vous une idée du comment je pourrais résoudre mon problème ?
 

Pièces jointes

  • Exemple2.xlsx
    43.8 KB · Affichages: 7

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
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…