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 Then

j'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 Function

Bonjour 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 Sub

Bonne journée à tous

ajoute

.UnMerge

dans ton with

Re,

merci Math super

Amicalement

Rechercher des sujets similaires à "controle plage horaire indisponible"