Fonctions SI, SOMME et DATEVAL

Résolu
anita004 Messages postés 7 Statut Membre -  
anita004 Messages postés 7 Statut Membre -
Bonjour,

Débutante avec les fonctions Excel, je n'arrive pas à utiliser la fonction DATEVAL avec SI et SOMME. J'ai un tableau avec des quantités et des prix qui y s'appliquent ; j'ai utilisé la fonction SI et SOMME.

=SI(AW40>0;SOMME(Traitement!AW40*'Grille tarifaire 2013'!$F$13);0)
Pas de souci, et le chiffre 0 apparaît quand la cellule est vide.

Mais, la grille tarifaire vient de changer. Je dois appliquer de nouveaux tarifs mais aussi conserver les anciens. J'ai pensé à utiliser la fonction DATEVAL. Mais j'ai une erreur #VALEUR et je n'arrive pas à la corriger

=SI(DD41>=DATEVAL("01/06/2014");0);SI(AN41>0;SOMME(Traitement!AN41*'Grille tarifaire 2014'!$D$14);0);SI(AN41>0;SOMME(Traitement!AN41*'Grille tarifaire 2013'!$F$8);0)

Avec la formule ci-dessous, seuls les tarifs de 2013 s'affichent et quand la cellule est vide "Faux" apparaît :

=SI(ET($DD42<=DATEVAL("01/06/2014");SI(AN42>0;SOMME(Traitement!AN42*'Grille tarifaire 2014'!$D$14);0));SI(AN42>0;SOMME(Traitement!AN42*'Grille tarifaire 2013'!$F$8);0))

Merci pour vos explications et aide.

13 réponses

  1. via55 Messages postés 14393 Date d'inscription   Statut Membre Dernière intervention   2 759
     
    Bonjour Anita

    Déjà très bizarre d'avoir SOMME(Traitement!AW40*'Grille tarifaire 2013'!$F$13) alors que Traitement!AW40*'Grille tarifaire 2013'!$F$13 suffit

    Ensuite si DD41 il ya une date pas besoin de DATEVAL DD41>01/06/2014 suffit

    Enfin pour bâtir ta formule traite d'abord le cas sans 2 possibilités c'est à dire le cas où la cellule est vide qui doit renvoyer 0 en condition vraie et en condition fausse tu t'occupes des 2 possibilités ce qui pourrait donner quelque chose comme ceci:

    Pour la 1ere partie de la formule
    si AN42 est ou vide ou contient une valeur =SI(AN42="";0 (si AN42 est vide alors 0) ou bien si AN42 contient une valeur qui peut être 0 : =Si(AN42=0;0 (si AN42=0 alors 0)

    Pour la 2nde partie de la formule :
    SI($DD42<=01/06/2014;Traitement!AN42*'Grille tarifaire 2013'!$F$8;Traitement!AN42*'Grille tarifaire 2014'!$D$14)

    soit la formule complète suivante :
    =SI(AN42="";0;SI($DD42<=01/06/2014;Traitement!AN42*'Grille tarifaire 2013'!$F$8;Traitement!AN42*'Grille tarifaire 2014'!$D$14))

    ou
    =Si(AN42=0;0;SI($DD42<=01/06/2014;Traitement!AN42*'Grille tarifaire 2013'!$F$8;Traitement!AN42*'Grille tarifaire 2014'!$D$14))

    Si malgré tout tu n'arrives pas à faire fonctionner tes formules, post un exemple allégé et anonymé de ton fichier sur cjoint.com et indiques ici ensuite le lien fourni, on y verra plus clair pour t'aider

    Cdlmnt
    1
  2. Raymond PENTIER Messages postés 58213 Date d'inscription   Statut Contributeur Dernière intervention   17 482
     
    Salut à vous deux.

    [La fonction SOMME additionne tous les nombres que vous spécifiez comme arguments.]
    Donc faire la somme d'un nombre unique n'a pas de sens ; c'est comme si on écrivait =F13+0 au lieu d'écrire simplement =F13 ... et l'observation de via55 est justifiée.

    Par contre DD41>01/06/2014 n'est pas valide, car Excel fait la division de 1 par 6 puis par 2014. Il faut donc soit stocker la date 01/06/2014 dans une cellule disponible comme ZZ1 et écrire DD41>ZZ41, soit laisser faire anita004 avec DATEVAL.

    Ceci éclairci, j'ai hâte de voir le fichier d'Anita !
    0
    1. via55 Messages postés 14393 Date d'inscription   Statut Membre Dernière intervention   2 759
       
      Bonjour Raymond

      Si les dates sont bien au format Date (mais j'avais oublié de le préciser) je maintiens que DD41>01/06/2014 suffit (chez moi ça marche) mais tu as raison c'est plus prudent de passer pas DATEVAL

      Cdlmnt
      0
  3. anita004
     
    Bonjour Via et Raymond,

    Je vous remercie pour vos explications et votre aide. J'ai corrigé et nettoyé la formule.
    Mais il semble que la date n'est pas prise en compte (pourtant le format de la cellule est Date). Ce sont les tarifs de 2014 qui s'appliquent.

    Voici le fichier test :
    http://cjoint.com/data3/3GCpB48nI4U.htm

    Cordialement,
    Anita
    0
    1. via55 Messages postés 14393 Date d'inscription   Statut Membre Dernière intervention   2 759
       
      Bonjour Anita

      Raymond a raison il vaut mieux garder le DATEVAL dans la formule :
      ....SI($C3<=DATEVAL("01/06/2014")...
      et elle fonctionne

      par contre je m'interroge sur les tarifs avec un prix unique ! si c'est bien le cas dans la réalité il n'y avait pas besoin des feuilles tarifs , simplement mettre dans la formule ;15;20 à la fin au lieu des références aux cellules des tarifs

      et si les tarifs comportent plusieurs produits avec des prix différents ta formule n'est pas adaptée car elle renverra toujours que le prix de la 1ere ligne ? dans ce cas il faudrait une colonne produit ou code produit dans Traitement qui aille trouver par une RECHERCHEV le produit correspondant dans les tarifs et renvoie le prix en regard

      Cdlmnt
      0
  4. anita004
     
    Via,

    J'ai effectivement ajouté dans mon fichier de travail la fonction DATEVAL et cela fonctionne.
    Merci pour tes explications concernant les tarifs pour plusieurs produits. Cela m'aidera pour les prochains tableaux à mettre en place.
    Encore une fois merci pour ton aide.
    Cordialement,
    Anita
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. anita004 Messages postés 7 Statut Membre
     
    Bonjour Via, Bonjour Raymond,

    Je reviens vers vous car j'ai un autre souci toujours avec les tarifs 2013 et 2014.
    J'ai des prix qui correspondent à des nombres de feuilles. A partir du 1/6/2014, ces prix changent. Mais comment modifier ma formule actuelle pour obtenir la nouvelle tarification tout en gardant l'ancienne.
    Je vous joins un exemple qui sera certainement plus clair.
    Par avance je vous remercie pour vos explications et aide.
    Bien cordialement,
    Anita

    Voici le fichier Exemple :
    http://cjoint.com/14sp/DIbtHI5rDJZ.htm
    0
  7. via55 Messages postés 14393 Date d'inscription   Statut Membre Dernière intervention   2 759
     
    Bonsoir,

    https://www.cjoint.com/?0Ibu36rQmAF

    Une possibilité en rajoutant 2 colonnes pour simplifier la formule

    Cdlmnt
    0
  8. Raymond PENTIER Messages postés 58213 Date d'inscription   Statut Contributeur Dernière intervention   17 482
     
    Bonjour anita004.

    Pourquoi ta formule
    =SI(B2=0;(0);SI($D2<=DATEVAL("01/06/2014");SI(B2<=3;('Tarifs 2013'!$B$2;'Tarifs 2014'!$B$2);SI(B2<=6;('Tarifs 2013'!$B$3;'Tarifs 2014'!$B$3);SI(B2<=9;('Tarifs 2013'!$B$4;'Tarifs 2014'!$B$4);SI(B2>=10;('Tarifs 2013'!$B$5;'Tarifs 2014'!$B$5)))))))
    ne fonctionne-t-elle pas ? Pour en simplifier la lecture, nous allons renommer ta feuille "Tarifs 2013" en "T13" et ta feuille "Tarifs 2014" en "T14" (et supprimer les parenthèses du chiffre 0 en début de formule). Elle devient donc
    =SI(B2=0;0;SI($D2<=DATEVAL("01/06/2014");SI(B2<=3;('T13'!$B$2;'T14'!$B$2);SI(B2<=6;('T13'!$B$3;'T14'!$B$3);SI(B2<=9;('T13'!$B$4;'T14'!$B$4);SI(B2>=10;('T13'!$B$5;'T14'!$B$5)))))))
    ce qui nous permet de voir plus facilement que SI(B2<=3;('T13'!$B$2;'T14'!$B$2); ne veut rien dire ! En effet tu as créé ici une syntaxe fantaisiste qu'Excel ne connait pas.
    Il te faut deux lignes de tests, une pour chaque tarif :
    SI(B2<=3;'T13'!$B$2;SI(B2<=6;'T13'!$B$3;SI(B2<=9;'T13'!$B$4;'T13'!$B$5)))
    pour le tarif 2013, et pour le tarif 2014
    SI(B2<=3;'T14'!$B$2;SI(B2<=6;'T14'!$B$3;SI(B2<=9;'T14'!$B$4;'T14'!$B$5)))
    ce qui donne ensemble la formule
    =SI(B2=0;0;SI($D2<=DATEVAL("01/06/2014") ; SI(B2<=3;'T13'!$B$2;SI(B2<=6;'T13'!$B$3;SI(B2<=9;'T13'!$B$4;'T13'!$B$5))) ; SI(B2<=3;'T14'!$B$2;SI(B2<=6;'T14'!$B$3;SI(B2<=9;'T14'!$B$4;'T14'!$B$5))) ))
    0
  9. Raymond PENTIER Messages postés 58213 Date d'inscription   Statut Contributeur Dernière intervention   17 482
     
    Il faut noter qu'il est superflu d'ajouter ton dernier test SI B2>=10 ;
    en effet tout ce qui n'est pas <=9 est forcément >9, comme dirait Monsieur de La Palice !
    Et prend l'habitude, quand tu dois élaborer une formule avec des SI, OU, ET imbriqués, de dessiner un logigramme, afin de ne pas te mélanger les pinceaux, de bien pointer tous les cas et d'éviter les erreurs de logique.
    https://www.cjoint.com/?DIccwqh7OwX
    Cordialement.
    0
  10. anita004 Messages postés 7 Statut Membre
     
    Bonjour Raymond, Bonjour Via,

    Merci beaucoup pour votre aide.
    Désolée de vous répondre que maintenant !
    Raymond merci pour ton schéma, je vais suivre ton excellent conseil.
    Je reviendrai vers vous un peu plus tard dès que j'aurai décortiqué et appliqué vos conseils.
    Très bonne journée et à bientôt.
    Cordialement,
    Anita
    0
  11. Raymond PENTIER Messages postés 58213 Date d'inscription   Statut Contributeur Dernière intervention   17 482
     
    Salut Anita.

    Ce qu'il y a de formidable avex Excel, c'est qu'il y a presque toujours plusieurs solutions à une même question, plusieurs méthodes pour un même problème ...

    Dans ton exemple, il y a l'utilisation de la fonction SI imbriquée, méthode par laquelle tu avais commencé.

    Il y a la méthode de via55, avec 2 colonnes en plus et la fonction INDIRECT.

    Il existe aussi une autre approche, consistant à créer un seul tableau de tarifs (on économise une feuille) et à utiliser la fonction RECHERCHEV, comme l'avait déjà suggéré via55, au post #5 : https://www.cjoint.com/?DIctewxHzWC ; on définit le nom "Tar" pour la plage Tarif!B3:D6 afin de faciliter la mise à jour de la formule.

    C'est bien, la retraite ! Surtout aux Antilles ... :-)
    Raymond (INSA, AFPA, CF/R)
    0
  12. Raymond PENTIER Messages postés 58213 Date d'inscription   Statut Contributeur Dernière intervention   17 482
     
    Et même pour ma proposition des posts #9 & 11, on peut inverser l'ordre dans la logique des tests.
    On ajoute en colonne E le millésime afin d'alléger la formule, qui se résume à :
    =SI(B2=0;0;
    SI(B2<=3; SI(E2=13;Tarif!C$3;Tarif!D$3);
    SI(B2<=6; SI(E2=13;Tarif!C$4;Tarif!D$4);
    SI(B2<=9; SI(E2=13;Tarif!C$5;Tarif!D$5);
    SI(E2=13;Tarif!C$6;Tarif!D$6) ))) )

    https://www.cjoint.com/?DIct3rXLcQ8

    Cordialement.
    0
  13. anita004 Messages postés 7 Statut Membre
     
    Bonsoir Raymond, bonsoir Via,

    Mille mercis pour votre aide et vos explications ! ça fonctionne.
    C'est merveilleux quand on maîtrise Excel ! Ce qui n'est absolument pas mon cas. En tout cas, grâce à tes conseils Raymond (faire un logigramme), je commence à comprendre un peu la logique mais malheureusement je ne connais pas toutes les fonctionnalités des fonctions proposées et je nage complètement...
    Je dois préparer le prochain tableau pour 2015-16 et je vais étudier les fonctions RECHERCHEV et INDIRECT... et surtout faire un logigramme de toutes les fonctions qui existent déjà pour les simplifier et éviter d'avoir un énorme fichier.
    Encore une fois, merci à vous deux !
    Bonne soirée.
    Bien cordialement,
    Anita
    0
  14. Raymond PENTIER Messages postés 58213 Date d'inscription   Statut Contributeur Dernière intervention   17 482
     
    ... alors je te recommande la lecture des
     Fiches techniques
    que CCM te propose dans la rubrique { Astuces } et particulièrement dans la { section Excel },
    ... et bien sûr de consulter les discussions du forum Excel où nous nous trouvons.

    Amicalement.
    0
    1. Raymond PENTIER Messages postés 58213 Date d'inscription   Statut Contributeur Dernière intervention   17 482
       
      Pourquoi, dans ton profil, as-tu supprimé la possibilité d'échanger des Messages privés ?
      Cela peut s'avérer utile quand on a des fichiers un peu confidentiels, ou alors quand on a honte d'exposer son ignorance à trop de gens ...
      0
    2. anita004 Messages postés 7 Statut Membre
       
      Bonsoir Raymond,

      Merci pour tes conseils. Je les consulterai sans faute !
      Pour les messages privés, ils ne le sont plus... et ce n'est pas une question de honte car j'avoue être ignorante et demander de l'aide à des experts, c'est aussi apprendre à devenir moins ignorante...
      Amicalement,
      Anita
      0