Excel : Comparaison avec plusieurs conditions

Résolu
athizy Messages postés 24 Statut Membre -  
athizy Messages postés 24 Statut Membre -
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.
Configuration: Windows XP / Safari 532.5

12 réponses

  1. gbinforme Messages postés 14930 Date d'inscription   Statut Contributeur Dernière intervention   4 744
     
    bonjour

    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.
    1
    1. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
       
      hé bé, pas mal ;-)
      0
  2. gbinforme Messages postés 14930 Date d'inscription   Statut Contributeur Dernière intervention   4 744
     
    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.
    =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.
    0
  3. athizy Messages postés 24 Statut Membre
     
    Merci,
    Je vais visualiser tout ça.

    Cordialement
    0
  4. athizy Messages postés 24 Statut Membre
     
    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.
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Raymond PENTIER Messages postés 58213 Date d'inscription   Statut Contributeur Dernière intervention   17 482
     
    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 !
    0
  7. Raymond PENTIER Messages postés 58213 Date d'inscription   Statut Contributeur Dernière intervention   17 482
     
    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 !
    0
  8. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
     
    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
    0
  9. gbinforme Messages postés 14930 Date d'inscription   Statut Contributeur Dernière intervention   4 744
     
    bonsoir,

    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.
    0
  10. athizy Messages postés 24 Statut Membre
     
    Bonjour,

    Un grand merci à tous car vos solutions fonctionnent.

    Bonne continuation.

    Cordialement.
    0
  11. athizy Messages postés 24 Statut Membre
     
    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.
    0