Contrôle de plage horaire indisponible
Bonjour le forum,
Je vous explique mon problème. Je me suis aperçu que je pouvais réserver à l'intérieur d'une plage horaire déjà utilisée.
Exemple:réservation prise pour une salle le 31/05 de 7h à 10h pour un utilisateur. Or, un autre utilisateur peut réserver la même salle le 31/05 de 8h à 9h. Alors que si la personne veut réserver de 7h à 8h le système fonctionne bien car la salle n'apparait pas dans la liste.Je ne sais pas comment faire pour oter la salle indisponible à cette heure dans liste du userform de réservation.
merci de votre aide
à bientôt
Bonjour,
une idée comme ça, dans ta procedure pour tester si une salle est disponible, ajoute un test pour voir si la cellule est fusionnée. Disons que tu as trois cellule fusionnées A1 à A3 et un valeur dans la cellule. Si tu fais afficher la valeur des trois cellules, A1 = ta valeur, A2 et A3 seront vide, c'est pour ça que ça ne marche pas dans ton code. vu que les seules cellules fusionnés de tes feuilles réservations sont des réservations, je pense que tu peux fonctionnés de cette façon:
If MaFeuille.Cells(Lig, Col).Value <> "" Or MaFeuille.Cells(Lig, Col).MergeCells Thenj'ai gardé le test sur la valeur pour les cas où ta réservation ne ferait qu'une cellule. Au long la procedure serait:
Public Function ValidationReservation(Nom As String, MaDateDeb As Date, HeureDebut As Date, MaDateFin As Date, HeureFin As Date) As Boolean
Dim MaFeuille As Worksheet, TabF As String
Dim IsLibre As Boolean
' Remplissage du tableau des feuilles à ne pas prendre en compte
TabF = "Jours ouvrés;Menu;Data;Params;Cadre;Impression"
'
' Calcul de la ligne de date de DEBUT
LigDeb = 3 + DatePart("y", MaDateDeb)
LigFin = 3 + DatePart("y", MaDateFin)
'
' Calcul la colonne d'heure DEBUT
ColDebH = Me.ComboHeureDébut.ListIndex + 2
'
' Calcul la colonne d'heure FIN
ColFinH = Me.ComboHeureFin.ListIndex + 1
'
' Vider la listbox de choix
Me.ListBoxVh.Clear
' Pour chaque feuille du classeur
For Each MaFeuille In Worksheets
IsLibre = True ' Mettre la variable à VRAI ici
' Si c'est une feuille de planning
If InStr(1, TabF, MaFeuille.Name, vbTextCompare) = 0 Then
' Pour chaque ligne de réservation
For Lig = LigDeb To LigFin
' Pour chaque colonne
For Col = ColDebH To ColFinH
' Si la cellule n'est pas vide
If MaFeuille.Cells(Lig, Col).Value <> "" Or MaFeuille.Cells(Lig, Col).MergeCells Then
IsLibre = False
Exit For
End If
Next Col
Next Lig
' La réservation est-elle possible
If IsLibre Then Me.ListBoxVh.AddItem (MaFeuille.Name)
End If
Next MaFeuille
ValidationReservation = (Me.ListBoxVh.ListCount > 0)
End FunctionBonjour Math et bonjour le forum,
Merci pour le coup de main, cela marche effectivement très bien, je n'y avais pas pensé
Par contre, lors de la suppression de la réservation les cellules restent fusionnées. Peux tu me donner la syntaxe pour fractionner les cellules car après la suppression de la réservation la salle n'est pas disponible alors qu'elle est libre. je te joins le code.
Private Sub MiseEnFormeReservation(NomFeuille As String, Plage As String)
' Déprotéger la feuille
Call Protection(NomFeuille, False)
' Faire la mise en forme
With Sheets(NomFeuille).Range(Plage)
.ClearContents
.Interior.ColorIndex = xlNone
.HorizontalAlignment = xlLeft
.Borders(xlEdgeLeft).LineStyle = xlNone
.Borders(xlEdgeTop).LineStyle = xlNone
.Borders(xlEdgeBottom).LineStyle = xlNone
.Borders(xlEdgeRight).LineStyle = xlNone
' Supprimer les commentaires
.ClearComments
End With
' Protéger la feuille
Call Protection(NomFeuille, True)
End SubBonne journée à tous
ajoute
.UnMergedans ton with
Re,
merci Math super
Amicalement