XL 2019 recherche dans plage

  • Initiateur de la discussion Initiateur de la discussion Ron74
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Ron74

XLDnaute Nouveau
Bonjour

Je suis en train de créer un fichier pour faire des réservation de salles (fichier joint)

ces réservations sont possible par exemple tous les jours (soir ou matin) entre une date de début et une date de fin

Dans l'exemple la réservation 1 est le mardi soir entre le 01/07/25 et le 22/07/25, la réservation 2 est le jeudi soir entre le 03/07/25 et le 17/03/25

Pour suivre ces réservations j'affiche dans la feuille "planning Saint Jacques" colonne "F" les jours réservés avec une formule un peu compliqué (F3) et qui ne me permet "aujourd'hui" de n'avoir la possiblité de 10 réservations ou alors en ajoutant encore des tests

c'est sue cette formule que j'ai besoin d'aide pour avoir plus de 10 réservations

Pouvez-vous m'aider SVP

Merci

je suis à votre dispositin pour des complément d'information si il en manque

Bonne journée
 

Pièces jointes

Bonjour @Ron74,
J'ai fait un test avec cette formule en O3 de ton onglet "Planning Saint Jacques" et j'ai (a priori) les mêmes résultats que toi.
A faire des tests et voir dans le temps si tout est OK.
Formule en O3 = SOMMEPROD(($C3>=Tableau1[Date_début])*($C3<=Tableau1[Date_fin])*($D3=Tableau1[Jour])*($E3=Tableau1[Matin_Soir])*(Tableau1[Numéro]))

Voir copie d'écran ci-dessous
1755241552973.png


@+ Lolote83
 
Dernière édition:
Bonjour à toutes & à tous, bonjour @Ron74, bonjour @Lolote83

Après utilisation de 2 Tableaux Structurés "TS_Résa_Mois" (les résa du mois choisi) & "TS_BdD" (l'ensemble des résa)
Une version pour tenir compte des réservations sur la journée :
en F3 :
VB:
=SI(OU(SOMMEPROD((C3>=TS_BdD[Date_début])*(C3<=TS_BdD[Date_fin])*(D3=TS_BdD[Jour])*(E3=TS_BdD[Matin_Soir])*(TS_BdD[Numéro]))>0;
       SOMMEPROD((C3>=TS_BdD[Date_début])*(C3<=TS_BdD[Date_fin])*(D3=TS_BdD[Jour])*("J"=TS_BdD[Matin_Soir])*(TS_BdD[Numéro]))>0);
    SOMMEPROD((C3>=TS_BdD[Date_début])*(C3<=TS_BdD[Date_fin])*(D3=TS_BdD[Jour])*(E3=TS_BdD[Matin_Soir])*(TS_BdD[Numéro]))
   +SOMMEPROD((C3>=TS_BdD[Date_début])*(C3<=TS_BdD[Date_fin])*(D3=TS_BdD[Jour])*("J"=TS_BdD[Matin_Soir])*(TS_BdD[Numéro]));
   "")

Pour tenir compte des TS j'ai dû un peu modifier les macros "Ecriture_données", "Sub UserForm_Activate()"
J'ai ajouté une macro "Ajuster_TS_Résa_Mois" pour ajuster le TS "TS_Résa_Mois" lors des changements de périodes (ComboBoxes CBx_Mois, CBx_Année, validation du formulaire de réservation)

Voilà regarde le fichier joint

À bientôt
 

Pièces jointes

Bonjour à toutes & à tous, bonjour @Ron74, bonjour @Lolote83

Après utilisation de 2 Tableaux Structurés "TS_Résa_Mois" (les résa du mois choisi) & "TS_BdD" (l'ensemble des résa)
Une version pour tenir compte des réservations sur la journée :
en F3 :
VB:
=SI(OU(SOMMEPROD((C3>=TS_BdD[Date_début])*(C3<=TS_BdD[Date_fin])*(D3=TS_BdD[Jour])*(E3=TS_BdD[Matin_Soir])*(TS_BdD[Numéro]))>0;
       SOMMEPROD((C3>=TS_BdD[Date_début])*(C3<=TS_BdD[Date_fin])*(D3=TS_BdD[Jour])*("J"=TS_BdD[Matin_Soir])*(TS_BdD[Numéro]))>0);
    SOMMEPROD((C3>=TS_BdD[Date_début])*(C3<=TS_BdD[Date_fin])*(D3=TS_BdD[Jour])*(E3=TS_BdD[Matin_Soir])*(TS_BdD[Numéro]))
   +SOMMEPROD((C3>=TS_BdD[Date_début])*(C3<=TS_BdD[Date_fin])*(D3=TS_BdD[Jour])*("J"=TS_BdD[Matin_Soir])*(TS_BdD[Numéro]));
   "")

Pour tenir compte des TS j'ai dû un peu modifier les macros "Ecriture_données", "Sub UserForm_Activate()"
J'ai ajouté une macro "Ajuster_TS_Résa_Mois" pour ajuster le TS "TS_Résa_Mois" lors des changements de périodes (ComboBoxes CBx_Mois, CBx_Année, validation du formulaire de réservation)

Voilà regarde le fichier joint

À bientôt
Bonjour à tous
Bonjour à toutes & à tous, bonjour @Ron74, bonjour @Lolote83

Après utilisation de 2 Tableaux Structurés "TS_Résa_Mois" (les résa du mois choisi) & "TS_BdD" (l'ensemble des résa)
Une version pour tenir compte des réservations sur la journée :
en F3 :
VB:
=SI(OU(SOMMEPROD((C3>=TS_BdD[Date_début])*(C3<=TS_BdD[Date_fin])*(D3=TS_BdD[Jour])*(E3=TS_BdD[Matin_Soir])*(TS_BdD[Numéro]))>0;
       SOMMEPROD((C3>=TS_BdD[Date_début])*(C3<=TS_BdD[Date_fin])*(D3=TS_BdD[Jour])*("J"=TS_BdD[Matin_Soir])*(TS_BdD[Numéro]))>0);
    SOMMEPROD((C3>=TS_BdD[Date_début])*(C3<=TS_BdD[Date_fin])*(D3=TS_BdD[Jour])*(E3=TS_BdD[Matin_Soir])*(TS_BdD[Numéro]))
   +SOMMEPROD((C3>=TS_BdD[Date_début])*(C3<=TS_BdD[Date_fin])*(D3=TS_BdD[Jour])*("J"=TS_BdD[Matin_Soir])*(TS_BdD[Numéro]));
   "")

Pour tenir compte des TS j'ai dû un peu modifier les macros "Ecriture_données", "Sub UserForm_Activate()"
J'ai ajouté une macro "Ajuster_TS_Résa_Mois" pour ajuster le TS "TS_Résa_Mois" lors des changements de périodes (ComboBoxes CBx_Mois, CBx_Année, validation du formulaire de réservation)

Voilà regarde le fichier joint

À bientôt
Bonjour à tous

D'abords un grand merci pour vos réponses

@Lolote83 Votre solution ne prends pas en compte Les réservation faite pour un seul jour entier

@AtTheOne Votre solution ne fonctionne pas si une réservation est prise sur 2 mois

Merci encore pour votre aide

Bonne journée
 

Pièces jointes

Bonjour à toutes & à tous, bonjour @Ron74
Une erreur de logique sur les bornes !
correction du nom défini "Résa_Mois" :
VB:
=SI((TS_BdD[Date_fin]>='Planning Saint Jacques'!$A$1)*(TS_BdD[Date_début]<=FIN.MOIS('Planning Saint Jacques'!$A$1;0));TS_BdD[Numéro];"")

Et cela devrait fonctionner.

À bientôt
 

Pièces jointes

Dernière édition:
Bonjour à tous,

Puisqu'on se sert de VBA autant utiliser cette fonction personnalisée, très simple et très rapide :
VB:
Option Compare Text 'la casse est ignorée

Function Numero(dat As Long, Jour As Byte, MS As String, T As Range)
Dim tablo, i&
tablo = T 'matrice, plus rapide
Numero = ""
For i = 1 To UBound(tablo)
    If dat >= tablo(i, 12) And dat <= tablo(i, 13) And tablo(i, 14) = Jour And (tablo(i, 15) = MS Or tablo(i, 15) = "J") Then Numero = tablo(i, 1): Exit Function
Next i
End Function
Formule en F3 à tirer vers le bas =Numero(C3;D3;E3;TS_BdD)

A+
 

Pièces jointes

Maintenant sans VBA la solution classique est d'utiliser une formule matricielle en F3 :
Code:
=SIERREUR(INDEX(TS_BdD[Numéro];EQUIV(1;(C3>=TS_BdD[Date_début])*(C3<=TS_BdD[Date_fin])*(D3=TS_BdD[Jour])*SIGNE((E3=TS_BdD[Matin_Soir])+(TS_BdD[Matin_Soir]="J"));0));"")
à valider par Ctrl+Maj+Entrée et tirer vers le bas.
 

Pièces jointes

Re
En plaçant la formule dans un nom défini, plus besoin de valider par Ctrl+Maj+Entrée

En reprenant la formule de @ job_75 (qui comme d'hab. est nettement plus synthétique) et avec le nom défini Résa_J (cell C3 active) :
VB:
=SIERREUR(INDEX(TS_BdD[Numéro];EQUIV(1;('Planning Saint Jacques'!C3>=TS_BdD[Date_début])*('Planning Saint Jacques'!C3<=TS_BdD[Date_fin])*('Planning Saint Jacques'!D3=TS_BdD[Jour])*SIGNE(('Planning Saint Jacques'!E3=TS_BdD[Matin_Soir])+(TS_BdD[Matin_Soir]="J"));0));"")

On met =Résa_J en C3 et on tire vers le bas

À bientôt
EDIT : Version enregistrée en EXCEL2007
 

Pièces jointes

Dernière édition:
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
20
Affichages
827
Réponses
6
Affichages
617
Réponses
2
Affichages
796
Réponses
9
Affichages
1 K
Réponses
3
Affichages
635
Réponses
12
Affichages
1 K
  • Question Question
Microsoft 365 Planning
Réponses
2
Affichages
2 K
Retour