Excel : Comparaison avec plusieurs conditions
Résolu
athizy
Messages postés
21
Date d'inscription
Statut
Membre
Dernière intervention
-
athizy Messages postés 21 Date d'inscription Statut Membre Dernière intervention -
athizy Messages postés 21 Date d'inscription Statut Membre Dernière intervention -
Bonjour a tous,
J'ai un problème avec un fichier excel : j'aimerai pouvoir comparer une cellule avec un ensemble d'autres cellules sur trois colonnes, l'une comprenant des références, les deux autres des dates (date de début et date de fin). Les dates de début et de fin correspondent donc à la durée de réservation d'une référence.
A chaque ajout de référence, date_début et date_fin je voudrais une formule qui me permette de savoir si mon ajout n'a pas déjà été emprunté à cette date.
Exemple:
Référence______Date_début_____________Date_fin
AA____________22/03/2010____________25/03/2010
BB____________10/04/2010____________15/04/2010
AA____________23/03/2010____________24/03/2010
J'avais pensée à mettre en couleur la cellule grâce à la mise en forme conditionnelle ou à une formule sur une autre colonne qui retourne la possibilité de réservation ou non.
J'avais pensé à une formule de ce style pour les dates mais elle ne fonctionne pas et ne lie pas les références aux dates :
(=SI(OU(ET($B$2:B15<=B16;B16<=$C$2:C15);OU(ET($B$2 :B15<=C16;C16<=$C$2:C15));ET($B$2:B15>=B16;$C$2:C1 5>=C16));"déjà_pris";"c_bon")
Si vous avez des idées?
Merci d'avance.
Cordialement.
J'ai un problème avec un fichier excel : j'aimerai pouvoir comparer une cellule avec un ensemble d'autres cellules sur trois colonnes, l'une comprenant des références, les deux autres des dates (date de début et date de fin). Les dates de début et de fin correspondent donc à la durée de réservation d'une référence.
A chaque ajout de référence, date_début et date_fin je voudrais une formule qui me permette de savoir si mon ajout n'a pas déjà été emprunté à cette date.
Exemple:
Référence______Date_début_____________Date_fin
AA____________22/03/2010____________25/03/2010
BB____________10/04/2010____________15/04/2010
AA____________23/03/2010____________24/03/2010
J'avais pensée à mettre en couleur la cellule grâce à la mise en forme conditionnelle ou à une formule sur une autre colonne qui retourne la possibilité de réservation ou non.
J'avais pensé à une formule de ce style pour les dates mais elle ne fonctionne pas et ne lie pas les références aux dates :
(=SI(OU(ET($B$2:B15<=B16;B16<=$C$2:C15);OU(ET($B$2 :B15<=C16;C16<=$C$2:C15));ET($B$2:B15>=B16;$C$2:C1 5>=C16));"déjà_pris";"c_bon")
Si vous avez des idées?
Merci d'avance.
Cordialement.
A voir également:
- Excel : Comparaison avec plusieurs conditions
- Liste déroulante excel - Guide
- Word et excel gratuit - Guide
- Déplacer colonne excel - Guide
- Si ou excel - Guide
- Excel moyenne - Guide
12 réponses
bonjour
Il me semble que la mise en forme conditionnelle devrait fonctionner avec la formule :
Il faut sélectionner la plage à partir de A2 et la formule s'adapte jusqu'à la dernière cellule C sélectionnée.
Il me semble que la mise en forme conditionnelle devrait fonctionner avec la formule :
=ET(ESTNUM($C2);SOMMEPROD(($A$2:$A2=$A2)*((($B2>=$B$2:$B2)*($B2<=$C$2:$C2))+(($C2<=$C$2:$C2)*($C2>=$B$2:$B2))))>2)
Il faut sélectionner la plage à partir de A2 et la formule s'adapte jusqu'à la dernière cellule C sélectionnée.
eriiic
Messages postés
24603
Date d'inscription
Statut
Contributeur
Dernière intervention
7 276
hé bé, pas mal ;-)
bonjour
Tu peux essayer cette formule dans une mise en forme conditionnelle et lorsque tu saisiras ta seconde date ta mise en forme s'appliquera si cet ensemble de 3 cellules est déjà saisi.
J'ai mis la plage A2:C22, à toi d'adapter à ton classeur.
Tu peux essayer cette formule dans une mise en forme conditionnelle et lorsque tu saisiras ta seconde date ta mise en forme s'appliquera si cet ensemble de 3 cellules est déjà saisi.
=ET(NON(ESTVIDE($C2));SOMMEPROD(($A$2:$A$22=$A2)*($B$2:$B$22=$B2)*($C$2:$C$22=$C2))>1)
J'ai mis la plage A2:C22, à toi d'adapter à ton classeur.
J'ai utilisé ta formule, mais elle ne fonctionne que pour les dates identiques. J'aurais voulu que ça devienne rouge (mise en forme conditionnelle) quand les dates se chevauchent sans forcément être identiques.
As-tu une idée ?
Cordialement.
As-tu une idée ?
Cordialement.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Bonjour athizy, et bienvenue dans ce forum.
On voit bien que tu as fait un effort d'explication, mais cela aurait été beaucoup plus facile pour nous de comprendre le problème, de contrôler ta formule et de t'en proposer une autre si tu nous avais envoyé ton fichier.
Pour ce faire, tu peux utiliser https://www.cjoint.com/ ou encore http://cijoint.fr/ sans oublier de revenir dans ton message pour faire "coller", afin que le lien que tu auras créé s'ajoute au corps de ton message.
Ta formule, permets-moi de te le dire brutalement, est hautement fantaisiste car tu ne respectes pas la syntaxe des fonctions ni la logique d'une formule.
Ainsi, ce n'est pas
(=SI(OU(ET(**a**;**b**);OU(ET(**c**;**d**));ET(**e**;**f**));"pris";"bon")
mais
=SI(OU(ET(**a**;**b**);ET(**c**;**d**));SI(ET(**e**;**f**);"pris";"bon"))
qui signifierait : si l'une des conditions a+b ou c+d est vérifiée, de 2 choses l'une, la condition e+f est vérifiée et j'affiche "pris", elle n'est pas vérifiée et j'affiche "bon". Mais alors on n'a rien prévu pour le cas ou aucune des conditions a+b ni c+d n'est vérifiée !
On voit bien que tu as fait un effort d'explication, mais cela aurait été beaucoup plus facile pour nous de comprendre le problème, de contrôler ta formule et de t'en proposer une autre si tu nous avais envoyé ton fichier.
Pour ce faire, tu peux utiliser https://www.cjoint.com/ ou encore http://cijoint.fr/ sans oublier de revenir dans ton message pour faire "coller", afin que le lien que tu auras créé s'ajoute au corps de ton message.
Ta formule, permets-moi de te le dire brutalement, est hautement fantaisiste car tu ne respectes pas la syntaxe des fonctions ni la logique d'une formule.
Ainsi, ce n'est pas
(=SI(OU(ET(**a**;**b**);OU(ET(**c**;**d**));ET(**e**;**f**));"pris";"bon")
mais
=SI(OU(ET(**a**;**b**);ET(**c**;**d**));SI(ET(**e**;**f**);"pris";"bon"))
qui signifierait : si l'une des conditions a+b ou c+d est vérifiée, de 2 choses l'une, la condition e+f est vérifiée et j'affiche "pris", elle n'est pas vérifiée et j'affiche "bon". Mais alors on n'a rien prévu pour le cas ou aucune des conditions a+b ni c+d n'est vérifiée !
Ah !
Tu avais oublié de placer les accolades de calcul matriciel aux extrémités de ta formule du post initial ...
On les obtient en appuyant simultanément sur les touches [alt gr] et [4] pour { ou sur les touches [alt gr] et [+] pour }
► Explique-moi pourquoi en D3 tu as saisi B$2:$E3 et pas simplement B$2:B2 comme dans ton post initial ? Même question évidemment pour C$2:F$2 au lieu de C$2:C2 ...
► Pourquoi ta formule ne fait jamais référence à la donnée essentielle, celle qui est en colonne A ? Telle qu'elle est rédigée, ta formule voudrait dire que dès qu'un matériel quelconque est dehors, tous les autres sont bloqués !
Tu avais oublié de placer les accolades de calcul matriciel aux extrémités de ta formule du post initial ...
On les obtient en appuyant simultanément sur les touches [alt gr] et [4] pour { ou sur les touches [alt gr] et [+] pour }
► Explique-moi pourquoi en D3 tu as saisi B$2:$E3 et pas simplement B$2:B2 comme dans ton post initial ? Même question évidemment pour C$2:F$2 au lieu de C$2:C2 ...
► Pourquoi ta formule ne fait jamais référence à la donnée essentielle, celle qui est en colonne A ? Telle qu'elle est rédigée, ta formule voudrait dire que dès qu'un matériel quelconque est dehors, tous les autres sont bloqués !
Bonsoir,
Je crains que ce ne soit un peu complexe par formule.
Une proposition en vba : athizy.xls
Le contrôle se fait à la saisie donc pour tester revalide tes dates.
Pour traiter un tableau déjà rempli tu peux remplace / par / dans la plage des dates pour forcer une validation de ces cellules.
Le message donnant la ligne peut être désactivé en mettant une ' devant msgbox(...)
eric
Je crains que ce ne soit un peu complexe par formule.
Une proposition en vba : athizy.xls
Le contrôle se fait à la saisie donc pour tester revalide tes dates.
Pour traiter un tableau déjà rempli tu peux remplace / par / dans la plage des dates pour forcer une validation de ces cellules.
Le message donnant la ligne peut être désactivé en mettant une ' devant msgbox(...)
eric
bonsoir,
Si l'on veux autoriser qu'une référence commence le même jour qu'une date fin on peut modifier ainsi :
bonsoir Éric et merci car il faut persévérer quand on est parti dans une direction sans avoir vu le problème de l'intervalle à gérer.
Si l'on veux autoriser qu'une référence commence le même jour qu'une date fin on peut modifier ainsi :
=ET(ESTNUM($C2);SOMMEPROD(($A$2:$A2=$A2)*((($B2>$B$2:$B2)*($B2<$C$2:$C2))+(($C2<$C$2:$C2)*($C2>$B$2:$B2))))>0)
bonsoir Éric et merci car il faut persévérer quand on est parti dans une direction sans avoir vu le problème de l'intervalle à gérer.
Après comparaison avec le résultat que je voulais obtenir, voici la mise en forme conditionnelle qui fonctionne pour tous mes cas même les plus critiques.
=ET(ESTNUM($C4);SOMMEPROD(($A$2:$A4=$A4)*((($B4>$B$2:$B4)*($B4<$C$2:$C4))+(($C4<$C$2:$C4)*($C4>$B$2:$B4))+(($C4=$C$2:$C4))+($B4=$B$2:$B4))+(($C4>$C$2:$C4))*($B4<$B$2:$B4))>2)
Bonne journée a vous.
=ET(ESTNUM($C4);SOMMEPROD(($A$2:$A4=$A4)*((($B4>$B$2:$B4)*($B4<$C$2:$C4))+(($C4<$C$2:$C4)*($C4>$B$2:$B4))+(($C4=$C$2:$C4))+($B4=$B$2:$B4))+(($C4>$C$2:$C4))*($B4<$B$2:$B4))>2)
Bonne journée a vous.