ne pas afficher resultat negatif calcul d'horaires

=SI(D10="";"";SI(E10="";D10;SI(E10="12 B";D10-"0:32";SI(E10="11
B";D10-"1:04";SI(E10="10 B";D10-"1:36";SI(E10="9 B";D10-"2:08";SI(E10="8
B";D10-"2:40";SI(E10="7 B";D10-"3:12";""))))))))

est ma formule de base,mais si j'ai D10 égal à 1:38 et que par exemple
E10=8B ce qui donne 1:38-3:12 cela m'affiche un volume horaire négatif et je
voudrais dans ce cas par exemple avoir un résultat affiché de 0:00 ne tenant
pas compte du négatif.
Il s'agit d'un système de crédit débit de temps

Bonsoir Fred,

=SI(D10="";"";SI(E10="";D10;SI(E10="12 B";D10-"0:32";SI(E10="11
B";D10-"1:04";SI(E10="10 B";D10-"1:36";SI(E10="9 B";D10-"2:08";SI(E10="8
B";D10-"2:40";SI(E10="7 B";D10-"3:12";""))))))))

est ma formule de base,mais si j'ai D10 égal à 1:38 et que par exemple
E10=8B ce qui donne 1:38-3:12 cela m'affiche un volume horaire négatif et je
voudrais dans ce cas par exemple avoir un résultat affiché de 0:00 ne tenant
pas compte du négatif.
Il s'agit d'un système de crédit débit de temps

La formule est... comment dire... "alambiquée". Trop complexe, je pense, pour permettre une maintenance facile.

Je conseille de mettre à plat les conditions et d'utiliser la fonction RECHERCHEV() sur une partie de feuille qui vous permettra de prendre en compte les cas de figure qui ne manqueront pas de se présenter. Et de faciliter les mises à jour (durées horaires) qui interviendront nécessairement.

Bon, d'accord, j'ai pas répondu à la question... mais cette réponse fera partie de la remise à plat suggérée.

Si vous répondez, merci de penser à utiliser la fonction "répondre à tous" de votre logiciel de courrier électronique de façon que la liste reçoive une copie de votre réponse.

Bien cordialement,
Si vous répondez, merci de penser à utiliser la fonction "répondre à tous" de votre logiciel de courrier électronique de façon que la liste reçoive une copie de votre réponse.

Bien cordialement,

Bonsoir,

A priori, je vois trois solutions possibles.. Toutes assez "tordues.." dans la mesure où, la formule de départ est trop complexe pour un maniement facile

1)
Quelque chose du genre
= si(SI(D10="";"";SI(E10="";D10;SI(E10="12 B";D10-"0:32";SI(E10="11B";D10-"1:04";SI(E10="10 B";D10-"1:36";SI(E10="9 B";D10-"2:08";SI(E10="8 B";D10-"2:40";SI(E10="7 B";D10-"3:12";""))))))))<0;"0:00";SI(D10="";"";SI(E10="";D10;SI(E10="12 B";D10-"0:32";SI(E10="11 B";D10-"1:04";SI(E10="10 B";D10-"1:36";SI(E10="9 B";D10-"2:08";SI(E10="8 B";D10-"2:40";SI(E10="7 B";D10-"3:12";"")))))))))

Je n'ai pas testé mais, en toute logique, ça devrait marcher, à peut être un erreur de parenthèse près

2)
Passer par une cellule (colonne ? ) intermédiaire contenant la formule
=SI(D10="";"";SI(E10="";D10;SI(E10="12 B";D10-"0:32";SI(E10="11
B";D10-"1:04";SI(E10="10 B";D10-"1:36";SI(E10="9 B";D10-"2:08";SI(E10="8
B";D10-"2:40";SI(E10="7 B";D10-"3:12";""))))))))

et faire une test sur le contenu de cette cellule pour savoir si il est négatif ou non. Quitte, le cas échéant, à cacher cette cellule.

3)
Passer par les macros pour créer une fonction personnalisée qui ferait le boulot et profiter de la puissance et de la structuration d'un vrai langage de programmation Basic (ou autre), notamment le passage par des variables, des Si imbriqués plus lisibles et de la structure Select Case qui simplifierait les test sur E10

Bon courage

Christian F

Re bonsoir

Voilà un exemple vite fait du code la fonction en Basic

/Function test(v1,v2)//
//' V1 serait D10 : forcément soit vide, soit une heure//
//' V2 serait E10 : forcément du texte//
//
//' UTILISATION : se mettre dans la cellule où l'on veut le résultat et taper =TEST(coordonnée de la cellule de type D10; coordonnée de la cellule du type E10)//
//' si l'on utilise vraiment D10 et E10, ça donne =TEST(D10;E10)//
//
//' =SI(D10="";"";SI(E10="";D10;SI(E10="12 B";D10-"0:32";SI(E10="11 B";D10-"1:04";SI(E10="10 B";D10-"1:36";SI(E10="9 B";D10-"2:08";SI(E10="8 B";D10-"2:40";SI(E10="7 B";D10-"3:12";"")))))))) //
//
//Dim res As Date  ' res : variable intermédiaire pour savoir si le résultat est négatif ou non//
//
//v2=ucase(v2) ' forcer le passage en majuscules//
//
//If v1="" Then//
//    test=""//
//Else//
//    h=v1//
//    Select Case v2://
//        Case ""//
//            res=h//
//        Case "12 B"//
//            res = h - timevalue("00:32:00")//
//        Case "11 B"//
//            res = h - timevalue("01:04:00")//
//        Case "10 B"//
//            res = h - timevalue("01:36:00")//
//        Case "9 B"//
//            res = h - timevalue("02:08:00")//
//        Case "8 B"//
//            res = h - timevalue("02:40:00")//
//        Case "7 B"//
//            res = h - timevalue("03:12:00")//
//        Case Else//
//            Msgbox "Y'a un problème ! dans la valeur  de 'E10' !"//
//    End Select//
//    If res<0 Then//
//        test=timevalue("00:00")//
//    Else//
//        test=res//
//    endif//
//End If//
//End Function/

Le mode d'emploi est indiqué au début. il faut rentrer quelque chose comme =Test(D10;E10) dans la cellule voulue

Bon amusement

Christian F

PS : les slash en début et fin de ligne ne font pas partie du code, ils otn été ajoutés à l'envoie du mail.. je ne sais pas trop pourquoi ..

Merci beaucoup pour les aides reçues.
Ça fonctionne.
Bug up.

Envoyé depuis l'application Mail Orange