Vous êtes sur la page 1sur 6

ENSMR – 2022/2023 Mme I.

BENMILOUD
Programmation événementielle avec VBA

Création d’un formulaire


Il s’agit de développer une interface permettant de gérer les informations des clients d’une
entreprise. Ces informations sont stockées dans une feuille d’Excel. L’interface se présente
comme suit :

La feuille d’Excel nommée « Données »correspondante est :

L’interface se compose des contrôles suivants :


 ComboBox contenant préalablement la liste des codes clients se trouvant dans la
colonne A. Le clic sur le ComboBox permet d’afficher les informations contenues dans
la feuille « Données » dans les différents contrôles de l’interface (TextBox, boutons
radio).
 Quatre boutons de navigation :
o Début « <<» pour aller au premier enregistrement
o Précédent « < » pour aller au précédent
o Suivant « > » pour aller au suivant
o Dernier « >> » pour aller au dernier enregistrement
 « Nouveau » qui permet de saisir les informations d’un nouveau client dans les
différents contrôles du formulaire. Elles seront stockées dans la dernière ligne vide de
la feuille « Données ». Le code du nouveau client doit être unique. Lors du clic sur
« Nouveau », les différents contrôles de saisies se vident et ce bouton de commande
change d’intitulé et devient « Enregistrer ».

1
ENSMR – 2022/2023 Mme I.BENMILOUD
Programmation événementielle avec VBA

 « Modifier » permettant de modifier un enregistrement dans la feuille d’Excel en


sélectionnant le code client dans le ComboBox. Le code ne doit pas être modifié.
 « Supprimer » permettant de supprimer une ligne de la feuille d’Excel en sélectionnant
préalablement le code client dans le ComboBox.
o La syntaxe utilisée est Sheets("Données").Rows(LigneSupp).Delete.
o Un message de confirmation de suppression doit être affiché
o Il faut mettre à jour le nombre de lignes remplies.
 « Rechercher par Nom » permettant de rechercher un nom dans la colonne B de la
feuille d’Excel. Le nom est saisi via une boîte de dialogue InputBox. Si le nom existe,
le reste des renseignements s’afficheront dans les contrôles correspondants du
formulaire sinon un message d’alerte apparait « Ce nom n’existe pas ».

Option Explicit

Dim FinLigne As Integer


Dim SelLigne As Integer
'Fonction pour tester si un code existe déjà
Function Existe(CodeClient As Integer) As Boolean
Dim i As Integer

Existe = False

For i = 2 To FinLigne
If CodeClient = Range("A" & i).Value Then
Existe = True
Exit For
End If
Next
End Function
'Procédure pour effacer les contrôles
Sub Effacer()
CmbCode.Value = ""
TxtNom.Value = ""
TxtPrenom.Value = ""
TxtProfession.Value = ""
TxtMail.Value = ""
OptionCelibataire.Value = False
OptionMarie.Value = False
OptionDivorce.Value = False
End Sub
'Procédure pour afficher le contenu des cellules Excel dans les contrôles du formulaire
' en fonction du numéro de la ligne +2
Sub Affichage(numero As Integer)
CmbCode.Value = Range("A" & numero).Value
TxtNom.Value = Range("B" & numero).Value
TxtPrenom.Value = Range("C" & numero).Value
TxtProfession.Value = Range("D" & numero).Value

2
ENSMR – 2022/2023 Mme I.BENMILOUD
Programmation événementielle avec VBA

TxtMail.Value = Range("E" & numero).Value


If Range("F" & numero).Value = "Célibataire" Then
OptionCelibataire.Value = True
Else
If Range("F" & numero).Value = "Marié(e)" Then
OptionMarie.Value = True
Else
OptionDivorce.Value = True
End If
End If
End Sub
'Active quand on sélectionne un item du combobox
Private Sub CmbCode_Change()
SelLigne = CmbCode.ListIndex + 2
TxtNom.Value = Range("B" & SelLigne).Value
TxtPrenom.Value = Range("C" & SelLigne).Value
TxtProfession.Value = Range("D" & SelLigne).Value
TxtMail.Value = Range("E" & SelLigne).Value
If Range("F" & SelLigne).Value = "Célibataire" Then
OptionCelibataire.Value = True
Else
If Range("F" & SelLigne).Value = "Marié(e)" Then
OptionMarie.Value = True
Else
OptionDivorce.Value = True
End If
End If
End Sub

Private Sub CmdDebut_Click()


SelLigne = 2
Affichage (SelLigne)
End Sub

Private Sub CmdDernier_Click()


SelLigne = FinLigne
Affichage (SelLigne)
End Sub

Private Sub CmdModifier_Click()


Dim ModLigne As Integer
ModLigne = CmbCode.ListIndex + 2
Range("B" & ModLigne).Value = TxtNom.Value
Range("C" & ModLigne).Value = TxtPrenom.Value

Range("D" & ModLigne).Value = TxtProfession.Value

Range("E" & ModLigne).Value = TxtMail.Value

If OptionCelibataire.Value = True Then

3
ENSMR – 2022/2023 Mme I.BENMILOUD
Programmation événementielle avec VBA

Range("F" & ModLigne).Value = "Célibataire"


Else
If OptionMarie.Value = True Then

Range("F" & ModLigne).Value = "Marié(e)"


Else
Range("F" & ModLigne).Value = "Divorcé(e)"
End If
End If
End Sub
Private Sub CmdNouveau_Click()
If CmdNouveau.Caption = "Nouveau" Then
TextBox1.Visible = True
Effacer
CmdNouveau.Caption = "Enregistrer"
Else
If TextBox1.Value = "" Then
MsgBox "erreur: Veuillez remplir la zone de texte"
Else
If Existe(TextBox1.Text) = True Then
MsgBox "Ce code existe déjà "
TextBox1.Value = ""
Else
TextBox1.Visible = False
CmbCode.AddItem TextBox1.Value
FinLigne = FinLigne + 1
Range("A" & FinLigne).Value = TextBox1.Value
Range("B" & FinLigne).Value = TxtNom.Value
Range("C" & FinLigne).Value = TxtPrenom.Value
Range("D" & FinLigne).Value = TxtProfession.Value
Range("E" & FinLigne).Value = TxtMail.Value
If OptionCelibataire.Value = True Then
Range("F" & FinLigne).Value = "Célibataire"
Else
If OptionMarie.Value = True Then
Range("F" & FinLigne).Value = "Marié(e)"
Else
Range("F" & FinLigne).Value = "Divorcé(e)"
End If
End If
CmbCode.Value = TextBox1.Value
CmdNouveau.Caption = "Nouveau"
Activer_Bouton (True)
End If
End If
End If

End Sub

4
ENSMR – 2022/2023 Mme I.BENMILOUD
Programmation événementielle avec VBA

Private Sub CmdRechercher_Click()


Dim Nom As String
Nom = InputBox("Entrez le nom à rechercher ?", "Recherche selon NOm")
Dim i As Integer
Dim trouve As Boolean
trouve = False
For i = 2 To FinLigne
If UCase(Nom) = UCase(Range("B" & i).Value) Then
trouve = True
Exit For
End If
Next
If trouve = False Then
Effacer
MsgBox " Ce nom n'existe pas"
Else
Affichage (i)
End If
End Sub

Private Sub CmdSupprimer_Click()


Dim SupprLigne As Integer
Dim i As Integer
Dim reponse As Integer
SupprLigne = CmbCode.ListIndex + 2
reponse = MsgBox("Etes vous sûr de suuprimer ce code ?", vbYesNo + vbCritical)
If reponse = vbYes Then
Sheets("Données").Rows(SupprLigne).Delete
FinLigne = FinLigne - 1
If FinLigne = 1 Then
Effacer
MsgBox "Base de données est vide !!"
Else
CmbCode.Clear
For i = 2 To FinLigne
CmbCode.AddItem Range("A" & i).Value
Next
Affichage (2)
End If
End If
End Sub

Private Sub UserForm_Initialize()


TextBox1.Visible = False
Sheets("Données").Activate

'FinLigne = Sheets("Données").Range("A1").Rows.End(xlDown).Row
FinLigne = Sheets("Données").Range("A2000").Rows.End(xlUp).Row

5
ENSMR – 2022/2023 Mme I.BENMILOUD
Programmation événementielle avec VBA

If FinLigne = 1 Then
Activer_Bouton (False)
Else

Dim i As Integer
For i = 2 To FinLigne
CmbCode.AddItem Range("A" & i).Value
Next

SelLigne = 2
Affichage (SelLigne)
End If
End Sub

Sub Activer_Bouton(actif As Boolean)


CmdSupprimer.Enabled = actif
CmdModifier.Enabled = actif
CmdRechercher.Enabled = actif

End Sub

Private Sub CmdPrecedent_Click()


If SelLigne > 2 Then
SelLigne = SelLigne - 1
Affichage (SelLigne)
Else
MsgBox "Premier Enregistrement"
End If
End Sub
Private Sub CmdSuivant_Click()
If SelLigne < FinLigne Then
SelLigne = SelLigne + 1
Affichage (SelLigne)
Else
MsgBox "Dernier enregistrement"
End If
End Sub

Vous aimerez peut-être aussi