Voici tout le code
'-----------------------
'Initialisation UserForm
'-----------------------
Private Sub UserForm_Initialize()
Dim TblÉcoles As ListObject
Dim TabÉcoles() As Variant
Dim p As Integer
'Set ListObjects
Set TblÉcoles = Range(NomTableauÉcoles).ListObject
Set TblBD = Range(NomTableauBD).ListObject
'Chargement de la ComboBox
TabÉcoles = TblÉcoles.DataBodyRange.Value
Me.ComboBox1.List = TabÉcoles
'Affiche le total des lignes de la BD
Call AfficheTotalLignesBD
'Active la feuille BD
With ThisWorkbook.Worksheets(NomFeuilleBD)
.Activate
End With
'Set le Focus en ComboBox
Me.ComboBox1.SetFocus
End Sub
'------------------
'ComboBox ComboBox1
'------------------
Private Sub ComboBox1_Change()
Dim LigneÉcole As Long
Dim p As Integer
Dim Réponse As Variant
If Me.ComboBox1.ListIndex = -1 Then Exit Sub
'-----------------
'Si l'école existe
'-----------------
If ÉcoleExiste(LigneÉcole) Then
For p = 1 To NombreTextBox
Me.Controls("TextBox" & p).Value = TblBD.DataBodyRange(LigneÉcole, p + 1).Value
Next p
'-----------------------
'Si l'école n'existe pas
'-----------------------
Else
Réponse = MsgBox("L'école <" & Me.ComboBox1.Value & "> n'est pas présente dans la feuille <" & NomFeuilleBD & ">." & vbCrLf & vbCrLf & _
"Effacer le formulaire (OK) ou bien garder les valeurs actuelles (Annuler) ?", vbOKCancel + vbQuestion)
If Réponse = vbOK Then
For p = 1 To NombreTextBox
Me.Controls("TextBox" & p).Value = ""
Next p
End If
End If
End Sub
'------------------
'Bouton ENREGISTRER
'------------------
Private Sub ENREGISTRER_Click()
Dim LigneÉcole As Long
Dim p As Integer
Dim Réponse As Variant
'Contrôle contenu de la ComboBox1
If Not ContrôleComboBox1 Then Exit Sub
'-----------------
'Si l'école existe
'-----------------
If ÉcoleExiste(LigneÉcole) Then
Réponse = MsgBox("L'école <" & Me.ComboBox1.Value & "> est déjà enregistrée." & vbCrLf & _
"Les valeurs du formulaire remplaceront les valeurs présentes dans la feuille <" & _
NomFeuilleBD & ">." & vbCrLf & vbCrLf & _
"Continuer ?", vbOKCancel + vbQuestion)
If Réponse = vbCancel Then Exit Sub
'-----------------------
'Si l'école n'existe pas
'-----------------------
Else
Réponse = MsgBox("L'école <" & Me.ComboBox1.Value & "> n'est pas encore enregistrée." & vbCrLf & _
"Elle sera créée dans la feuille <" & NomFeuilleBD & ">." & vbCrLf & vbCrLf & _
"Continuer ?", vbOKCancel + vbQuestion)
If Réponse = vbCancel Then Exit Sub
TblBD.ListRows.Add LigneÉcole
End If
'------------------------------------------------------
'Enregistrement des valeurs du formulaire en feuille BD
'------------------------------------------------------
TblBD.DataBodyRange(LigneÉcole, 1).Value = ComboBox1.Value
For p = 1 To NombreTextBox
TblBD.DataBodyRange(LigneÉcole, p + 1).Value = Me.Controls("TextBox" & p).Value
Next p
'Affiche le total des lignes de la BD
Call AfficheTotalLignesBD
'Set le Focus en ComboBox
Me.ComboBox1.SetFocus
End Sub
'--------------
'Bouton EFFACER
'--------------
Private Sub EFFACER_Click()
Dim p As Integer
'Efface les données du formulaire
For p = 1 To NombreTextBox
Me.Controls("TextBox" & p).Text = ""
Next p
'Set le Focus en ComboBox
Me.ComboBox1.SetFocus
End Sub
'--------------
'Bouton QUITTER
'--------------
Private Sub QUITTER_Click()
Unload Me
End Sub
'----------------
'Bouton SUPPRIMER
'----------------
Private Sub SUPPRIMER_Click()
Dim Réponse As Variant
Dim LigneÉcole As Long
'Contrôle contenu de la ComboBox1
If Not ContrôleComboBox1 Then Exit Sub
'-----------------
'Si l'école existe
'-----------------
If ÉcoleExiste(LigneÉcole) Then
Réponse = MsgBox("Confirmer la suppression de l'école <" & Me.ComboBox1.Value & "> ?", vbOKCancel + vbQuestion)
If Réponse = vbCancel Then Exit Sub
TblBD.ListRows(LigneÉcole).Delete
'Affiche le total des lignes de la BD
Call AfficheTotalLignesBD
MsgBox "L'école <" & Me.ComboBox1.Value & "> a été supprimé de la feuille <" & NomFeuilleBD & ">."
'-----------------------
'Si l'école n'existe pas
'-----------------------
Else
MsgBox "L'école <" & Me.ComboBox1.Value & "> n'existe pas dans la feuille <" & NomFeuilleBD & ">."
End If
'Set le Focus en ComboBox
Me.ComboBox1.SetFocus
End Sub
'---------------------------------
'Affiche le total des lignes en BD
'---------------------------------
Sub AfficheTotalLignesBD()
If TblBD.DataBodyRange Is Nothing Then
TextBoxTotalLignesBD.Text = 0
Else
TextBoxTotalLignesBD.Text = TblBD.DataBodyRange.Rows.Count
End If
End Sub
'----------------------------------------------
'Contrôle que la valeur en ComboBox1 est valide
'----------------------------------------------
Function ContrôleComboBox1() As Boolean
If Me.ComboBox1.ListIndex = -1 Then
MsgBox "L'école choisie ne fait pas partie de la liste des écoles."
Else
ContrôleComboBox1 = True
End If
End Function
'--------------------------------------------
'Retourne la ligne de l'école de la ComboBox1
'dans le paramètre et True si l'école existe
'--------------------------------------------
Function ÉcoleExiste(ByRef LigneÉcole As Long) As Boolean
'Aucune école n'existe en feuille BD
If TblBD.DataBodyRange Is Nothing Then
ÉcoleExiste = False
LigneÉcole = 1
Else
'Cherche l'école de la ComboBox dans la feuille BD
For LigneÉcole = 1 To TblBD.DataBodyRange.Rows.Count
If TblBD.ListColumns("ÉCOLES").DataBodyRange(LigneÉcole).Value = ComboBox1.Value Then Exit For
Next LigneÉcole
If LigneÉcole <= TblBD.DataBodyRange.Rows.Count Then ÉcoleExiste = True
End If
End Function