Classement de date (par mois) par nombre de récurrence

Bonjour à toutes et à tous,

Je découvre Excel depuis deux ans en autodidacte, et je m'en remets à vos connaissances pour résoudre un problème.

Dans un tableau (Tableau1 sous l'onglet "Projet"), j'ai une colonne intitulée [Date du devis]. Je souhaite connaître le mois le plus représenté (par ordre décroissant) dans une formule matricielle propagée. Tous les mois ne doivent pas obligatoirement être représentés, seulement ceux apparaîssant dans la colonne ''Date du devis''. Avec mes compétences limitées, j'ai laborieusement obtenu un résultat (actuellement en J39). La formule est la suivante : =ASSEMB.V({"Mois"."Nombre de devis"};TRIER(LET(mois;UNIQUE(Tableau1[Mois en texte]);nb; MAP(mois; LAMBDA(m; NB.SI(Tableau1[Mois en texte]; m)));ASSEMB.H(mois; nb)); 2; -1)). Une colonne à donc dû être créée : [Mois en texte], soit la colonne la plus à droite de mon Tableau1.

Ma question est de savoir s'il est potentiellement réalisable d'obtenir un résultat identique à ce qui est présent en J39, tout comme peuvent l'être mes formules précédentes propagées en A39, D39 et G39. Les rares essais réalisés se sont tous soldés par une erreur #CALC !

13prospects.xlsx (52.25 Ko)

Merci par avance à toutes celles et ceux qui m'aideront à résoudre ce problème.

Bonjour,

Ci-arprès une proposition si j'ai bien compris.

Vous aviez un très bon début, le seul "hic" c'est que NB.SI n'accepte pas les plages dynamiques dans ses paramètres. Donc le contournement c'est d'utiliser la SOMME des VRAIS=1/FAUX=0. Un peu comme SOMMEPROD sur les anciennes versions.

=LET(
_head; {"Mois"."Nombre de devis"};
_mois; TEXTE(Tableau1[Date du devis];"mmmm");
_moisU; UNIQUE(_mois);
_nb; MAP(_moisU; LAMBDA(m; SOMME(1*(m=_mois))));
ASSEMB.V(_head; ASSEMB.H(_moisU; _nb)))

PS : mettez votre profil à jour, a priori vous utilisez Excel 365 (FR), c'est le numéro de version qui est attendu.

Merci à vous Saboh, c'est exactement ce que j'attendais.

Très bien, je vais mettre mon profil à jour.

Merci pour votre retour, content d'aider.

Bienvenue sur le forum et bonne fin de journée

Merci !

Autre question, est-il possible d'incorporer à cette formule une moyenne mensuelle sur toutes les années qui seront repertoriées dans ma colonne [Date du devis] ?

Merci !

Autre question, est-il possible d'incorporer à cette formule une moyenne mensuelle sur toutes les années qui seront repertoriées dans ma colonne [Date du devis] ?

Oui bien sûr, mais une moyenne sur quelle colonne du tableau ? Je n'ai pas bien compris.

Bonjour à tous !

Une autre approche pour la demande originelle :

=ASSEMB.V({"Mois"."Nombre de devis"};GROUPER.PAR(Tableau1[Mois en texte];Tableau1[Mois en texte];NBVAL;;0;-2))

A noter : La formule initiale ne présentait aucune erreur dans mon environnement (M365 Insider)

image image

La même colonne en réalité, Tableau1[Date du devis]. Je connais , grâce à vous, le nombre de devis établi pour chaque mois, et je souhaiterais désormais connaître le nombre moyen de devis établi pour chaque mois pour chaque année représentée dans cette même colonne. Idéalement, toujours en formule matricielle propagée.

Re, en repartant de l'intelligente proposition de @JFL, on peut utiliser GROUPER.PAR. Cependant je ne comprends toujours pas l'histoire de "moyenne" mensuelle puisque l'on compte le nombre par mois et par an : je ne vois pas quel élément sert à moyenner. Je pense que vous vouliez dire "compter" tout simplement.

=LET(
_head; {"Ans"."Mois"."Nombre de devis"};
_mois; TEXTE(Tableau1[Date du devis];"mmmm");
_ans; TEXTE(Tableau1[Date du devis];"aaaa");
_res; GROUPER.PAR(ASSEMB.H(_ans;_mois);1*(_ans=_ans)*(_mois=_mois);SOMME;0;0);
ASSEMB.V(_head;_res))

PS : @JFL il me semble que la demande visait à se débarrasser de la colonne d'aide contenant les mois justement. Un petit correctif et tu as la solution parfaite.

Bonjour à tous de nouveau !

PS : @JFL il me semble que la demande visait à se débarrasser de la colonne d'aide contenant les mois justement. Un petit correctif et tu as la solution parfaite.

Alors dans ce cas :

=LET(
    m; TEXTE(Tableau1[Date du devis]; "mmmm");
    ASSEMB.V(
        {"Mois". "Nombre de devis"};
        GROUPER.PAR(m; m; NBVAL; ; 0; -2)
    )
)

Veuillez m'excuser, j'aurais dû être plus précis quant à ce que j'attends de cette formule. Mon souhait est de connaître le nombre moyen de devis qui ont été établi sur chaque année et pour chaque mois. Exemple, si en 2025 (6 devis en novembre), 2026 (9 devis en novembre) et 2027 (9 devis en novembre), le nombre moyen de devis réalisé en novembre sera 8 ((6+9+9)/3). La formule me semble complexe, je me demande donc s'il est possible de récupérer les données précédemment renseignées, en J39# pour obtenir un résultat sur plusieurs années.

Je vous remercie JFL pour votre dernière proposition, mais j'ai une erreur #NOM? sur la formule.

Rebonjour,

Ah ok cette fois j'ai compris !

=LET(
_mois; TEXTE(Tableau1[Date du devis];"mmmm");
_ans; TEXTE(Tableau1[Date du devis];"aaaa");
_tbl; GROUPER.PAR(_mois;1*ASSEMB.H((_mois=_mois);_ans);ASSEMB.H(SOMME;LAMBDA(x;NB(UNIQUE(x))));0;0);
_res;BYLIGNE(EXCLURE(_tbl;1;1);LAMBDA(r;INDEX(r;1)/INDEX(r;2)));
ASSEMB.H(PRENDRE(EXCLURE(_tbl;1);;1);_res))

Il y a surement moyen de faire plus simple cela dit... Mais c'est assez parlant notamment si vous regardez le résultat contenu dans _tbl : 1 colonne pour le nombre total de devis, et 1 colonne pour le nombre d'années correspondantes.

Bonjour à tous de nouveau !

Je vous remercie JFL pour votre dernière proposition, mais j'ai une erreur #NOM? sur la formule.

Pouvez-vous indiquer la version utilisée ? (Compte / A propos de Excel)

Sinon, une proposition pour votre besoin 2 :

=PIVOTER.PAR(Tableau1[Mois en texte];ANNEE(Tableau1[Date du devis]);Tableau1[Date du devis];NB;;0)

Cette formule retourne le tableau suivant :

image

Merci Saboh, mais j'ai une erreur #NOM?, dû à la non-reconnaissance d'Excel de la fonction GROUPER.PAR. En effet, lorsque j'entre dans la formule, Excel ne détaille pas le calcul de cette fonction. Pensez-vous pouvoir contourner cela ?

Ah, c'est que vous n'avez probablement pas Excel 365 (ou non a jour), j'ai du me tromper. Comme indiqué par @JFL veuillez nous donner votre version, affichée sur votre profil comme ceci :

(cliquez sur Fichier > Compte > "A propos")

image

Ma version est : Microsoft Office LTSC Professionnel Plus 2024.

Merci pour votre proposition JFL, je la conserve précieusement.

Une autre proposition sans grouper.par :

=LET(
    _mois; TEXTE(Tableau1[Date du devis]; "mmmm");
    _ans; TEXTE(Tableau1[Date du devis]; "mmmm-aaaa");
    _moisU; UNIQUE(_mois);
    _nbDevis; MAP(_moisU; LAMBDA(m; SOMME(1 * (_mois = m))));
    _nbAns; MAP(_moisU;
        LAMBDA(m;
            LET(
                arrTxtAns; TEXTE.APRES(_ans; m & "-"; ; ; ; "non");
                NBVAL(UNIQUE(FILTRE(arrTxtAns; arrTxtAns <> "non")))
            )
        )
    );
    ASSEMB.H(_moisU; _nbDevis / _nbAns)
)

Ma version est : Microsoft Office LTSC Professionnel Plus 2024.

Sur votre profil indiquez 2024 (FR) alors. Excusez-moi je vous ai mal guidé tout à l'heure avec 365.

Merci Saboh, cela fonctionne ! J'ai simplement ajouté les "titres" aux colonnes.

=ASSEMB.V({"Mois"."Devis moyen"};LET(_mois; TEXTE(Tableau1[Date du devis]; "mmmm");_ans; TEXTE(Tableau1[Date du devis]; "mmmm-aaaa");_moisU; UNIQUE(_mois);_nbDevis; MAP(_moisU; LAMBDA(m; SOMME(1 * (_mois = m))));_nbAns; MAP(_moisU;LAMBDA(m;
LET(arrTxtAns; TEXTE.APRES(_ans; m & "-"; ; ; ; "non");NBVAL(UNIQUE(FILTRE(arrTxtAns; arrTxtAns <> "non"))))));ASSEMB.H(_moisU; _nbDevis / _nbAns))
)

Parfait, content d'avoir pu vous aider avec @JFL.

Bonne fin de journée et bon weekend.

N'oubliez pas votre profil, j'ai édité mon message précédent.

Cela a été fait ! Merci pour votre vigilance.

Rechercher des sujets similaires à "classement date mois nombre recurrence"