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 :

Somme conditionnelle avec condition sur une partie de cellule + RechercheV [XL-2003]


Sujet :

Excel

  1. #1
    Membre habitué
    Profil pro
    Business Analyst
    Inscrit en
    Juin 2009
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Business Analyst

    Informations forums :
    Inscription : Juin 2009
    Messages : 93
    Points : 152
    Points
    152
    Par défaut Somme conditionnelle avec condition sur une partie de cellule + RechercheV
    Bonjour,

    Un souci de syntaxe sur un enchevêtrement de fonctions...

    J'ai deux tableaux :
    - un bête tableau à deux colonnes :
    … l'une porte un grand libellé client de longueur fixe (plein d'infos en vrac, dont le code postal qui est toujours sur les positions 59 à 63)
    … et l'autre est un volume de ventes ;
    - la table de correspondance département x région.

    Ce que je veux faire : un tableau-récap de ventes par région.

    Alors évidemment, je pourrais ajouter des colonnes à mon tableau de départ, pour sortir le code postal avec un STXT puis la région avec une RECHERCHEV ; ensuite un SOMME.SI fait le reste, ok.

    Mais je veux le faire d'un seul coup - notamment parce que mon tableau de base aura un nombre variable de lignes et que je ne peux pas jouer à ajuster les lignes.

    Qui a la clé ?
    Merci de votre aide !!!

    Benoît

  2. #2
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Bonjour
    En F1 tu as le code postal, en G1 la formule suivante
    =SOMMEPROD((STXT($A$1:$A$100;59;5)=TEXTE(F1;"00000"))*($B$1:$B$100))
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  3. #3
    Membre habitué
    Profil pro
    Business Analyst
    Inscrit en
    Juin 2009
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Business Analyst

    Informations forums :
    Inscription : Juin 2009
    Messages : 93
    Points : 152
    Points
    152
    Par défaut
    Bonsoir mercatog,

    OK ça marche, merci de ton aide !
    (Je fais même sauter la fonction TEXTE, en entrant mon code postal au format Texte.)

    Maintenant, il me reste la correspondance "département > région" à caser : à côté j'ai une table qui relie 75-77-78-92-93-94-95 à "ILE DE FRANCE", 67-68 à ALSACE, etc.

    J'imagine qu'il faut passer le résultat de STXT (sur 2 caractères) à une RECHERCHEV vers la table correspondance ? Mais je ne trouve pas la bonne syntaxe...

    ???

    A plus,

    Benoît

  4. #4
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 774
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 774
    Points : 28 638
    Points
    28 638
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Je ne sais pas si ta table se trouve sur la même feuille mais voilà une syntaxe possible si le n° de département se trouve en colonne A et le nom de la région en B et le n° de département à chercher en F1
    Formule à placer par exemple en G1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =RECHERCHEV(F1;$A$2:$B$100;2;FAUX)
    Un très bon didacticiel de Pierre Fauconnier sur ce sujet
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  5. #5
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Bonjour

    Pour simplifier la lisibilité de la formule, j'ai nommé les plages comme ceci:

    PlCode : Plage concernant les libellés clients
    PlVal: Plage concernant les volumes de ventes
    MatReg: Plage contenant le nom de la région en première colonne et les codes des départements y afférents (séparés d'un tiret ou autre), Exemple
    ILE DE FRANCE.......|.......75-77-78-92-93-94-95
    ALSACE.................|.......67-68
    Si on cherche le cumul des ventes du département X contenu dans la cellule F21, Ci-joint formule (après tâtonnement)

    Edit: Sans parenthèses et 59 à la place du 5 fait pour le test
    =SOMMEPROD(NON(ESTERREUR(TROUVE(STXT(PlCode;59;2);RECHERCHEV(F21;MatReg;2;FAUX))))*PlVal)
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  6. #6
    Membre éclairé
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2009
    Messages
    461
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2009
    Messages : 461
    Points : 707
    Points
    707
    Par défaut
    Bonjour à tous,

    En supposant que les départements et Régions sont saisis en colonnes A et B respectivement, la valeur cherchée du département (deux chiffres) est en colonne C (on peut l'avoir par la fonction STXT à partir du code), la formule sera peut être:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =INDEX($B:$B;EQUIV(1;1*(ESTNUM(CHERCHE(C2;$A$1:$A$1000)));0))
    Au cas où le code Département est introuvable, on peut écrire la formule:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =SI(ESTERREUR(EQUIV(1;1*ESTNUM(CHERCHE(C2;$A$1:$A$1000));0));"";INDEX($B:$B;EQUIV(1;1*(ESTNUM(CHERCHE(C2;$A$1:$A$1000)));0)))
    ou (en 2007 et plus)


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =SIERREUR(INDEX($B:$B;EQUIV(1;1*(ESTNUM(CHERCHE(C2;$A$1:$A$1000)));0));"")

    Cordialement

  7. #7
    Membre habitué
    Profil pro
    Business Analyst
    Inscrit en
    Juin 2009
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Business Analyst

    Informations forums :
    Inscription : Juin 2009
    Messages : 93
    Points : 152
    Points
    152
    Par défaut
    Bonjour,

    Pour une RECHERCHEV nue ça va aller, merci Philippe pour la formule, hum...
    (Au fait, le tuto en question de Pierre Fauconnier est bon parce qu'il est visuel. Je suis persuadé que la RechercheV, qui perturbe tant de néophytes, est fondamentalement un mécanisme visuel.)

    Mercatog, merci de la piste avec la SOMMEPROD sur la RECHERCHEV, je crois que c'est la bonne direction. Mon souci, c'est que j'arrive pas à dépatouiller cette piste…

    L'usage de TROUVE est dispensable puisque ma table de correspondance est normalisée.
    J'ai fait un truc malin : un classeur-exemple, ci-joint ! (Désolé de pas l'avoir fait avant.)

    J'en suis à quelque chose comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =SOMMEPROD((RECHERCHEV(PlgClients;TblCorresp;2;FAUX)=G3)*(PlgValeurs))
    avec les noms :
    - PlgClients pour la plage des clients (sur 1 colonne)
    - TblCorresp pour celle de la table de correspondance département x région (sur 2 colonnes)
    - PlgValeurs pour celle des valeurs à côté des clients (sur 1 colonne donc)
    et G3 pour la région sur laquelle je veux faire la somme.

    Mais ça ne fonctionne pas.
    Vous voyez pourquoi ?!?

    A plus,

    Benoît
    Fichiers attachés Fichiers attachés

  8. #8
    Membre habitué
    Profil pro
    Business Analyst
    Inscrit en
    Juin 2009
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Business Analyst

    Informations forums :
    Inscription : Juin 2009
    Messages : 93
    Points : 152
    Points
    152
    Par défaut
    (Et cinq minutes plus tard...)
    J'avais zappé le STXT, n'importe quoi !

    Bon, j'en suis là :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =SOMMEPROD((RECHERCHEV(STXT(PlgClients;59;2);TblCorresp;2;FAUX)=G2)*(PlgValeurs))
    avec la région en G2.

    Ce qui commence à fonctionner, mais renvoie soit zéro, soit le total général, et je ne vois pas pourquoi !
    Classeur joint à jour...

    Benoît
    Fichiers attachés Fichiers attachés

  9. #9
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Bonjour
    Ce que j'avais compris dans ma proposition est démontré dans le fichier ci-joint
    (la partie correspondance Région-Département est mise dans une feuille cachée)
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  10. #10
    Membre habitué
    Profil pro
    Business Analyst
    Inscrit en
    Juin 2009
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Business Analyst

    Informations forums :
    Inscription : Juin 2009
    Messages : 93
    Points : 152
    Points
    152
    Par défaut
    Joli !

    C'est marrant, on travaillait la RechercheV dans des sens opposés.
    - Tu raisonnais "chercher la région de réf dans une table de correspondance => ramener sa chaîne de départements => tester si le département est dedans". Et ça marche.
    - J'essayais de faire "chercher les département dans une (autre) table de correspondance => ramener la région => tester avec la région de réf". Ce qui ne marche pas (encore).

    Au fait, du coup on peut même basculer ta formule dans la feuille "Codification" et s'affranchir de la RechercheV !
    (C'est ce que j'ai fait dans le classeur ci-joint, à partir du tiens : )
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =SOMMEPROD(NON(ESTERREUR(TROUVE(STXT(PlgClients;59;2);B2)))*PlgValeurs)
    Cinq fonctions, cinq paramètres, moins de 100 caractères...
    .
    Merci d'avoir poussé le truc au bout !
    (Et merci d'avoir pris la peine de retourner ma table de codif.)

    Je continue (un peu) de pousser mon raisonnement pour voir (à coups de EQUIV…) mais je suis prêt à passer le truc en résolu…

    Benoît
    Fichiers attachés Fichiers attachés

  11. #11
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    J'ai revu ta formule et j'ai 2 remarques:
    1. SommeProd prend en considération dans les critères des plages
    2. RechercheV donne la première occurrence trouvée


    Il fallait intervertir la première condition de SommeProd.
    Donc, disons que ta formule devrait être comme ceci:
    =SOMMEPROD((STXT(PlgClients;59;2)=RECHERCHEV(G2;TblCorresp;2;FAUX))*PlgValeurs)
    en inverssant l'ordre des 2 colonnes TblCoressp (Région en Colonne 1 et N° Département en Colonne 2)

    Mais, hélas! aussi ne donnera pas le résultat escompté parce que encore une fois rechercheV donne seulement la première valeur trouvée.
    En effet, pour l'Alsace on aura seulement la donnée du département 67 (le département 68 ne sera jamais pris en compte puisqu'il n'est pas la première valeur trouvée de RechercheV).


    Edit

    Dans ta dernière formule
    =SOMMEPROD(NON(ESTERREUR(TROUVE(STXT(PlgClients;59;2);B2)))*PlgValeurs)
    Le B2 de feuille codification, correspond au
    RECHERCHEV(G2;TblCorresp;2;FAUX)
    de la formule finale
    =SOMMEPROD(NON(ESTERREUR(TROUVE(STXT(PlgClients;59;2);RECHERCHEV(G2;TblCorresp;2;FAUX))))*PlgValeurs)
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  12. #12
    Membre éclairé
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2009
    Messages
    461
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2009
    Messages : 461
    Points : 707
    Points
    707
    Par défaut
    Bonjour à tous,

    Avec un petit changement sur la table de correspondance (Départements/Régions) (départements pour chaque région sont concaténés en une seule cellule en colonne G séparés par un "-" ou autres) et la formule à utiliser pour répondre à ta question saisie en I2 pour la première région est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =SOMMEPROD(ESTNUM(CHERCHE(STXT($A$2:$A$1000;59;2);G2))*($B$2:$B$1000))
    cette formule sera copiée pour le reste des régions...


    Cordialement

  13. #13
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Bonjour
    En effet, on gagne une fonction
    ESTNUM(TROUVE(...
    et
    NON(ESTERREUR(TROUVE(...
    font la même chose.
    L'important sur la logique de la fonction SommeProd.
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  14. #14
    Membre habitué
    Profil pro
    Business Analyst
    Inscrit en
    Juin 2009
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Business Analyst

    Informations forums :
    Inscription : Juin 2009
    Messages : 93
    Points : 152
    Points
    152
    Par défaut
    Bonsoir,

    Mercatog, c'est ta remarque sur les formules qui m'a fait comprendre un truc :
    J'ai revu ta formule et j'ai 2 remarques:
    1. SommeProd prend en considération dans les critères des plages
    2. RechercheV donne la première occurrence trouvée
    C'est que je peux uniquement passer une cellule comme premier argument à la fonction RECHERCHEV. Et pas une plage ; or c'est ce que j'essayais désespérément de faire avec mon
    RECHERCHEV(STXT(PlgClients;59;2);TblCorresp;2;FAUX)

    Dans la foulée, je note cette même règle sur les arguments passés à INDEX et EQUIV notamment (parce que bon, j'ai essayé aussi...)

    Bref ta solution n'est pas la meilleure : c'est la seule...

    hben : j'ai l'impression que tu étais parti sur la même démarche que moi au début (département => région), avant de basculer aussi sur la vision "région => liste jointe de départements" de mercatog...

    Merci encore de votre hyper-réactivité samedi dernier.
    (Je bosse par intermittence sur la question et donc vos minutes sont des jours chez moi, hum...)

    Benoît

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 13/04/2015, 12h59
  2. EXCEL SOMME.SI avec condition sur des dates
    Par cfhal dans le forum Excel
    Réponses: 7
    Dernier message: 15/10/2007, 08h21
  3. Somme.si avec condition sur le debut du texte
    Par Eric80 dans le forum Excel
    Réponses: 11
    Dernier message: 08/07/2007, 14h18
  4. Requete avec condition sur une partie de l'affichage
    Par dinver78 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 06/07/2007, 09h19
  5. Réponses: 4
    Dernier message: 19/06/2007, 17h51

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