IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Excel Discussion :

Formule pour occurences [XL-2013]


Sujet :

Excel

  1. #1
    Membre régulier
    Inscrit en
    Juin 2010
    Messages
    358
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 358
    Points : 77
    Points
    77
    Par défaut Formule pour occurences
    Bonjour,

    Je cherche une formule qui pourrait m'indiquer le nombre d’occurrences d'une valeur données en tenant compte des cellules vides.

    Dans le fichier joint, la colonne B contient 19 fois la valeur "CP" en 3 groupes (car séparés par des colonnes nulles mais non vides car elles contiennent des formules).
    Ce que je voudrais, c'est trouver la formule qui me permettrait d'afficher la valeur du plus grand groupe (en l’occurrence 10).

    Quelqu'un aurait-il une idée ?

    Merci.
    Fichiers attachés Fichiers attachés
    Microsoft SQL Server Management Studio v17.9.1

  2. #2
    Membre expert

    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2012
    Messages
    1 564
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2012
    Messages : 1 564
    Points : 3 554
    Points
    3 554
    Billets dans le blog
    1
    Par défaut
    Bonjour,
    Cela relève du code VBA.
    Pour s'en passer, on peut définir les noms suivants :
    listedates par:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =DECALER(Feuil1!$A$2;;;NB(Feuil1!$A:$A);1)
    debutséquences par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =SI((DECALER(Listedates;0;1)="CP")*(DECALER(Listedates;-1;1)="");Listedates;"")
    finséquences par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =SI((DECALER(Listedates;0;1)="CP")*(DECALER(Listedates;1;1)="");Listedates;"")
    nbséquences par :
    Le nombre de "CP" contenus dans la plus grande séquence peut alors s'obtenir avec la formule matricielle :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =MAX(NB.JOURS.OUVRES(PETITE.VALEUR(debutséquences;LIGNE(A1:INDIRECT("A"&nbséquences)));PETITE.VALEUR(finséquences;LIGNE(A1:INDIRECT("A"&nbséquences)))))
    à valider par Ctrl + Maj + Entrée.
    En toute rigueur, il faudrait définir une plage de jours fériés pour l'année étudiée et l'utiliser comme paramètre de la fonction NB.JOURS.OUVRES mais comme dans l'exemple
    donné, aucun jour férié n'intervient dans les trois séquences de dates correspondant à des "CP", je ne l'ai pas créée.
    Cordialement
    Claude

  3. #3
    Membre expert

    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2012
    Messages
    1 564
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2012
    Messages : 1 564
    Points : 3 554
    Points
    3 554
    Billets dans le blog
    1
    Par défaut
    Bonjour,
    En décomposant la formule proposée dans le message précédent et en rajoutant aux quatre noms déjà définis un cinquième duréeséquences par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =NB.JOURS.OUVRES(PETITE.VALEUR(debutséquences;LIGNE(Feuil1!$A$1:INDIRECT("A"&nbséquences)));PETITE.VALEUR(finséquences;LIGNE(Feuil1!$A$1:INDIRECT("A"&nbséquences))))
    on peut récupérer d'autres renseignements pour la plus grande séquence cherchée :
    sa valeur bien sûr mais il suffit maintenant d'écrire comme formule :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    = MAX ( duréeséquences )
    mais aussi la date de début de cette séquence avec la formule :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =PETITE.VALEUR(debutséquences;EQUIV(E2;duréeséquences;0))
    et la date de fin de la séquence avec la formule :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =PETITE.VALEUR(finséquences;EQUIV(E2;duréeséquences;0))
    Nom : séquences.JPG
Affichages : 230
Taille : 73,6 Ko
    Cordialement
    Claude

  4. #4
    Membre régulier
    Inscrit en
    Juin 2010
    Messages
    358
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 358
    Points : 77
    Points
    77
    Par défaut
    Merci pour toutes ces réponses mais je n'ai pas réussi à reproduire le système.
    Dès la partie debutséquences, je me retrouve avec des 0 partout.
    Serait-il possible de remplir le fichier d'exemple avec les formules afin que je comprenne mieux comment il faudrait que je les applique ?

    Merci.
    Microsoft SQL Server Management Studio v17.9.1

  5. #5
    Membre expert

    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2012
    Messages
    1 564
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2012
    Messages : 1 564
    Points : 3 554
    Points
    3 554
    Billets dans le blog
    1
    Par défaut
    Bonjour,
    Je joins le dernier classeur dans lequel sont accumulés les trois paramètres de la séquence la plus longue : durée, début, fin.
    Utiliser le Gestionnaire de noms pour visualiser les formules définissant les noms employés.
    Cordialement
    Claude
    Fichiers attachés Fichiers attachés

  6. #6
    Membre régulier
    Inscrit en
    Juin 2010
    Messages
    358
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 358
    Points : 77
    Points
    77
    Par défaut
    Ça fonctionne !
    Je n'avais pas compris qu'il fallait mettre toutes les formules dans le gestionnaire de noms...

    Merci beaucoup !
    Microsoft SQL Server Management Studio v17.9.1

  7. #7
    Membre régulier
    Inscrit en
    Juin 2010
    Messages
    358
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 358
    Points : 77
    Points
    77
    Par défaut
    Bonjour papouclo,

    Je reviens vers vous car je me suis aperçu par hasard d'un problème qui semble inhérent aux jours fériés.
    Dans le fichier d'exemple que vous m'aviez envoyé, lorsque je saisis des dates entre par exemple le 11/07 et le 18/07, le compteur valeur la plus grande m'affiche 6 alors qu'il n'y a que 5 CP de renseignés sur cette période.
    Cela se reproduit aussi pour le 5 mai.
    Lorsque j'ajoute les jours fériés et que je saisie un CP dessous, le compteur tombe de nouveau juste mais comme cette opération ne peut se faire, le compteur a de fortes chances d'afficher une valeur fausse...

    Sauriez-vous d'où cela peut-il provenir ?
    Microsoft SQL Server Management Studio v17.9.1

  8. #8
    Membre expert

    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2012
    Messages
    1 564
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2012
    Messages : 1 564
    Points : 3 554
    Points
    3 554
    Billets dans le blog
    1
    Par défaut
    Bonjour,
    Je reviens vers vous car je me suis aperçu par hasard d'un problème qui semble inhérent aux jours fériés.
    J'avais parlé de ce problème sans le traiter dès mon premier message.
    En toute rigueur, il faudrait définir une plage de jours fériés pour l'année étudiée et l'utiliser comme paramètre de la fonction NB.JOURS.OUVRES mais comme dans l'exemple
    donné, aucun jour férié n'intervient dans les trois séquences de dates correspondant à des "CP", je ne l'ai pas créée.
    Le classeur joint contient une feuille Feuil2 dans laquelle se calcule automatiquement une plage des dates de jours fériés pour l'année traitée.
    Cette plage D2: D12 est nommée ferie.
    Dans le gestionnaire de noms, la formule définissant le nom duréeséquences s'écrit alors :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =NB.JOURS.OUVRES(PETITE.VALEUR(debutséquences;LIGNE(Feuil1!$A$1:INDIRECT("A"&nbséquences)));PETITE.VALEUR(finséquences;LIGNE(Feuil1!$A$1:INDIRECT("A"&nbséquences)));feries)
    Cordialement
    Claude
    Fichiers attachés Fichiers attachés

  9. #9
    Membre régulier
    Inscrit en
    Juin 2010
    Messages
    358
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 358
    Points : 77
    Points
    77
    Par défaut
    Merci beaucoup pour le fichier complété, cela résout mon problème.
    Microsoft SQL Server Management Studio v17.9.1

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2013] formule pour doublons et occurence sur deux colonnes
    Par BAB60 dans le forum Excel
    Réponses: 5
    Dernier message: 23/09/2016, 21h34
  2. [Excel] formule pour une liste déroulante
    Par marsupilami34 dans le forum Excel
    Réponses: 2
    Dernier message: 02/02/2007, 21h44
  3. Formule pour prendre certains digits d'un Champs.
    Par jboumaaz dans le forum Formules
    Réponses: 6
    Dernier message: 17/01/2007, 15h37
  4. [EXCEL] Formule pour un système d'équation
    Par Gerard6969 dans le forum Macros et VBA Excel
    Réponses: 46
    Dernier message: 10/10/2006, 10h07
  5. 2 "formules" pour un même Source Contrôle??
    Par Mr White dans le forum Access
    Réponses: 11
    Dernier message: 21/10/2005, 14h14

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo