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

Macros et VBA Excel Discussion :

Somme conditionnelle avec division


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Profil pro
    Développeur informatique
    Inscrit en
    Juin 2002
    Messages
    264
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2002
    Messages : 264
    Par défaut Somme conditionnelle avec division
    Bonjour,
    J'ai 1 liste de Rdv avec nom du/des intervenant(s), durée du Rdv, sa nature et le nb d'intervenants.
    Ex. : Léa&Léon, 01:00; Réunion; 2
    1 Rdv avec 2 intervenants sera affiché 2 fois dans la liste (l'export est fait par intervenant et je ne peux pas le changer).
    J'ai besoin d'avoir le total d'heures pour chaque action dans l'Ets (ex. Nb d'h. de Réunion...) : quand il y a 2 intervenants je vais trouver 2 fois la ligne donc je dois diviser la durée par 2 pour avoir le bon résultat.
    J'ai nommé les plages pour simplifier : Qui, Duree, Quoi, NbInterv
    La formule "SOMMEPROD((Quoi="Réunion")*Duree/NbInterv)" fait le travail.
    Mais il peut y avoir des lignes avec un Nb d'intervenants=0 (plages inoccupées). Elles sont ignorées du fait que ça ne peut pas être 1 Réunion mais SommeProd ne les ignore pas et j'obtiens "#Div/0".
    J'ai essayé aussi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    =SOMMEPROD((Quoi="Réunion")*SIERREUR(Duree/NbInterv;0))
    =SOMMEPROD((Quoi="Réunion")*Duree/MAX(1;NbInterv))
    ...ça ne met plus #div/0 mais ça ne donne pas le bon résultat.
    ...j'ai besoin d'aide, si possible en évitant les formules matricielles qui sont difficiles à maintenir et que j'ai du mal à comprendre.
    Merci
    PS j'ai mis un fichier d'exemple
    Fichiers attachés Fichiers attachés

  2. #2
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par bib34690 Voir le message
    Bonjour,

    En remplaçant 0 par 1 le nombre d'intervenants pour les cas "Libre", cela fausse-t-il vos calculs ?

  3. #3
    Membre très actif
    Profil pro
    Développeur informatique
    Inscrit en
    Juin 2002
    Messages
    264
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2002
    Messages : 264
    Par défaut
    Oui, je ne peux pas modifier le tableau. je pourrais juste mettre une option pour que ça laisse la case vide au lieu de 0 mais mettre 1 est impossible et fausserait d'autres calculs.

  4. #4
    Membre très actif
    Profil pro
    Développeur informatique
    Inscrit en
    Juin 2002
    Messages
    264
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2002
    Messages : 264
    Par défaut
    S'il existait 1 fonction pour remplacer les 0 par des 1 sur la matrice sans toucher au tableau ce serait bon mais j'ai pas trouvé.
    Ex. : Sommeprod(SOMMEPROD((Quoi="Réunion")*Duree/ReplaceMat(NbInterv;0;1))...mais ReplaceMat n'existe pas

  5. #5
    Membre très actif
    Profil pro
    Développeur informatique
    Inscrit en
    Juin 2002
    Messages
    264
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2002
    Messages : 264
    Par défaut
    Il n'y a qu'un seul critère à tester. Je n'ai pas forcément besoin de Sommeprod mais à priori Somme.Si ou somme.si.ens n'acceptent pas de calcul (division) comme paramètre.

  6. #6
    Membre très actif
    Profil pro
    Développeur informatique
    Inscrit en
    Juin 2002
    Messages
    264
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2002
    Messages : 264
    Par défaut
    J'ai réussi à avoir 1 solution avec 1 formule matricielle que je publie pour info :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    {=SOMME(SI(Quoi="Réunion";Duree/NbInterv))}
    ou 
    {=SOMMEPROD((Quoi="Réunion")*Duree/SI(NbInterv>0;NbInterv;1))}
    ..si qqun à 1 solution non matricielle je suis preneur.

  7. #7
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =SOMMEPROD((Quoi="Réunion")*(NbInterv>0)*Duree/MAX(1;NbInterv))

  8. #8
    Membre très actif
    Profil pro
    Développeur informatique
    Inscrit en
    Juin 2002
    Messages
    264
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2002
    Messages : 264
    Par défaut
    Citation Envoyé par Menhir Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =SOMMEPROD((Quoi="Réunion")*(NbInterv>0)*Duree/MAX(1;NbInterv))
    Merci pour l'idée mais Je l'ai essayé, ça ne marche pas.
    Comme dit dans mon message initial, une Réunion n'a jamais 0 intervenant donc les plages à 0 sont déjà exclues par le 1er critère, ce second n'ajoute rien.
    Max(1;NbInterv) renvoi toujours la plus grande valeur de la matrice. Il n'applique pas le max ligne par ligne.
    Je pense que c'est le même problème avec les Fonctions SI ou SIERREUR qui ne retournent pas des matrices mais 1 valeur unique qui va s'appliquer à toutes les lignes.

  9. #9
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Citation Envoyé par bib34690 Voir le message
    Max(1;NbInterv) renvoi toujours la plus grande valeur de la matrice. Il n'applique pas le max ligne par ligne.
    As-tu essayer de remplacer les noms par de simple références de cellules en adressage relatif ?

  10. #10
    Membre très actif
    Profil pro
    Développeur informatique
    Inscrit en
    Juin 2002
    Messages
    264
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2002
    Messages : 264
    Par défaut
    Citation Envoyé par Menhir Voir le message
    As-tu essayer de remplacer les noms par de simple références de cellules en adressage relatif ?
    Oui, idem

  11. #11
    Membre confirmé
    Homme Profil pro
    Développeur décisionnel
    Inscrit en
    Juin 2013
    Messages
    151
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur décisionnel
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2013
    Messages : 151
    Par défaut
    Bonjour,

    Pourquoi ne pas mettre une valeur très petite dans "NbreInterv", donc pas de division par zéro... et le résultat attendu est bon?

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

Discussions similaires

  1. Somme conditionnelle avec nombre de colonnes non constant
    Par labuche1138 dans le forum SAS Base
    Réponses: 2
    Dernier message: 24/07/2012, 17h20
  2. [XL-2007] Somme conditionnelle avec filtre automatique
    Par Patrock dans le forum Excel
    Réponses: 2
    Dernier message: 24/02/2012, 03h40
  3. [XL-2003] Somme conditionnelle avec condition sur une partie de cellule + RechercheV
    Par Benoit Schwob dans le forum Excel
    Réponses: 13
    Dernier message: 29/04/2011, 00h26
  4. Somme conditionnelle avec un gauche
    Par madevilts dans le forum Excel
    Réponses: 4
    Dernier message: 01/10/2010, 22h41
  5. [XL-2003] Somme conditionnelle avec cellule à evaluer sur la meme ligne
    Par alban.pinel dans le forum Excel
    Réponses: 3
    Dernier message: 22/04/2009, 18h51

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