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

Conception Discussion :

Simplifier une rafalle de NB.SI.ENS ? [XL-2010]


Sujet :

Conception

  1. #1
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut Simplifier une rafalle de NB.SI.ENS ?
    Bonjour à tous et toutes et merci de votre temps et de votre aide.

    J'ai la formule suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    =NB.SI.ENS('Suivi Dossiers'!$E:$E; ">1";   'Suivi Dossiers'!$F:$F; CurrentYear;   'Suivi Dossiers'!$H:$H; 'Listes Réf.'!$D$5)
      + NB.SI.ENS('Suivi Dossiers'!$E:$E; ">1";   'Suivi Dossiers'!$F:$F; CurrentYear;   'Suivi Dossiers'!$H:$H; 'Listes Réf.'!$D$6)
      + NB.SI.ENS('Suivi Dossiers'!$E:$E; ">1";   'Suivi Dossiers'!$F:$F; CurrentYear;   'Suivi Dossiers'!$H:$H; 'Listes Réf.'!$D$7)
      + NB.SI.ENS('Suivi Dossiers'!$E:$E; ">1";   'Suivi Dossiers'!$F:$F; CurrentYear;   'Suivi Dossiers'!$H:$H; 'Listes Réf.'!$D$16)
      + NB.SI.ENS('Suivi Dossiers'!$E:$E; ">1";   'Suivi Dossiers'!$F:$F; CurrentYear;   'Suivi Dossiers'!$H:$H; 'Listes Réf.'!$D$17)
      + NB.SI.ENS('Suivi Dossiers'!$E:$E; ">1";   'Suivi Dossiers'!$F:$F; CurrentYear;   'Suivi Dossiers'!$H:$H; 'Listes Réf.'!$D$18)
      + NB.SI.ENS('Suivi Dossiers'!$E:$E; ">1";   'Suivi Dossiers'!$F:$F; CurrentYear;   'Suivi Dossiers'!$H:$H; 'Listes Réf.'!$D$30)
    Comme on peut le voir à part le dernier terme, 'Listes Réf.'!$D$5 tous les autres paramètres sont identiques.
    Je ne peux pas modifier ma source 'Suivi Dossiers' pou rajouter un identifant "de groupe" qui permettrai de ne tester qu'un seule valeur.

    Les valeurs contenues dans la colonne D de la feuille List Réf est une listes de textes variés (pas triés, pas compris entre des bornes).
    Je peux peut-être modifier Liste Réf. pour ajouter une notion de groupe mais j'aimerai mieux pas.

    Donc, est-il possible d'avoir un truc du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =NB.SI.ENS('Suivi Dossiers'!$E:$E; ">1";   'Suivi Dossiers'!$F:$F; CurrentYear;   'Suivi Dossiers'!$H:$H; DANS('Listes Réf.'!$D$5; 'Listes Réf.'!$D$6; ...; 'Listes Réf.'!$D$30))
    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  2. #2
    Expert confirmé
    Homme Profil pro
    Responsable des études
    Inscrit en
    Juillet 2014
    Messages
    2 661
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2014
    Messages : 2 661
    Points : 5 785
    Points
    5 785
    Par défaut
    Bonjour,

    Je travaille actuellement sur un cas similaire et je n'ai malheureusement pas de réponse à ta question.
    J'ai cependant contourné/déplacé le problème en ajoutant une colonne à ma source de données ('suivi dossiers' pour toi) avec une formule qui renvoie vrai dans les cas qui m'intéresse
    Puis je fais mon nb.si.ens en utilisant cette colonne:
    NB.SI.ENS('Suivi Dossiers'!$E:$E; ">1"; 'Suivi Dossiers'!$F:$F; CurrentYear; 'Suivi Dossiers'!"colonne_sup";Vrai)
    Ce qui me permet si la liste change de n'avoir qu'une formule à modifier au lieu d'avoir à ajouter/supprimer des nb.si.ens
    C'est pas l'idéal mais je n'ai pas trouver mieux.
    D'ailleurs si toi tu réussi à faire mieux, ça m'intéresse
    J'aimerais bien aller vivre en Théorie, car en Théorie tout se passe bien.

  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,
    On peut essayer de remplacer la fonction NB.SI.ENS par un SOMMEPROD avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    =  SOMMEPROD(1 * ('Suivi Dossiers'!$E:$E>1)*('Suivi Dossiers'!$F:$F=CurrentYear) 
                   * (ESTNUM(EQUIV('Suivi Dossiers'!$H:$H; 'Listes Réf.'!$D$5:$D$7;0)) 
                       +  ESTNUM(EQUIV('Suivi Dossiers'!$H:$H; 'Listes Réf.'!$D$16:$D$18;0)) 
                       +  ESTNUM(EQUIV('Suivi Dossiers'!$H:$H; 'Listes Réf.'!$D$30;0))))
    On passe d'une formule d'environ 900 caractères à une formule qui s'écrit avec moins de 300 caractères.
    Mais le problème reste la rapidité avec une formule (qui reste matricielle avec le SOMMEPROD) travaillant sur 3 colonnes entières de la feuille 'Suivi Dossiers'.
    Cordialement
    Claude

  4. #4
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Bonjour.

    Merci papouclo de cette idée.

    Un autre problème avec SOMMEPROD est que cela fait une formule difficile à comprendre pour moi ou mes collègues.

    J'ai un peu réorganisé l'affichage pour essayer d'y voir plus claire et cela reste encore mystérieux.

    Et à quoi sert le 1 * au début ? À priori multiplier par 1 ne change rien au résultat, non ?

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  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,
    On peut ne pas écrire le produit par 1. C'est une vieille habitude qui n'est plus nécessaire.
    Les facteurs du produit :
    ('Suivi Dossiers'!$E:$E>1)
    ('Suivi Dossiers'!$F:$F=CurrentYear)
    (ESTNUM(EQUIV('Suivi Dossiers'!$H:$H; 'Listes Réf.'!$D$5:$D$7;0)) + ESTNUM(EQUIV('Suivi Dossiers'!$H:$H; 'Listes Réf.'!$D$16:$D$18;0)) + ESTNUM(EQUIV('Suivi Dossiers'!$H:$H; 'Listes
    Réf.'!$D$30;0))))

    renvoient des valeurs logiques VRAI ,FAUX, remplacées par Excel par des valeurs numériques 1 , 0 dans des calculs.
    Mais dans d'anciennes versions, le calcul faisant intervenir ces valeurs logiques devait contenir au moins un facteur numérique d'où le produit par 1.
    Cordialement
    Claude

  6. #6
    Expert confirmé Avatar de Patrice740
    Homme Profil pro
    Retraité
    Inscrit en
    Mars 2007
    Messages
    2 475
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 475
    Points : 5 630
    Points
    5 630
    Par défaut
    Bonjour,

    Citation Envoyé par marot_r Voir le message
    Et à quoi sert le 1 * au début ? À priori multiplier par 1 ne change rien au résultat, non ?
    Le * 1 sert à convertir un résultat booléen (vrai ou faux) en résultat numérique (1 ou 0).
    Il est aussi possible d'utiliser + 0 ou encore --
    Par exemple :
    =SOMMEPROD($A$1:$A$20=4)
    Ne donne pas le même résultat que les 3 formules ci-dessous
    =SOMMEPROD(($A$1:$A$20=4)*1)
    =SOMMEPROD(($A$1:$A$20=4)+0)
    =SOMMEPROD(--($A$1:$A$20=4))

    Contrairement à ce qu'affirme papouclo il le faut toujours car dans la première formule le résultat est toujours 0 alors que les autres comptent le nombre de 4 dans la plage.

    PS :
    Dans les 3 cas il s'agit d'un subterfuge pour provoquer la conversion des booléens en nombres.
    L'écriture la plus logique est d'utiliser la fonction de conversion en nombre N().
    =SOMMEPROD(N($A$1:$A$20=4))
    (et on économise un caractère)
    Cordialement,
    Patrice
    Personne ne peut détenir tout le savoir, c'est pour ça qu'on le partage.

    Pour dire merci, cliquer sur et quand la discussion est finie, penser à cliquer sur

  7. #7
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Bonjour, désolé du retard mais on a eu quelques urgences à régler.

    Merci de ces réponses je prends note du SOMMEPROD ainsi que les astuces de conversion et je vais étudier cela plus profondément dés que possible.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

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

Discussions similaires

  1. [Tableaux] Simplifier une syntaxe
    Par blueice dans le forum Langage
    Réponses: 1
    Dernier message: 07/09/2006, 13h39
  2. [MySQL] Simplifier une requete
    Par philippef dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 04/07/2006, 15h42
  3. simplifier une expression math ?
    Par kanzarih dans le forum Delphi
    Réponses: 7
    Dernier message: 23/05/2006, 23h31
  4. [SQL] Simplifier une requête SQL ?
    Par renaud26 dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 29/04/2006, 13h50
  5. Simplifier une formule excel
    Par beegees dans le forum Macros et VBA Excel
    Réponses: 12
    Dernier message: 24/04/2006, 09h10

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