Option Explicit
Const PWD$ = "nono79" '<--- mot de passe à changer (seulement à cet endroit)
Dim LR& 'Ligne de la personne qui a été trouvée par la Recherche ; 0 = non trouvée
Private Sub tbx03_Change() 'Date Début
Dim lng As Byte: lng = Len(tbx03): If lng = 3 Or lng = 6 Then tbx03 = tbx03 & "/"
End Sub
Private Sub tbx04_Change() 'Date Fin
Dim lng As Byte: lng = Len(tbx04): If lng = 3 Or lng = 6 Then tbx04 = tbx03 & "/"
End Sub
Private Sub tbx06_Change() 'Date Nais
Dim lng As Byte: lng = Len(tbx06): If lng = 3 Or lng = 6 Then tbx06 = tbx03 & "/"
End Sub
Private Sub tbx10_Change() 'Date L
Dim lng As Byte: lng = Len(tbx10): If lng = 3 Or lng = 6 Then tbx10 = tbx03 & "/"
End Sub
Private Sub tbx02_Exit(ByVal Cancel As MSForms.ReturnBoolean) 'N° Groupe
Dim Session$, Groupe%, T, k&, n&, i&
Session = cbx01: Groupe = Val(tbx02): If Groupe = 0 Then Exit Sub
With Worksheets("Feuil1")
n = .Cells(Rows.Count, 2).End(3).Row: If n = 1 Then Exit Sub
T = .[B1].Resize(n, 2)
For i = 2 To n
If Session = T(i, 2) And Groupe = T(i, 1) Then k = k + 1
Next i
MsgBox "Session : " & Session & vbLf & vbLf & "Groupe " & Format(Groupe, "00") & " :" _
& vbLf & vbLf & Space$(8) & k & " personnes", 64, "Nombre de personnes"
If k = 15 Then
MsgBox "Vous ne pouvez pas dépasser 15 personnes par groupe." & vbLf & vbLf _
& "Veuillez créer un nouveau groupe.", 48, "15 personnes maximum"
tbx02 = "": cbx01 = "": Cancel = -1
End If
End With
End Sub
Private Sub cmdNew_Click()
Dim i As Byte
For i = 1 To 11: Controls("tbx" & Format(i, "00")) = "": Next i
For i = 1 To 10: Controls("cbx" & Format(i, "00")) = "": Next i
End Sub
Private Sub cmdModif_Click()
If cbx09 = "" Then MsgBox "Veuillez sélectionner le nom/prénom de la personne à modifier.": Exit Sub
If cbx10 = "" Then MsgBox "Veuillez sélectionner la spécialité de la personne à modifier.": Exit Sub
If tbx05 = "" Then MsgBox "Merci de cliquer sur le bouton Recherche.": Exit Sub
If LR = 0 Then Exit Sub
Dim NP&, GR As Byte, SL As Byte: NP = Val(tbx01): GR = Val(tbx02): SL = Val(cbx03)
With Worksheets("Feuil1")
.Unprotect PWD
With .Cells(LR, 1)
.Value = Format(NP, "0000") 'N° Personnel
.Offset(, 1) = Format(GR, "00") 'N° Groupe
.Offset(, 2) = cbx01 'N° Sess
.Offset(, 3) = tbx05 'Nom et Prénom
.Offset(, 4) = cbx05 'Nom et Prénom (arabe)
.Offset(, 5) = CDate(tbx06) 'Date Nais
.Offset(, 6) = tbx07 'Lieu A / Lieu 2
.Offset(, 7) = cbx06 'Ville
.Offset(, 8) = tbx08 'Adresse
.Offset(, 9) = tbx09 'Entreprise A / Entreprise
.Offset(, 10) = cbx08 'Permis
.Offset(, 11) = CDate(tbx10) 'Date L
.Offset(, 12) = tbx11 'Lieu B / Lieu 3
.Offset(, 13) = cbx07 'Spécialité
.Offset(, 14) = CDate(tbx03) 'Date Début
.Offset(, 15) = CDate(tbx04) 'Date Fin
.Offset(, 16) = cbx02 'Entreprise B / Lieu 1
.Offset(, 17) = cbx04 'Prise en charge
.Offset(, 18) = Format(SL, "00") 'N° Salle
End With
.Protect PWD: .Select
End With
End Sub
Private Sub cmdValid_Click()
Dim ws As Worksheet
For Each ws In ActiveWorkbook.Worksheets
ws.Protect Password:=PWD, UserInterfaceOnly:=True
Next ws
If cbx05 = "" And cbx09 = "" Then 'Nom/Prénom (arabe) & Nom/Prénom (recherche)
MsgBox "Veuillez renseigner les champs 'Nom/Prénom' ": Exit Sub
End If
If MsgBox("confirmez-vous l'ajout des données ?", 4, "confirmation") <> 6 Then Exit Sub
tbx03 = Format(tbx03, ("YYYY/MM/DD")): tbx04 = Format(tbx04, ("YYYY/MM/DD"))
tbx06 = Format(tbx06, ("YYYY/MM/DD")): tbx10 = Format(tbx10, ("YYYY/MM/DD"))
Dim NP&, GR As Byte, SL As Byte, dlg&: dlg = Cells(Rows.Count, 1).End(3).Row
GR = Val(tbx02): SL = Val(cbx03): NP = Val(tbx01): If NP > dlg Then NP = dlg
With Worksheets("Feuil1").Cells(dlg + 1, 1)
.Value = Format(NP, "0000") 'N° Personnel
.Offset(, 1) = Format(GR, "00") 'N° Groupe
.Offset(, 2) = cbx01 'N° Sess
.Offset(, 3) = tbx05 'Nom et Prénom
.Offset(, 4) = cbx05 'Nom et Prénom (arabe)
.Offset(, 5) = CDate(tbx06) 'Date Nais
.Offset(, 6) = tbx07 'Lieu A / Lieu 2
.Offset(, 7) = cbx06 'Ville
.Offset(, 8) = tbx08 'Adresse
.Offset(, 9) = tbx09 'Entreprise A / Entreprise
.Offset(, 10) = cbx08 'Permis
.Offset(, 11) = CDate(tbx10) 'Date L
.Offset(, 12) = tbx11 'Lieu B / Lieu 3
.Offset(, 13) = cbx07 'Spécialité
.Offset(, 14) = CDate(tbx03) 'Date Début
.Offset(, 15) = CDate(tbx04) 'Date Fin
.Offset(, 16) = cbx02 'Entreprise B / Lieu 1
.Offset(, 17) = cbx04 'Prise en charge
.Offset(, 18) = Format(SL, "00") 'N° Salle
.Parent.Select
End With
Unload UserForm1: UserForm1.Show
End Sub
Private Sub ShowPers(T)
tbx01 = Format(T(LR, 1), "0000") 'N° Personnel
tbx02 = T(LR, 2) 'N° Groupe
cbx01 = T(LR, 3) 'N° Sess
tbx05 = T(LR, 4) 'Nom et Prénom
cbx05 = T(LR, 5) 'Nom et Prénom (arabe)
tbx06 = T(LR, 6) 'Date Nais
tbx07 = T(LR, 7) 'Lieu A / Lieu 2
cbx06 = T(LR, 8) 'Ville
tbx08 = T(LR, 9) 'Adresse
tbx09 = T(LR, 10) 'Entreprise A / Entreprise
cbx08 = T(LR, 11) 'Permis
tbx10 = T(LR, 12) 'Date L
tbx11 = T(LR, 13) 'Lieu B / Lieu 3
cbx07 = T(LR, 14) 'Spécialité
tbx03 = T(LR, 15) 'Date Début
tbx04 = T(LR, 16) 'Date Fin
cbx02 = T(LR, 17) 'Entreprise B / Lieu 1
cbx04 = T(LR, 18) 'Prise en charge
cbx03 = T(LR, 19) 'N° Salle
Worksheets("Feuil1").Select
End Sub
Private Sub cmdSearch_Click()
Dim NP$, sp$: NP = cbx09: sp = cbx10
If NP = "" Then MsgBox "Veuillez indiquer la personne recherchée." _
& vbLf & vbLf & "(nom & prénom séparés par un espace)": Exit Sub
If sp = "" Then MsgBox "Veuillez indiquer la spécialité.": Exit Sub
Dim T, chn$, p%, n&, i&: LR = 0
With Worksheets("Feuil1")
n = .Cells(Rows.Count, 1).End(3).Row: If n = 1 Then Exit Sub
T = .[A1].Resize(n, 19)
End With
For i = 2 To n
If T(i, 4) = NP Then
chn = T(i, 14)
If chn <> "" Then
p = InStr(chn, "/"): If p = 0 Then p = Len(chn) Else p = p - 1
If RTrim$(Left$(chn, p)) = sp Then LR = i: ShowPers T: Exit Sub
End If
End If
Next i
For i = 1 To 11: Controls("tbx" & Format(i, "00")) = "": Next i
For i = 1 To 8: Controls("cbx" & Format(i, "00")) = "": Next i
End Sub
Private Sub UserForm_Initialize()
'N° Personnel
tbx01 = Format(Application.WorksheetFunction.Max(Worksheets("Feuil1").Columns(1)) + 1, "0000")
'liste cbx09 : Personnes (Nom et Prénom), sans doublons
Dim T, d, n&, i&
With Worksheets("Feuil1")
n = .Cells(Rows.Count, 4).End(3).Row: If n = 1 Then Exit Sub
T = .[D1].Resize(n)
End With
Set d = CreateObject("Scripting.Dictionary")
For i = 2 To n
If T(i, 1) <> "" Then d(T(i, 1)) = ""
Next i
cbx09.List = d.Keys
'liste cbx10 : Spécialité
Dim chn$, p%, lig As Byte: lig = 1
With Worksheets("Feuil4")
Do
chn = .Cells(lig, 7): If chn = "" Then Exit Sub
p = InStr(chn, "/"): If p = 0 Then p = Len(chn) Else p = p - 1
cbx10.AddItem RTrim$(Left$(chn, p)): lig = lig + 1
Loop
End With
End Sub
Private Sub cmdExit_Click()
Application.ScreenUpdating = 0: Worksheets("Feuil3").Select: Unload Me
End Sub