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

10for.xlsx (76.29 Ko)

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

12for2.xlsx (71.81 Ko)

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 ! Ce sera donc autant de cas indécidables au regard de la validité du délai !

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

11for3.xlsx (63.26 Ko)

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.

9larryco-for3.xlsm (78.53 Ko)

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

Rechercher des sujets similaires à "enchainement formules"