Eviter l'imbrication de la fonction SI

Bonjour,
Je suis nouveau sur le forum, j'ai recherché pour éviter un nouveau post, mais je ne trouve pas la solution.
Voici mon soucis :

Dans mon classeur, j'ai fais une feuille "explication" pour être le plus explicite possible.

J'ai une liste de pilotes (5). J'ai la durée d'un relai (temps en piste) de 0h30. La colonne A correspond à l'heure d'entré en piste du pilote choisi en colonne C, en colonne B c'est l'heure sortie de piste. En colonne D, je souhaiterai avoir le temps de repos du pilote sur la ligne correspondante.

Par exemple si le pilote a pris la piste à 15h (donc sortie a 15h30), et qu'il reprend la piste à 17h30, je souhaiterai avoir dans la colonne D 2h00 (temps de repos).
Pour cela, en colonne E, G, I et K, j'ai fait une fonction si pour comparer avec la colonne C. Si le nom du pilote correspond, j'obtiens 1, sinon 0. Ensuite en colonne F (et je devrai le faire en H, J, L également) sur la ligne 7, j'ai fait une imbrication de la fonction si "=SI(E6=0;E7;SI(E5=0;SOMME(E6:E7);SI(E4=0;SOMME(E5:E7);SI(E3=0;SOMME(E4:E7);"erreur"))))"

Ensuite en colonne D, je multiplie le résultat par le temps de relai.

Je souhaiterai faire cela jusqu'à la ligne 49.

Cela fonctionne, et je pense pourrai fonctionner jusqu'à la limite d'imbrication (je dois ajouter une fonction si a chaque ligne que je descend). Mais je pense, même si ne trouve pas pour l'instant, qu'il y a possibilité de simplifier cela, si possible sans vba.

Merci d'avance,

Florian

Bonjour,

Bienvenue sur le forum, ci-après une proposition de formule dynamique à entrer en F2

=LET(
    listP; EXCLURE(C.:.C; 1);
    BYLIGNE(
        SEQUENCE(LIGNES(listP));
        LAMBDA(i;
            LET(
                prev; EQUIVX(INDEX(listP; i); PRENDRE(listP; MAX(1; i - 1)); ; -1);
                MAX(0; (i - SIERREUR(prev; 1) - 1) * TEMPS(0; 30; 0))
            )
        )
    )
)

Bonjour,

Eheh, quand j'ai vu le fichier passer, je me suis dit que ça serait utile

C.:.C

Merci à vous pour vos réponses,
J'ai bêtement collé la formule dans la cellule F2, et j'obtiens "#NOM?"

Je ne comprend pas vraiment la formule, enfin pas du tous même.. et je n'ai pas compris ta réponse 21Formatic.

Faut-il activer quelque chose pour utiliser les formules dynamique ?

Pouvez vous, si ce n'est pas trop compliqué, m'expliquer le fonctionnement ?

Quand j'essaye de comprendre la formule, en m'aidant d'internet

=LET(
    listP; EXCLURE(C.:.C; 1); 'déclare la varable listP étant toute la colonne C sauf la première ligne 
    BYLIGNE( 'faire le calcul ligne par ligne (pour l'instant je ne vois pas de calcul...)
        SEQUENCE(LIGNES(listP)); 'étend le calcul vers le bas jusqu'a la fin de listP ??
        LAMBDA(i; 'créer sa propre formule
            LET(
                prev; EQUIVX(INDEX(listP; i); PRENDRE(listP; MAX(1; i - 1)); ; -1); 'déclare la variable prev etant la valeur rechercher par equivx qui sera la valeur renvoyé par index dans la listp à la ligne i ... la je suis perdu, enfin je l'étais peut être déja avant..
                MAX(0; (i - SIERREUR(prev; 1) - 1) * TEMPS(0; 30; 0))
            )
        )
    )
)

Merci d'avance;
Florian

Bonjour à tous !

Une proposition en F2 ?

=LET(
    p; C2:.C50;
    MAP(
        SEQUENCE(LIGNES(p));
        LAMBDA(t;
            LET(
                r; SI(PRENDRE(p; t) = INDEX(p; t); LIGNE(PRENDRE(p; t)); 0);
                f; FILTRE(r; r <> 0);
                SI(LIGNES(f) > 1; SOMME(PRENDRE(f; -2) * {-1; 1}) - 1; LIGNES(r) - 1)
            )
        )
    ) * (3 / 144)
)

Elle retourne ceci :

image

Bonjour à tous,
Merci à vous pour vos réponses,
J'ai bêtement collé la formule dans la cellule F2, et j'obtiens "#NOM?"

byligne, ça n"existe pas, meme en excel français, c'est byrow

Crdlmt

Merci de ta réponse JFL. Avec ta formule je n'ai plus l'erreur.

Je vais essayer de comprendre le fonctionnement

Merci à tous,
Si jamais il y a un ou des motivés pour m'expliquer petit a petit les formules utilisées ce sera avec plaisir

Sinon je peux fermer le sujet je pense.

Merci encore, je regrette de pas m'être inscrit plus tôt sur ce forum

Salut,

sinon il me semble que ceci fonctionne aussi (y compris sur des versions plus anciennes d'Excel), à mettre en F3 ;

=H$1*(LIGNE()-2-SOMMEPROD(MAX((C$2:C2=C3)*(LIGNE(C$2:C2)-1))))
excel eviter l imbrication de si temps de roulage par florianlm b

Bonsoir à tous !

Bien....

Je vous remercie de ce retour.

-----> Ne pas oublier de passer le sujet en mode résolu !

Sinon l'idée générale de cette proposition dynamique est de cerner, via les lignes dans un cadre dynamique, la présence unique ou pas d'un pilote.
Si la présence est unique alors le temps est lié au nombre pilotes précédents.
Dans le cas contraire, on détermine le nombre de pilotes entre les deux derniers passage en piste.

Bonjour à tous ,

Une autre formule à l'ancienne :

=SI(C2="";"";SI(NB.SI(C$1:C2;C2)=1;A2-$A$2;A2-INDEX(B:B;GRANDE.VALEUR(SI(C1:C$2=C2;LIGNE(C1:C$2));1))))

Avec un tableau pour vérifier qu'on arrive bien à 24 h pour chaque coureur (temps de course + temps de repos avant relais + temps de repos après le dernier relais jusqu'à 15h =>fin de la course).

Astuce : le premier 15h00 dans la cellule A2 est en fait 01/01/2025 15:00:00 pour simplifier les formules quand on passe minuit (on peut mettre n'importe quel jour). Tant qu'à faire, mettre la date du jour de la course, ça ne mange pas de pain.

Bonjour à tous,
Merci à vous pour vos réponses,
J'ai bêtement collé la formule dans la cellule F2, et j'obtiens "#NOM?"

byligne, ça n"existe pas, meme en excel français, c'est byrow

Crdlmt

Merci @Djidji, effectivement le traducteur du site m'a fait défaut.

Content que le problème soit résolu, et merci à @mafraise et @douxreveur pour les propositions "vieille école" !

Bonne journée à tous

Bonjour à tous,

Je reviens avec mon fichier, suite à l'endurance que nous avons fait ce week end, et donc testé situation réel

Je tiens à vous remercier, car il nous a bien été utile. Cependant, excel est impitoyable

Tous se passait bien (même si j'ai quelques idées de modifications à apporter) jusqu’à minuit...

Mon soucis, je pense, est avec la fonction maintenant, qui doit tenir compte du jours. Et lorsqu’on a passé minuit, cela ne fonctionnait plus. (formule dans a colonne S). Pensez vous qu'il y aurai un moyen de ne pas tenir compte du jours ?

Pour continuer sans trop se prendre la tête, nous avons fait un autre fichier excel à partir de minuit.

Je vous remercie par avance

Florian

Bonjour,

il me semble que la formule que j'avais postée plus haut ne tient pas compte du jour, à essayer.

En réalité aucune des formules proposées n'est directement liée au jour… Pouvez-vous préciser de quelle feuille & cellule vous parlez dans votre fichier ?

Merci de vos retours

En fait, mon soucis n'est pas par rapport à la formule pour calculer le temps de repos, mais sur les colonnes Q, R et S de la feuille "essai(3)".

Voici la formule présente, avec des cellules référentes qui varient :

=SI(ET(MOD(MAINTENANT(); 1) >= A2; MOD(MAINTENANT(); 1) <= B2); C2; "")

Ces colonnes me permettent d'afficher les informations (pilote en piste, prochain pilote, etc...). Si l'heure actuelle est comprise entre l'heure de la colonne A et B, j'obtiens les informations sur ma ligne, ensuite que je renvoie sur les cellules "d'affichage" en couleur. Elle me permet également d'avoir 1 dans la colonne T. Ce qui me permet d'avoir mon numéro de ligne, en W5. J'utilise la valeur de W5 pour renvoyer les infos (grâce a mon tableau de Z1 à AG8).

Le soucis c'est que (je pense) lorsque je passe minuit, je n'obtiens plus de résultat possible; Comme si il prenait en compte la date.

Pour essayer, si je change l'heure de A2, pour mettre une heure > que l'heure actuelle, il ne trouve pas de correspondance alors qu'en théorie, j'en ai une. Par exemple, la, au moment ou j'écris, il est 13:55. Si A2 = à 14h30, je met tous en défaut, alors qu'il a bien une ligne (dans mon exemple la 47) ou l'heure actuelle est bien comprise entre la cellule A47 (13:53) et B47 (14:23). Mais par contre, ce ne sera pas le même jour.

Désolé si je ne suis pas explicite.. je fais de mon

mieux, mais je sais que ce n'est pas mon point fort..

Merci d'avance;

Florian

Rechercher des sujets similaires à "eviter imbrication fonction"