Réservation de salle

goldenboy

XLDnaute Occasionnel
Bonjour à tous,

Voici un nouveau projet qui semble être plutôt interessant.
J'ai un classeur avec une page d'accueil que l'on pourra considérer comme récapitulative, ainsi que des feuilles associées à des utilisateurs que l'on considerera comme espaces de travail.

Les rouages de cet outil sont expliqués dans le fichier joint vierge de code VBA pour le momment :p.

Merci d'avance à tous pour votre aide et vos propositions.

Très cordialement.
 

Pièces jointes

  • reservation salle.xls
    122 KB · Affichages: 183
  • reservation salle.xls
    122 KB · Affichages: 202
  • reservation salle.xls
    122 KB · Affichages: 239

goldenboy

XLDnaute Occasionnel
Re : Réservation de salle

Bonjour leakim,

J'aime beaucoup votre travail et il pourrait tout à fait correspondre à ce que je souhaite.

Serait-il possible de bloquer la modification ou la suppression d'une réservation uniquement à l'utilisateur qui l'a faite ?
Et par conséqent, serait-il possible de donner plus de droits à un administrateur ?

Merci d'avance.
Très cordialement.
 

goldenboy

XLDnaute Occasionnel
Re : Réservation de salle

Bonjour leakim, bonjour le forum.

J'ai réussi à bloquer les droits des utilisateurs et a en donner davantage aux administrateurs.

En revanche, est ce qu'il est normal qu'un utilisateur ne puisse pas modifier l'horaire d'une réservation?
Rencontrez vous ce problème?

À vous lire,
Cordialement.
 

leakim

XLDnaute Occasionnel
Re : Réservation de salle

Bonjour Goldenboy,
Non, je n'ai pas eut de telle remontée ??

Par contre je suis bien intéressé par tes modifications de "droits" d'administrateur.

L'idée est de faire partager :)

Leakim

Ps: Sympa le film de ton groupe !!
 
Dernière édition:

goldenboy

XLDnaute Occasionnel
Re : Réservation de salle

Bonjour leakim,

Au travail, il est aisé de détecter le nom des utilisateurs avec cette fonction :
Code:
Public Declare Function GetUserName Lib "advapi32.dll" Alias "GetUserNameA" _
(ByVal lpBuffer As String, nSize As Long) As Long

Function OSUserName() As String 'extrait d'un code de Paul, Dave Peterson Exelabo
Dim Buffer As String * 256
Dim BuffLen As Long
BuffLen = 256
If GetUserName(Buffer, BuffLen) Then _
OSUserName = Left(Buffer, BuffLen - 1)
End Function

Sub CTest()
MsgBox OSUserName
End Sub
L'username des collaborateurs correspond à leur identifiant.
Dans l'onglet "Données", j'ai ajouté 3 colonnes après "pro" :
- Code user pro (identifiant correspondant au nom des pros)
- Administrateur (liste les noms des admin comme la colonne pro liste les noms des utilisateurs)
- Code user admin (identifiant correspondant au nom des admin)

A l'ouverture du classeur (Workbook_Open()), je détecte si l'utilisateur du fichier se situe dans la liste admin ou utilisateur, et j'ai ajouté des conditions devant les procédures en fonction de cette détection.
D'ailleurs, à l'ouverture, un collaborateur qui ne se trouve dans aucune des deux listes, voit un message d'avertissement lui indiquant qu'il n'est pas autorisé à utiliser cette application et l'application se referme.

Pour limiter les droits de modification des utilisateurs, je compare leur nom (pro) aux informations stockés dans la feuille BD_CAL ou en récupérant directement le nom de l'utilisateur qui a effectué la réservation sur la feuille "Calendrier", puisqu'il s'affiche en colonne E (vue à la journée découpée par tranche de 30 minutes), le nom du réservataire, un tiret, le type de réunion, un tiret et l'objet de la réunion. De ce résultat, je récupère le nom du réservataire et le compare à l'utilisateur en cours. Si c'est le même, l'usf s'ouvre et les boutons "modifier" et "supprimer" apparaissent, si ce n'est pas le même, un message bloquant s'affiche et indique qu'il n'est pas possible de modifier la réservation d'un autre utilisateur.

En revanche, un admin pourra lui modifier ou supprimer n'importe qu'elle réservation.
J'ai également modifié le message d'avertissement sur une réservation qui empiéterait sur une autre, en affichant non plus l'heure de début de la réservation qui est en train d'essayer de se faire, mais en affichant l'horaire qui est déjà réservé et qui bloque la réservation en cours.

J'ai également modifié la détection des réservations dans la base, car si l'on fait trois réservations identiques en tout point, sauf la salle (donc en réalité trois réservations différentes), la recherche prenait la première valeur trouvée et ce indépendamment de la salle réservée.
Exemple :
- pro1 réserve le 8/2/2014 de 12h à 12h30 en interne avec un objet "test1", la salle numéro 1
- pro1 réserve le 8/2/2014 de 12h à 12h30 en interne avec un objet "test1", la salle numéro 2
- pro1 réserve le 8/2/2014 de 12h à 12h30 en interne avec un objet "test1", la salle numéro 3

Si je retourne sur les réservations du 8/2/2014 de la salle numéro 3, et que je double clic sur l'horaire de 12h pour modifier la réservation, le numéro de ligne qui était pris était celui de la salle numéro 1.
Alors qu'il devrait prendre la ligne numéro 3 correspondant à la salle numéro 3.
Dans la réalité, ca devrait pas arriver, puisqu'un utilisateur ne pourra pas se retrouver à trois endroit différents en même temps. Mais pour le principe et dans l'éventualité de réservation effectuées en son nom pour le compte d'un autre collaborateurs, j'ai modifié cela.

Tout ce que je viens de raconter peut paraître flou, mais j'essai de t'envoyer le fichier la semaine prochaine, puisqu'il est sur mon pc au boulot.

Bon weekend.
Très cordialement.
 

goldenboy

XLDnaute Occasionnel
Re : Réservation de salle

Bonjour leakim,

Voici le fichier.

J'ai enlevé la detection admin or user étant donné que je ne connais pas ton "osusername" et pour éviter qu'a l'ouverture le classeur ne se referme.
Aussi pour éviter les erreurs puisqu'il n'y a plus de pro et d'admin de renseignés dans la feuille "données"

J'ai essayé de commenter toutes mes modifications.

Je reste à disposition pour d'éventuelles questions ou remarques.

Très cordialement.
 

Pièces jointes

  • Planning de réservation.xlsm
    495.7 KB · Affichages: 276

goldenboy

XLDnaute Occasionnel
Re : Réservation de salle

Bonjour,

Je viens de modifier le code suivant :
Code:
Private Sub ComboBox_debut_Change()
Dim J As Long

  Me.ComboBox_fin.Clear
  If Me.ComboBox_debut.ListIndex = -1 Then Exit Sub
  With Sheets("Données")
   If Me.ComboBox_debut.ListIndex + 3 = .Range("H" & Rows.Count).End(xlUp).Row + 1 Then
     For J = Me.ComboBox_debut.ListIndex + 2 To .Range("H" & Rows.Count).End(xlUp).Row
      Me.ComboBox_fin.AddItem .Range("H" & J).Text
     Next J
   Else
     For J = Me.ComboBox_debut.ListIndex + 3 To .Range("H" & Rows.Count).End(xlUp).Row
      Me.ComboBox_fin.AddItem .Range("H" & J).Text
     Next J
   End If
  End With
End Sub
En effet, un double clic sur la cellule D33 de la feuille "Calendrier" générait une erreur.

J'ai également ajouté une vérification pour empècher une réservation sans durée. (Une réservation qui a pour début 8h et pour fin 8h n'a pas de durée).
Code:
'Mettre une condition de remplissage tout les champs doivent être renseignés sauf les boutons options
    
  If Me.ComboBox_debut.ListIndex = -1 Then
    MsgBox "Veuillez indiquer l'heure de début de votre réunion, merci.", 64
  ElseIf Me.ComboBox_fin.ListIndex = -1 Then
    MsgBox "Veuillez indiquer l'heure de fin de votre réunion, merci.", 64
  ElseIf Me.ComboBox_pro.ListIndex = -1 Then
    MsgBox "Veuillez indiquer votre nom, merci.", 64
  ElseIf Me.TextBox_motif = "" Then
    MsgBox "Veuillez indiquer le nom de votre réunion, merci.", 64
  ElseIf Me.ComboBox_type.ListIndex = -1 Then
    MsgBox "Veuillez indiquer le type de votre réunion, merci.", 64
 ElseIf Me.ComboBox_debut.Value = Me.ComboBox_fin.Value Then            'Ajout d'une vérification
    MsgBox "Votre heure de début et votre heure de fin ne doivent pas être identiques.", 64
  Else                                                    'Si OK

Bien cordialement.
 

leakim

XLDnaute Occasionnel
Re : Réservation de salle

Bonsoir,
Joli travail !!
Pour l'erreur en D33, moi j'ai fait plus simple j'ai figer cette cellule en la protégeant !!!
Pour les horaires, je ne vois pas début 8h00 fin 8h00 c'est pas possible car les listes sont liées et décalées d'une demie heure??
A moins que j'ai mis une version sans c'est upload... auquel cas, ne criez pas trop fort ;-)

Leakim
 

goldenboy

XLDnaute Occasionnel
Re : Réservation de salle

Bonjour Leakim,

J'ai, sauf erreur de ma part, trouvé quelques erreurs sur les dates fériées.
Notamment sur le jeudi de l'Ascension et sur le lundi de pentecôte.

Personnellement, je me suis aidé de ce document pour mettre à jour les formules : Ce lien n'existe plus

Bien à toi.
 

Discussions similaires

Réponses
36
Affichages
2 K
Réponses
3
Affichages
885

Statistiques des forums

Discussions
312 231
Messages
2 086 450
Membres
103 214
dernier inscrit
MASSA1616