Enchainement de formules
Bonjour
Je souhaite savoir si il est possible "d'enchainer" des formules dans une même cellule, si le premier test trouve les critères demandés en F2, K2, D2, C2, I2 alors vrai ou faux si les critères non trouvés Excel passe a la formule suivante etc...
j'ai joint un fichier pour exemple et voici quelques formules individuelles ou je souhaite les avoirs dans une même cellule. Merci pour votre aide, c'est l'usine a gaz en résumé toutes ces formules sont des règles selon les données trouvées
=SI(ET(B2="GP2";F2="UE";K2<=10;D2="route";C2="AA";I2<TEMPS(10;10;0));1;"hors délai")
=SI(ET(B2="GP2";F2="UE";K2>50;D2="route";C2="AA";I2<TEMPS(10;30;0));1;"hors délai")
=SI(ET(B2="GP2";F2="UE";K2>50;D2="route";C2="AA";I2<TEMPS(11;10;0));1;"hors délai")
=SI(ET(B2="GP3";F2="UE";K2>50;D2="route";C2="AA";I2<TEMPS(11;10;0));1;"hors délai")
=SI(ET(B2="GP3";F2="UE";K2>100;D2="aerien";C2="AA";I2<TEMPS(11;10;0));1;"hors délai")
En espérant d'avoir exprimé mon problème clairement merci de votre aide précieuse
Bonjour
La 2ème et la 3ème condition ne différant que par l'heure, il y a un souci me semble-t-il...
Bonjour,
Fusion de 4 de tes formules (3e exclue, en contradiction avec la 2e) :
=SI(ET(F2="UE";C2="AA";OU(ET(B2="GP2";D2="route";OU(ET(K2<=10;I2<TEMPS(10;10;0));ET(K2>50;I2<TEMPS(10;30;0))));ET(B2="GP3";I2<TEMPS(11;10;0);OU(ET(K2>50;D2="route");ET(K2>100;D2="aerien")))));1;"hors délai")
Cordialement.
Bj MFerrand
Merci du retour, je me suis mal exprimé désolé, comme évoqué dans le sujet c'est l'usine a gaz ci-joint un fichier plus explicite sur ma demande avec les règles en feuille deux et la base de données en feuille une.
Cordialement
Ta liste de règle est complète ? Le etc.?
Si j'ai bien vu les règles sont les mêmes pour GP1 et GP2, en est-il de même pour les autres GP ?
Re bj
Non, le fichier joint au niveau des règles il faut bien faire le distingo entre GP1 et GP2 c'était juste pour l'exemple, il y a peut être des similitudes mais en aucun ces données sont communes, pour le etc d'autre règles du même type GP3, GP4... mais dans un premier temps je veux juste savoir si cela est réalisable via excel et surtout ne pas te faire perdre du temps.
Merci
S'il faut faire un distingo entre les GP et que tu commences par n'en faire aucun, on est un peu mal parti !
En laissant les GP de côté, tu combines 3 autres types de critères de façon à indiquer pour chaque cas une heure limite d'arrivée. Bien ! Mais les combinaisons théoriques font ressortir 18 cas, tu n'en répertories que 7 !
Peut-être certains ne peuvent-ils se produire ? Il aurait été utile et logique de les recenser en tant que tels... En tout cas on note bien que des cas se produisent hors des 7 combinaisons prises en considération !
Je suggère volontiers de rétablir un peu de cohérence...
Bonjour
Voila j'ai revu mes données, plus de détails sur la feuille "règle"
Merci
Bonjour,
Suggestion : définir un code DFQL (lettres empruntées aux lettres de colonnes pour faciliter la reconnaissance...)
D: 1=route, 2=aérien
F: 1=UE (ou FR), 2=HUE, 3=HUECO
[nb- si FR doit être distingué on peut soit coder de 1 à 4, s <<oit laisser la valeur 0 à FR... tu ne semblais pas le distinguer ?]
Q: 1= >50, 2= >10 et <=50, 3= <=10
L: 1=GP1, 2=GP2, 3=GP3, 4=GP4, 5=GP5
Les 18 combinaisons DFQ (sans distinction FR, sinon cela en fait 24) en donnent 90 DFQL (ou 120 si distinction FR).
Un tableau à 2 colonnes : code DFQL en 1re colonne, heure limite en 2e colonne, permettra facilement une recherche de l'heure limite pour vérifier si hors délai ou dans délai, après extraction du code...
Une fonction personnalisée peut être établie pour renvoyer ce code...
Function CODAGECOM(com As Range)
Dim cc%, gp%
Application.Volatile
With com
Select Case .Cells(1, 4)
Case "route": cc = 1000
Case "aerien": cc = 2000
Case Else: CODAGECOM = CVErr(xlErrNA): Exit Function
End Select
Select Case .Cells(1, 6)
Case "UE", "FR": cc = cc + 100
Case "HUE": cc = cc + 200
Case "HUECO": cc = cc + 300
Case Else: CODAGECOM = CVErr(xlErrNA): Exit Function
End Select
Select Case .Cells(1, 17)
Case Is > 50: cc = cc + 10
Case Is > 10: cc = cc + 20
Case Is > 0: cc = cc + 30
Case Else: CODAGECOM = CVErr(xlErrNA): Exit Function
End Select
If .Cells(1, 12) Like "GP#" Then gp = CInt(Right(.Cells(1, 12), 1))
If gp > 0 And gp < 6 Then
cc = cc + gp
Else
CODAGECOM = CVErr(xlErrNA): Exit Function
End If
End With
CODAGECOM = cc
End Function
On passe à la fonction en argument la cellule de la première colonne de la ligne du tableau, qui lui permet de repérer la position des colonnes permettant de définir le code de la commande décrite sur la ligne.
La fonction renverrra le code ou la valeur d'erreur #N/A si l'une ou l'autre des mentions déterminant le code n'est pas conforme...
Si l'on a monté le tableau des heures limites selon code, mettons tableau à 2 colonnes nommé : HeurLim, l'insertion de cette fonction dans une formule effectuant une recherche basique permettra de renvoyer hors délai si le délai n'est pas respecté. Exemple :
=SI(O2>RECHERCHEV(CODAGECOM(A2);HeurLim;2;FAUX);"Hors délai";"")
Cordialement.
Bonsoir désolé de ce retour tardif
Cette Suggestion est judicieuse si j'ai bien tout compris il faut créer une "table" avec deux colonnes pour alimenter la Function CODAGECOM. Cette table peut elle se trouver sur le même fichier sur une feuille nommée ou faut il vraiment quelle soit sous un autre fichier nommé "HeurLim"?
Comment écrire les différentes combinaisons sur ces deux colonnes ?
colonne 1 DFQL Comme cela D2;F2;Q1;L1 ou D2:F2:Q1:L1
colonne 2 heure limite 10:00:00 ou < 10:00:00
Nota le code FR prendra bien le code 4 il faut le distinguer
Autrement la Function CODAGECOM(com As Range) je ne sais pas comment ça fonctionne, est ce une procédure dans le menu visual basic? Des macros 1° degré je sais faire et les lancer, mais la aucunes connaissances sur le sujet.
Merci
Cordialement
Bonsoir,
Une fonction personnalisée est une procédure VBA destinée à être utilisée sur feuille de calcul, à l'instar des fonctions natives d'Excel.
Il faut placer le code dans un module standard du classeur et ensuite tu peux l'utiliser dans tes formules...
Dans le classeur joint, j'ai rectifié la fonction pour le 4 de FR...
J'ai préparé la table de recherche des codes renvoyés par la fonction, plage à 2 colonnes colorée en jaune, elle devrait être complétée de façon qu'il y ait des heures limites pour chaque code.
(NB- S'il n'y a pas d'heure limite, la valeur renvoyée sera 0, ce qui ne peut en conséquence jamais aboutir à une signalisation hors délai).
J'ai laissé tes indications initiales sur la feuille règle après le tableau de recherche que j'ai commencé à servir à partir des indications de ton 1er tableau. Certaines indications du 2e m'ont parues en contradiction avec le 1er... A toi de vérifier tout ça et compléter...
J'ai placé la formule que j'avais indiqué en col. S de Feuil1. J'ai épuré ta colonne O qui présentait quelques problèmes : certaines cellules contiennent effectivement une heure, soit donc une valeur numérique inférieure à 0, mais d'autres contiennent l'heure assortie d'une date (en 1900), ce qui signifie que la valeur numérique est supérieure à 1, ce qui aboutirait à ce que l'heure qui apparaît, quelle qu'elle soit, serait toujours Hors délai.
Il te faudra donc surveiller cette colonne et y supprimer cet élément date parasite...
Cordialement.
Bonsoir avant toute chose grand merci pour ton aide enfin surtout ta maitrise, le système de codage convient parfaitement a ma demande et va surtout me servir pour d'autres travaux certainement. Pour ma part ce foutu fichier n'est pas encore terminé encore d'autres règles façon "usine a gaz" a automatiser.
Avant de cloturer ma demande deux questions
Si je veux ajouter un nouveau champ "maritme" je l'écris comme ça ?
Case "route": cc = 1000
Case "aerien": cc = 2000
Case "maritime": cc = 3000
Si je veux ajouter un cinquième groupe le premier groupe prend un zéro en plus 10000 et il faut le placer en quatrième position avant GP ***1* ?
Merci
Cordialement
Bonjour,
Tu peux ajouter un : Case "maritime": cc = 3000
aux deux autres, ce qui te fait ajouter 60 nouveaux codes possibles à ta liste...
Si tu veux ajouter un autre critère, effectivement tu passeras d'un code à 4 chiffres à un code à 5 chiffres : selon l'ordre cela te fait ajouter : 10000 ou 1000 ou 100 ou 10 ou 1...
Cordialement.
Bonjour
Merci pour toutes ces précisions et encore une fois ce système de table codifiée que tu m'as fait découvrir me ravit.
Dans tout les cas si tu vois mon pseudo sur ce Forum c'est que je suis dans l'impasse malgré mes recherches.
Cordialement