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 des ventes consécutives d'un même client dans un tableau Excel. [XL-2010]


Sujet :

Excel

  1. #1
    Membre à l'essai
    Homme Profil pro
    Développeur/Programmeur sur Excel
    Inscrit en
    Septembre 2015
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur/Programmeur sur Excel
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2015
    Messages : 14
    Points : 13
    Points
    13
    Par défaut Somme des ventes consécutives d'un même client dans un tableau Excel.
    Bonjour et merci de prendre le temps de lire ma requête .

    J'ai un tableau Excel avec un onglet SUIVI, qui contient les ventes de façon chronologique.
    Ainsi, les mêmes clients peuvent revenir dans le temps, mais ce qui est important pour moi c'est de regrouper les ventes consécutives du même client.

    Source des données :
    - Clients en colonne B du SUIVI
    - Prix de vente en colonne L du SUIVI

    Cible des données:
    - Recopier le client en colonne B dans l'onglet VENTE
    - Somme des prix de vente en colonne E dans l'onglet VENTE

    J'ai inclus mon FICHIER test SJV test.xlsx

    Merci d'avance pour votre apport.

    Patrick
    Fichiers attachés Fichiers attachés

  2. #2
    Expert éminent Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Points : 9 548
    Points
    9 548
    Par défaut
    Bonjour,
    je n'ai pas ouvert ton fichier mais à première vue, d'après tes explications, la fonction "SOMME.SI" devrait suffire
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

  3. #3
    Membre expérimenté
    Homme Profil pro
    Ingénieur
    Inscrit en
    Août 2010
    Messages
    667
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Août 2010
    Messages : 667
    Points : 1 419
    Points
    1 419
    Par défaut
    Bonjour,

    C'est possible avec une formule matricielle:

    J'ai créé une colonne Colonne1 (que tu pourras masquer) dans Tableau2 pour factoriser les calculs (ce n'est pas obligatoire mais je pense que c'est préférable pour le temps de calcul et surtout pour la lisibilité des formules):
    En Colonne1:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =PETITE.VALEUR(SI(1 * (Tableau1[Nom du Client] <> "") * (Tableau1[Nom du Client] <> DECALER(Tableau1[Nom du Client]; -1; 0)); LIGNE(Tableau1[Nom du Client]) - LIGNE(Tableau1[[#En-têtes];[Nom du Client]]); 100000000); LIGNE() - LIGNE(Tableau2[[#En-têtes];[Nom du Client]]))
    Formule matricielle à valider par Ctrl+Maj+Entrée.

    En colonne "Nom du Client":
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =SIERREUR(INDEX(Tableau1[Nom du Client]; [@Colonne1]); "")
    En colonne "Prix Soumission av. Tx.":
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =SIERREUR(SOMME(DECALER(Tableau1[[#En-têtes];[Prix Soumission Avant Tx ]]; [@Colonne1]; 0; SI(OU(DECALER([@Colonne1]; 1; 0) = 100000000; DECALER([@Colonne1]; 1; 0) = ""); LIGNES(Tableau1); DECALER([@Colonne1]; 1; 0)) - [@Colonne1])); "")
    L'inconvénient de passer par Colonne1 est que pour la somme en ligne n, j'utilise l'élément de Colonne1 en ligne n et en ligne n+1 donc pour garantir que la dernière valeur à retourner soit correcte, il faut que le nombre de lignes de ton tableau2 soit supérieur ou égal à 1 + le nombre de zones consécutives de ton tableau1.

    Sinon il faut se passer de Colonne1 et tout mettre en une seule formule mais celle-ci devient alors illisible.

  4. #4
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Septembre 2013
    Messages
    783
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Septembre 2013
    Messages : 783
    Points : 1 562
    Points
    1 562
    Par défaut
    ahhhh ..... j'avais encore oublié la puissance des formules matricielles . Merci pour le rappel, Promethee25!
    "Idéalement nous sommes ce que nous pensons. Dans la réalité, nous sommes ce que nous accomplissons." A.Senna
    et n'oubliez-pas de développer des .... sourires ^_^

  5. #5
    Membre à l'essai
    Homme Profil pro
    Développeur/Programmeur sur Excel
    Inscrit en
    Septembre 2015
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur/Programmeur sur Excel
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2015
    Messages : 14
    Points : 13
    Points
    13
    Par défaut
    Bonjour casefayere et merci pour votre réponse.

    Cela me cause deux problèmes :
    1) je ne connais pas les noms des futures clients, je ne puis donc pas écrire : =SOMME.SI(B3:B4003;"Tremblay";L3:L403).
    2) ne répond pas à mon besoin du même client consécutif, C'est-à-dire que si j'ai trois fois le même client entre d'autres clients, je m'attends à avoir trois lignes différentes avec ce même client et trois totaux.
    - Exemple : Vente du client en déc. 2015, en mars 2016 et en mai 2016.

    J'espère que c'est plus claire.

    Peut-être y'a t-il une façon d'y arriver que je ne connais pas avec la formule somme.si ?

    Encore merci pour votre suivi.
    Cordialement,

    Patrick

  6. #6
    Membre à l'essai
    Homme Profil pro
    Développeur/Programmeur sur Excel
    Inscrit en
    Septembre 2015
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur/Programmeur sur Excel
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2015
    Messages : 14
    Points : 13
    Points
    13
    Par défaut
    Citation Envoyé par Promethee25 Voir le message
    Bonjour,

    C'est possible avec une formule matricielle:

    J'ai créé une colonne Colonne1 (que tu pourras masquer) dans Tableau2 pour factoriser les calculs (ce n'est pas obligatoire mais je pense que c'est préférable pour le temps de calcul et surtout pour la lisibilité des formules):
    En Colonne1:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =PETITE.VALEUR(SI(1 * (Tableau1[Nom du Client] <> "") * (Tableau1[Nom du Client] <> DECALER(Tableau1[Nom du Client]; -1; 0)); LIGNE(Tableau1[Nom du Client]) - LIGNE(Tableau1[[#En-têtes];[Nom du Client]]); 100000000); LIGNE() - LIGNE(Tableau2[[#En-têtes];[Nom du Client]]))
    Formule matricielle à valider par Ctrl+Maj+Entrée.

    En colonne "Nom du Client":
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =SIERREUR(INDEX(Tableau1[Nom du Client]; [@Colonne1]); "")
    En colonne "Prix Soumission av. Tx.":
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =SIERREUR(SOMME(DECALER(Tableau1[[#En-têtes];[Prix Soumission Avant Tx ]]; [@Colonne1]; 0; SI(OU(DECALER([@Colonne1]; 1; 0) = 100000000; DECALER([@Colonne1]; 1; 0) = ""); LIGNES(Tableau1); DECALER([@Colonne1]; 1; 0)) - [@Colonne1])); "")
    L'inconvénient de passer par Colonne1 est que pour la somme en ligne n, j'utilise l'élément de Colonne1 en ligne n et en ligne n+1 donc pour garantir que la dernière valeur à retourner soit correcte, il faut que le nombre de lignes de ton tableau2 soit supérieur ou égal à 1 + le nombre de zones consécutives de ton tableau1.

    Sinon il faut se passer de Colonne1 et tout mettre en une seule formule mais celle-ci devient alors illisible.
    Merci pour ta réponse Promethee25,
    C'est effectivement plus complexe que ce que je suis habitué, mais cela me semble super.
    Je vais tester ta proposition et je te reviendrai.

    Encore merci.
    Cordialement,

    Patrick

  7. #7
    Membre à l'essai
    Homme Profil pro
    Développeur/Programmeur sur Excel
    Inscrit en
    Septembre 2015
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur/Programmeur sur Excel
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2015
    Messages : 14
    Points : 13
    Points
    13
    Par défaut
    REBONJOUR Promethee25,
    J'ai ajouté une colonne1 dans mon tableau2 dans l'onglet Vente et introduits tes formules dans les différentes colonnes tel qu'indiqué dans ton message.
    Je me suis aussi assuré que mon tableau2 ait une ligne de plus que mon tableau1.
    Cependant, seulement le premier client s'affiche et je n'ai pas la sommes des ventes pour ce client qui devrait être de 22 550.00$.
    Les autres lignes de la colonne1 donnent la valeur #NOMBRE!

    Je te joint mon fichier si tu veux voir.

    Merci de ton suivi.
    Cordialement,

    Patrick
    Fichiers attachés Fichiers attachés

  8. #8
    Membre expérimenté
    Homme Profil pro
    Ingénieur
    Inscrit en
    Août 2010
    Messages
    667
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Août 2010
    Messages : 667
    Points : 1 419
    Points
    1 419
    Par défaut
    En Colonne1, tu as modifié la formule que je t'ai donnée et tu ne l'as pas validée par Ctrl+Maj+Entrée.

  9. #9
    Membre à l'essai
    Homme Profil pro
    Développeur/Programmeur sur Excel
    Inscrit en
    Septembre 2015
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur/Programmeur sur Excel
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2015
    Messages : 14
    Points : 13
    Points
    13
    Par défaut
    Bon, Promethee25, j'ai recopié tes formules tel quel.
    Cependant, je ne comprend pas trop quelle ou quelles cellules doivent être sélectionnées avant de faire CTRL+SHIFT+ENTRÉE (J'ai essayé avec celles de gauche et de droite du clavier, pas de différence).
    J'ai essayé plusieurs choses sans succès et je n'ai même plus le premier nom de client.

    Ma première valeur dans colonne1 est 100000000 les autres #NOMBRE! sauf les 2 dernières #VALEUR!
    Que représente la valeur 100000000 dans la formule? Est-ce le nombre maximum de vente dans mon tableau ?
    J'ai essayé de le faire concorder avec mon tableau1 mais cela ne change rien.

    Toi ça fonctionne bien ?

    Il y'a certainement un détails que je ne fais pas bien.

    As-tu une idée ?

    Encore merci.

    Patrick

  10. #10
    Membre expérimenté
    Homme Profil pro
    Ingénieur
    Inscrit en
    Août 2010
    Messages
    667
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Août 2010
    Messages : 667
    Points : 1 419
    Points
    1 419
    Par défaut
    100000000, c'est juste pour renvoyer une erreur quand on essaie de récupérer ce nombre en numéro de ligne avec INDEX.

    Voici ton fichier tel que je l'avais modifié:
    SJV test.xlsx


    Edit: Ctrl+Maj+Entrée est à effectuer à la place d'Entrée quand ta case est en mode édition. Si tu le fais alors que la case n'est pas en mode édition, ça ne fonctionne pas.

  11. #11
    Membre à l'essai
    Homme Profil pro
    Développeur/Programmeur sur Excel
    Inscrit en
    Septembre 2015
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur/Programmeur sur Excel
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2015
    Messages : 14
    Points : 13
    Points
    13
    Par défaut
    YAHOOOO !!!

    Cela à fonctionné.

    WOW! C'est vraiment super, je ne comprend pas tout, mais je vais étudier ses formules pour une prochaine fois.

    Un gros merci Promethee25

    Cordialement,
    Patrick

  12. #12
    Membre expérimenté
    Homme Profil pro
    Ingénieur
    Inscrit en
    Août 2010
    Messages
    667
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Août 2010
    Messages : 667
    Points : 1 419
    Points
    1 419
    Par défaut
    Evalue les formules pas à pas pour essayer de les comprendre.
    Ensuite si tu as des questions, je veux bien y répondre.

    La philosophie est de récupérer les numéros de ligne où le nom du client a changé par rapport à la ligne précédente (=> Colonne1).
    Le problème étant qu'on obtient une matrice de la taille de Tableau1 contenant les numéros de ligne qui nous intéressent et ceux qui ne nous intéressent pas (et que j'ai en fait remplacés par 100000000), il faut donc réussir à se "débarrasser" des 100000000 d'une façon ou d'une autre. Le plus simple est de trier la matrice par ordre croissant à l'aide de PETITE.VALEUR.

    Une fois qu'on a les numéros de ligne qui nous intéressent triés par ordre croissant, il ne reste plus qu'à sélectionner la zone à additionner via un DECALER se basant sur les éléments n et n+1 de Colonne1 (en gérant le cas particulier de la dernière ligne puisqu'on ne veut bien sûr pas récupérer 100000000 qui est en n+1 mais la taille de tableau1).

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

Discussions similaires

  1. [Google Maps] Des villes qui portent le même nom dans diffèrents pays
    Par bhrochdi dans le forum APIs Google
    Réponses: 2
    Dernier message: 15/10/2014, 11h18
  2. Réponses: 7
    Dernier message: 17/09/2014, 11h30
  3. liste des produits et somme des ventes
    Par yoonu dans le forum Accès aux données
    Réponses: 4
    Dernier message: 13/09/2013, 20h18
  4. somme des cellules dont l'adresse est contenue dans un tableau?
    Par mazuno dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 28/06/2010, 13h15
  5. Somme des champs commencant par le même mot
    Par kemsy dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 29/10/2008, 18h47

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