SOMMEPROD FREQUENCE MOIS

Résolu/Fermé
rorolidalgo - 29 juin 2009 à 12:37
eriiic Messages postés 24603 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 15 décembre 2024 - 1 juil. 2009 à 17:16
Bonjour,
J'ai le souci suivant dans Excel:
J'ai une colonne de dates B4 à B559, les dates se répétant plusieurs fois. Exemple:
20/12/2008
20/12/2008
22/12/2008
22/12/2008
09/01/2009
14/01/2009
14/01/2009
14/01/2009
14/01/2009
14/01/2009
15/01/2009
15/01/2009
16/01/2009
19/01/2009
19/01/2009
19/01/2009
20/01/2009
20/01/2009
20/01/2009
21/01/2009
21/01/2009
21/01/2009
21/01/2009
22/01/2009
22/01/2009
etc.

Je souhaite avoir le nombre de dates différentes sur une plage donnée.
Si la plage donnée est la plage entière, alors je rentre la formule:
=SOMMEPROD((FREQUENCE(B4:B559;B4:B559)>0)*1) qui fonctionne très bien (elle me donne
Le problème survient quand je veux restreindre à un mois donné (par exemple le mois de MAI (=5))
La formule que j'ai saisie ci-après ne fonctionne pas:
=SOMMEPROD((MOIS(B4:B559)=5)*(FREQUENCE(B4:B559;B4:B559)>0)*1)
J'obtiens #N/A
Quelqu'un a-t-il la solution?
Merci d'avance

14 réponses

michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 310
29 juin 2009 à 14:20
Bonjour

Ci joint proposition pas fute-fute mais...
https://www.cjoint.com/?gDorxMS3no

je sèche sur un sommeprod ou une matricielle sans cellule intermédiaire

par contre, on pourrait étudier une fonction ou sub en VBA si ca t'intéresse
0
rorolidalgo Messages postés 11 Date d'inscription lundi 29 juin 2009 Statut Membre Dernière intervention 1 juillet 2009
29 juin 2009 à 14:35
Merci Michel, ça marche bien effectivement, et je n'aurais jamais pensé à une telle formule.
Je n'ai pas trop le temps d'aller macroter là-dessus, mais si tu as quelque chose à me proposer, je suis toujours preneur.
En revanche, je reste persuadé que la fonction SOMMEPROD doit logiquement fonctionner, mais je ne trouve pas, et ça me frustre A MORT....!
Merci encore
Rodolphe
0
eriiic Messages postés 24603 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 15 décembre 2024 7 248
29 juin 2009 à 14:49
Bonjour tout le monde,

Des fois que ça enlève ta frustration ;-) :
=SOMMEPROD((FREQUENCE((MOIS(A2:A26)=12)*(A2:A26);A2:A26)>0)*1)
à tester + complètement...
eric
0
rorolidalgo Messages postés 11 Date d'inscription lundi 29 juin 2009 Statut Membre Dernière intervention 1 juillet 2009
29 juin 2009 à 15:36
Génial Eriiic, ta formule est géniale, c'est ce que je cherchais. MAIS elle le fonctionne pas dans tous les cas, et je n'ai pas encore trouvé pourquoi.
Notamment:
- quand toutes les cellules sont vides, il compte quand même 1.
- si je fais un tableau de 5 colonnes avec 1/1, 1/2, VIDE, VIDE, VIDE, et le mois de février, il me donne 2! (au lieu de 1)
- si dans ce mm tableau, je remplace 1/1 par 1/2, il me donne bien 1.
C'est à n'y rien comprendre.
J'ai résumé cela dans un fichier Excel mais je ne sais pas comment l'attacher à mon message....

Merci encore!!
Rodolphe
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 310
29 juin 2009 à 15:27
he oui, mais c'est bien sûr!

Chapeau, Eric !
0
eriiic Messages postés 24603 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 15 décembre 2024 7 248
29 juin 2009 à 15:48
Re,

de toute façon il y a un élément qu'on a oublié de tenir compte c'est l'année (compter séparément décembre 2008 et 2009), ce qui du même coup resoudra le pb de la cellule vide (qui est une date valide pour excel) :
=SOMMEPROD((FREQUENCE((MOIS(A2:A35)=12)*(ANNEE(A2:A35)=2008)*(A2:A35);A2:A35)>0)*1)

- si je fais un tableau de 5 colonnes avec 1/1, 1/2, VIDE, VIDE, VIDE, et le mois de février, il me donne 2! (au lieu de 1)
- si dans ce mm tableau, je remplace 1/1 par 1/2, il me donne bien 1.
C'est à n'y rien comprendre.

C'est peut-être pour ça que je ne comprend rien à ta prose...
Pour moi en colonne A il n'y a que des dates, et pas de colonne intermédiaires.
Déposer le fichier sur cijoint.fr et coller ici le lien fourni.

Je dois m'absenter, pas de soucis si tu prends le relais michel :-)
(d'ailleurs je m'étonne que tu es été bloqué là dessus, mauvais départ sans doute...)

eric
0
rorolidalgo Messages postés 11 Date d'inscription lundi 29 juin 2009 Statut Membre Dernière intervention 1 juillet 2009
29 juin 2009 à 15:55
Merci Eric,

Voici le fichier:
http://www.cijoint.fr/cjlink.php?file=cj200906/cijDYwJUy4.xls

A+
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
rorolidalgo Messages postés 11 Date d'inscription lundi 29 juin 2009 Statut Membre Dernière intervention 1 juillet 2009
29 juin 2009 à 15:51
Pour les cellules vides, c'est normal en fait, puisque MOIS(cellule_vide)=1.
Mais même en rajoutant le test de la valeur vide, avec:
=+SOMMEPROD((FREQUENCE((MOIS(A1:A5)=$B$10)*(ESTVIDE(A1:A5)=FAUX)*(A1:A5);A1:A5)>0)*1)
le résultat est toujours =1 avec 5 cellules vides.
Bizarre non?
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 310
29 juin 2009 à 15:57
d'ailleurs je m'étonne que tu es été bloqué là dessus,
Bin on vieillit mal, mon cher Eric

roro
pour joindre un fichier
https://www.cjoint.com/
et tu colles le lien proposé dans ton message

Je repasserai dabs env. 1 heure
0
eriiic Messages postés 24603 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 15 décembre 2024 7 248
29 juin 2009 à 22:13
Re,

Je viens de me repencher dessus et c'est vrai que frequence() ne retourne pas toujours le résultat attendu...
Je pense qu'il faut jouer sur son 2nd parametre mais pas évident.
eric
0
qmike Messages postés 1509 Date d'inscription mardi 19 juillet 2005 Statut Membre Dernière intervention 18 juin 2012 594
30 juin 2009 à 08:21
Bonjour
exemple pour calculer lel nombre de date correspondant au mois d 'avril

=SOMMEPROD((MOIS(A1:A10) = 4)*1)
0
eriiic Messages postés 24603 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 15 décembre 2024 7 248
30 juin 2009 à 09:11
Bonjour tout le monde,

Merci de l'aide qmike mais ce que souhaite roro est le nombre de jours différents dans un mois donné.
La nuit n'ayant pas porté conseil je n'ai pour l'instant que la méthode brutos, une simple fonction personnalisée :
Function JDiffMois(plage As Range, mois As Long, année As Long) As Long
    Dim c As Range, i As Long, j(31) As Long
    For Each c In plage
        If Year(c) = année And Month(c) = mois Then j(Day(c)) = 1
    Next c
    For i = 1 To 31
        JDiffMois = JDiffMois + j(i)
    Next i
End Function

A mettre dans un module
roro.xls

eric
0
rorolidalgo Messages postés 11 Date d'inscription lundi 29 juin 2009 Statut Membre Dernière intervention 1 juillet 2009
30 juin 2009 à 10:25
Merci les gars, c'est vraiment sympa.
Eric, le dernier fichier que tu m'as renvoyé retourne #NOM? à chaque endroit de ta fonction.
Y faut pas insérer Explicit ou autre chose en tête du code?
A+ merci encore
Rodolphe
0
rorolidalgo Messages postés 11 Date d'inscription lundi 29 juin 2009 Statut Membre Dernière intervention 1 juillet 2009
30 juin 2009 à 10:37
C'est moi qui déconnais avec l'activation des macros, CA MARCHE SUPER. MERKI ENCORE!!
Rodolphe
0
rorolidalgo Messages postés 11 Date d'inscription lundi 29 juin 2009 Statut Membre Dernière intervention 1 juillet 2009
30 juin 2009 à 11:03
En fait, je voudrais maintenant utiliser cette fonction dans tous les classeurs, et j'ai rajouté "Public" devant "Function", mais ça ne fonctionne pas....
Quelqu'un sait pourquoi?
Merci
0
eriiic Messages postés 24603 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 15 décembre 2024 7 248
30 juin 2009 à 11:39
Si tu as bien mis la fonction dans un module et non dans une feuille ça doit marcher.
Elle doit apparaitre dans 'insertion / fonction...' catégorie 'fonction personnalisée'

Il faut que le classeur ayant la fonction soit ouvert,
ou bien qu'elle soit dans le classeur de macros personnelles (là il y a 2 ou 3 façons différentes (voir par exemple ici) pour qu'elle soit disponible en permanence.

eric
0
rorolidalgo Messages postés 11 Date d'inscription lundi 29 juin 2009 Statut Membre Dernière intervention 1 juillet 2009
30 juin 2009 à 11:52
J'ai bien la Fct dans un module dans mon PERSONAL.XLSB (j'ai Excel 2007).
Dans un classeur quelconque, quand je saisis "=J" pour qu'il me propose de choisir les fct° qui commencent par J dont la tienne, je n'ai pas la tienne qui se met en menu déroulant.
Quand je vais dans "insérer une fct°/personnalisées", je la trouve bien, mais avec le chemin:
=PERSONAL.xlsb!JDiffMois(G18:G27;12;2009)

Merci
0
eriiic Messages postés 24603 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 15 décembre 2024 7 248
30 juin 2009 à 12:07
il me propose de choisir les fct° qui commencent par J dont la tienne, je n'ai pas la tienne qui se met en menu déroulant.
n'ayant pas excel 2007 je ne vois pas trop...

je la trouve bien, mais avec le chemin: =PERSONAL.xlsb!JDiffMois(G18:G27;12;2009)
C'est normal lorsqu'elle est dans un autre classeur que celui qui est actif.
Et si tu la choisis il se passe quoi ?

Sinon il va falloir attendre qcq'un qui ait excel 2007, il y a peut-être une particularité.
0
rorolidalgo Messages postés 11 Date d'inscription lundi 29 juin 2009 Statut Membre Dernière intervention 1 juillet 2009
30 juin 2009 à 12:12
si je la choisis elle fonctionne bien, en fait.
C'est juste que je m'attendais à l'avoir en "direct" en menu déroulant, comme par exemple quand je tape "Som" Merci encore Eric
0
eriiic Messages postés 24603 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 15 décembre 2024 7 248 > rorolidalgo Messages postés 11 Date d'inscription lundi 29 juin 2009 Statut Membre Dernière intervention 1 juillet 2009
30 juin 2009 à 12:18
Sur 2003 elle est bien classée à J malgré le nom du fichier devant (c'est vrai que c'est perturbant la 1ère fois), sur 2007 elle est peut-être classée à P ?
Si tu veux pense à mettre en résolu...
eric
0
rorolidalgo Messages postés 11 Date d'inscription lundi 29 juin 2009 Statut Membre Dernière intervention 1 juillet 2009 > eriiic Messages postés 24603 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 15 décembre 2024
1 juil. 2009 à 17:11
une dernière question Eric stp:
dans ton code, lorsque tu écris dim j(31) as Long. C'est quoi ce "long" exactement, c'est une matrice de 31 lignes à une colonne? (je n'avais jamais vu ça auparavant)
Merci
Rodolphe
0
eriiic Messages postés 24603 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 15 décembre 2024 7 248
1 juil. 2009 à 17:16
Bonjour,

dim j(31) c'est une variable tableau de 32 lignes (0 à 31)
as long : type de variable entier long (sur 32 bits)

eric
0