Conditions à définir sur une partie d'une liste

Résolu/Fermé
JFL - 14 nov. 2016 à 22:30
 JFL - 22 nov. 2016 à 21:38
Bonjour,

Je souhaiterai, parmi un tableau contenant plusieurs agents, définir pour chacun d'eux en fonction de la date, si c'est la situation actuelle, passée ou à venir :

Agent Situation au : Affichage recherché
B 01/01/2000 Passé
B 01/05/2006 Actuelle
B 01/01/2017 A venir
C 01/02/2006 Passé
C 01/08/2010 Passé
C 13/11/2016 Actuelle
C 15/11/2016 A venir (date du post 14/11/2016)

Je ne sais pas comment travailler les conditions pour chacun des agents qui sont dans cette liste.
Vous remerciant de votre aide,

3 réponses

gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 4 684
14 nov. 2016 à 23:13
Bonjour,

Avec ton exemple,je te propose cette formule qui donne les résultats attendus :
=SI(B1>AUJOURDHUI();"A venir";SI(A2=A1;SI(B2<AUJOURDHUI();"Passé";"Actuelle");"Actuelle"))
0
Bonjour,
Merci beaucoup cela fonctionne, à condition de bien mettre les agents dans l'ordre alphabétique et dans l'ordre chronologique des dates.
J'ai juste ajouté un = dans la condition B2 par rapport à aujourd'hui sinon on avait une difficulté le jour du changement.
Est-il possible de faire la même chose si les données ne sont pas classées ?
0
gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 4 684
15 nov. 2016 à 18:06
Bonsoir,

Est-il possible de faire la même chose si les données ne sont pas classées ?

C'est possible mais il faut passer par une formule matricielle un peu plus complexe et plus gourmande :
=SI(ET(MAX(SI($A$2:$A$3000=A2;$B$2:$B$3000))=B2;B2>AUJOURDHUI());"A venir";SI(MAX(SI(A2=$A$2:$A$3000;SI($B$2:$B$3000<=AUJOURDHUI();$B$2:$B$3000)))<>B2;"Passé";"Actuelle"))

La formule doit être validée par crtl+maj+entrée simultanées (2 doigts au moins !)
Si tu as plus de 3000 lignes tu adaptes (et pour moins aussi !)
0
Bonjour,
Autant la première formule fonctionne quand on écrit les choses dans l'ordre, autant le résultat est étonnant quand les choses ne se suivent pas pour un agent :

B 01/01/2000 Passé
B 01/05/2006 Passé
B 01/01/2017 A venir
C 01/02/2006 Passé
C 01/08/2010 Passé
C 02/05/2014 Passé
B 20/11/2016 Passé
C 13/11/2016 Passé
C 16/11/2016 Passé
C 17/11/2016 Passé
D 01/01/2016 Passé

Avec la première formule lorsque les agents sont dans l'ordre mais pas les dates on a : B 01/01/2000 Passé
B 01/05/2006 Actuelle
B 01/01/2017 A venir
B 20/11/2016 Actuelle
C 01/02/2006 Passé
C 01/08/2010 Passé
C 02/05/2014 Passé
C 13/11/2016 Passé
C 16/11/2016 Passé
C 17/11/2016 Passé
C 21/11/2016 Actuelle
D 01/01/2016 Actuelle
--> deux situations actuelles pour la personne B.

Merci pour l'aide.
0
gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 4 684
21 nov. 2016 à 17:50
Bonjour,

Sans doute parce que soit :
- tu n'as pas tout lu
- tu n'as pas bien appliqué
- tu n'as pas compris la formule matricielle

Voici le résultat que cela donne, qui me parait correct :
Agent	Date	ton résultat	avec formule
B 01/01/2000 Passé Passé
B 01/05/2006 Passé Passé
B 01/01/2017 A_venir A venir
C 01/02/2006 Passé Passé
C 01/08/2010 Passé Passé
C 02/05/2014 Passé Passé
B 20/11/2016 Passé Actuelle
C 13/11/2016 Passé Passé
C 16/11/2016 Passé Passé
C 17/11/2016 Passé Actuelle
D 01/01/2016 Passé Actuelle
Tu peux vérifier dans le classeur : https://www.cjoint.com/c/FKvqXzRH6zl
0
Merci du retour, je suis exigeant je sais !
Je ne sais pas pourquoi cela a du mal à fonctionner sur mon fichier, mais j'ai vu que c'était bon sur le tien. Par contre, en ajoutant des situations, les choses se compliquent (deux situations futures...) : deux erreurs C avec la date du 31/12/2016 et B avec la date du 01/12/2016.

Agent Date avec formule
B 01/01/2000 Passé
B 01/05/2006 Passé
B 01/01/2017 A venir
C 01/02/2006 Passé
C 01/08/2010 Passé
C 31/12/2016 Passé
C 01/01/2017 A venir
C 20/11/2016 Actuelle
B 20/11/2016 Actuelle
B 01/12/2016 Passé
C 13/11/2016 Passé
C 16/11/2016 Passé
C 17/11/2016 Passé
D 01/01/2016 Passé
D 18/11/2016 Actuelle
D 22/11/2016 A venir

Je sais que tu vas encore m'épater. Je t'avouerai ne pas trop comprendre la formule matricielle.
0
gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 4 684
21 nov. 2016 à 18:52
RE
J'avais considéré que tu n'avais qu'une date à venir et donc la formule se simplifie :
=SI(B2>AUJOURDHUI();"A venir";SI(MAX(SI(A2=$A$2:$A$3000;SI($B$2:$B$3000<=AUJOURDHUI();$B$2:$B$3000)))<>B2;"Passé";"Actuelle"))

Tu peux vérifier dans le classeur : https://www.cjoint.com/c/FKvrZSe4N3l
0
Bonjour.
Merci cela correspond à mon besoin.
Des petites choses :
1 - Serait-il possible que rien ne s'écrive si l'agent et la date ne sont pas renseignés :
Agent Date avec formule
B 01/01/2000 Passé
B 01/05/2006 Passé
B 20/11/2016 Actuelle
B 01/12/2016 A venir
B 01/01/2017 A venir
C 01/02/2006 Passé
C 01/08/2010 Passé
C 13/11/2016 Passé
C 16/11/2016 Passé
C 17/11/2016 Passé
C 20/11/2016 Actuelle
C 31/12/2016 A venir
C 01/01/2017 A venir
B 23/11/2016 A venir
Actuelle
D 01/01/2016 Passé
D 18/11/2016 Actuelle
D 23/11/2016 A venir

2 - Que tu m'expliques vraiment comment mettre en oeuvre la formule dans mon fichier : je fais un copier-coller mais cela ne fonctionne pas. Il y a une histoire de validation de la formule matricielle mais je n'ai pas encore du comprendre comment faire.

Comptant encore sur ton aide,
0
gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 4 684
22 nov. 2016 à 09:15
Bonjour,

1 - Serait-il possible que rien ne s'écrive si l'agent et la date ne sont pas renseignés
Pas de souci, il suffit de faire le test :
=SI(NBVAL(A2:B2)<2;"";SI(B2>AUJOURDHUI();"A venir";SI(MAX(SI(A2=$A$2:$A$3000;SI($B$2:$B$3000<=AUJOURDHUI();$B$2:$B$3000)))<>B2;"Passé";"Actuelle")))


https://www.cjoint.com/c/FKwindLbQLl

2 - Que tu m'expliques ...je fais un copier-coller mais cela ne fonctionne pas.
Tu fais un copier/coller => ta formule est 'normale'.
Pour la mettre en matricielle tu fais F2 sur la cellule tu valides la formule par crtl+maj+entrée simultanées (2 doigts au moins !).

Pour recopier vers le bas ta formule, il te suffit de double cliquer sur la petite croix en bas de la cellule de la formule. lorsque tu rajoutes des lignes, même procédure.
0
Génial, j'ai tout compris.
Encore merci beaucoup de ton aide,
0