0% ont trouvé ce document utile (0 vote)
57 vues19 pages

Exercices Userform 6-10

Ce document présente des exercices avancés pour la conception de UserForms avec VBA Excel, incluant la création d'un formulaire de génération de factures et un autre pour la modification de données. Les exercices détaillent les étapes pour créer des contrôles interactifs, écrire du code VBA pour gérer les événements et effectuer des calculs. Les utilisateurs doivent avoir complété des exercices précédents pour tirer pleinement parti de ces nouvelles fonctionnalités.

Transféré par

yero moussitou
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
57 vues19 pages

Exercices Userform 6-10

Ce document présente des exercices avancés pour la conception de UserForms avec VBA Excel, incluant la création d'un formulaire de génération de factures et un autre pour la modification de données. Les exercices détaillent les étapes pour créer des contrôles interactifs, écrire du code VBA pour gérer les événements et effectuer des calculs. Les utilisateurs doivent avoir complété des exercices précédents pour tirer pleinement parti de ces nouvelles fonctionnalités.

Transféré par

yero moussitou
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Absolument !

Pour aller plus loin dans la conception de UserForms avec VBA Excel, voici des
exercices supplémentaires qui abordent des concepts plus avancés et des scénarios plus
réalistes.

Document d'Exercices d'Application : Conception de


UserForms avec VBA Excel (Suite)
Ces exercices complémentaires vous aideront à explorer des fonctionnalités plus complexes et
à améliorer l'interactivité de vos UserForms.
Prérequis : Avoir terminé les exercices précédents.

Exercice 6 : UserForm avec Contrôles Dépendants et Formatage


Objectif : Créer un formulaire où la sélection d'un contrôle affecte le contenu ou la visibilité d'un
autre, et appliquer des formats spécifiques.
Étapes :
1.​ Créer un nouveau UserForm :
○​ Renommez-le frmFacturation.
○​ Changez son Caption en "Génération de Factures Simples".
2.​ Préparer les données dans Excel :
○​ Feuille "Articles" (par exemple, en Feuil2):
■​ A1: Nom Article | B1: Prix Unitaire | C1: Stock
■​ A2: Ordinateur | B2: 850 | C2: 10
■​ A3: Écran | B3: 150 | C3: 25
■​ A4: Souris | B4: 15 | C4: 100
■​ A5: Clavier | B5: 30 | C5: 50
○​ Feuille "Factures" (par exemple, en Feuil3):
■​ A1: Num Facture | B1: Date | C1: Article | D1: Quantité | E1: Prix Unitaire |
F1: Total Article | G1: Client
3.​ Ajouter les contrôles sur frmFacturation :
○​ Label : "Numéro de Facture :"
○​ TextBox : txtNumFacture (Désactivé, sera rempli automatiquement)
■​ Enabled = False
○​ Label : "Date :"
○​ TextBox : txtDateFacture (Rempli automatiquement avec la date du jour)
○​ Label : "Client :"
○​ TextBox : txtClient
○​ Label : "Sélectionnez l'article :"
○​ ComboBox : cboArticle
○​ Label : "Prix Unitaire :"
○​ TextBox : txtPrixUnitaire (Désactivé, rempli par cboArticle)
■​ Enabled = False
○​ Label : "Quantité :"
○​ TextBox : txtQuantite
○​ Label : "Total Article :"
○​ TextBox : txtTotalArticle (Désactivé, calculé automatiquement)
■​ Enabled = False
○​ CommandButton : Caption = "Ajouter à la Facture", cmdAjouterLigne
○​ ListBox : lstLignesFacture (Pour afficher les articles ajoutés)
■​ ColumnCount = 4 (Article, Quantité, Prix Unit., Total)
■​ ColumnWidths = "100;50;50;60"
○​ Label : "Total Général :"
○​ TextBox : txtTotalGeneral (Désactivé, calculé automatiquement)
■​ Enabled = False
○​ CommandButton : Caption = "Enregistrer Facture", cmdEnregistrerFacture
○​ CommandButton : Caption = "Nouvelle Facture", cmdNouvelleFacture
○​ CommandButton : Caption = "Fermer", cmdFermerFacture
4.​ Écrire le code VBA :
○​ Dans UserForm_Initialize :​
Private Sub UserForm_Initialize()​
Dim wsArticles As Worksheet​
Set wsArticles = [Link]("Articles") '
Assurez-vous que le nom correspond​

[Link] = Format(Date, "dd/mm/yyyy")​
[Link] = GetNextFactureNumber ' Appel à
une fonction pour le numéro de facture​
[Link] = Format(0, "#,##0.00 €") '
Initialise le total général​

' Remplir la ComboBox cboArticle​
With [Link]​
.Clear​
Dim i As Long​
For i = 2 To [Link]([Link],
1).End(xlUp).Row​
.AddItem [Link](i, 1).Value ' Ajoute le
nom de l'article​
Next i​
End With​

' Initialiser la ListBox​
With [Link]​
.Clear​
.ColumnCount = 4​
.ColumnWidths = "100;50;50;60"​
End With​

Call cmdNouvelleFacture_Click ' Réinitialise les champs
de saisie d'article​
End Sub​

' Fonction pour générer le prochain numéro de facture (à
placer dans un module standard)​
Function GetNextFactureNumber() As String​
Dim wsFactures As Worksheet​
Set wsFactures = [Link]("Factures") '
Assurez-vous que le nom correspond​

Dim lastRow As Long​
lastRow = [Link]([Link], 1).End(xlUp).Row​

Dim lastFactNum As String​
If lastRow = 1 Then ' Si seulement l'en-tête existe​
lastFactNum = "FAC-0000"​
Else​
lastFactNum = [Link](lastRow, 1).Value​
End If​

Dim numPart As Long​
numPart = CLng(Right(lastFactNum, 4)) ' Récupère la
partie numérique​
numPart = numPart + 1​

GetNextFactureNumber = "FAC-" & Format(numPart, "0000")​
End Function​

○​ Dans cboArticle_Change : (Se déclenche lorsque l'article sélectionné change)​


Private Sub cboArticle_Change()​
Dim wsArticles As Worksheet​
Set wsArticles = [Link]("Articles")​

Dim nomArticle As String​
nomArticle = [Link]​

Dim rFind As Range​
Set rFind = [Link](1).Find(What:=nomArticle,
LookIn:=xlValues, LookAt:=xlWhole)​

If Not rFind Is Nothing Then​
[Link] = Format([Link](0,
1).Value, "#,##0.00 €") ' Affiche le prix​
[Link] = "1" ' Définit la quantité par
défaut à 1​
CalculateTotalArticle ' Recalcule le total de
l'article​
Else​
[Link] = ""​
[Link] = ""​
[Link] = ""​
End If​
End Sub​
○​ Dans txtQuantite_Change : (Se déclenche lorsque la quantité est modifiée)​
Private Sub txtQuantite_Change()​
CalculateTotalArticle​
End Sub​

Private Sub CalculateTotalArticle()​
Dim prix As Double​
Dim quantite As Long​
Dim total As Double​

' Supprime le symbole monétaire et les espaces pour la
conversion​
Dim sPrix As String​
sPrix = Replace([Link], "€", "")​
sPrix = Replace(sPrix, " ", "")​
sPrix = Replace(sPrix, ",", ".") ' S'assurer que le
séparateur décimal est un point​

If IsNumeric(sPrix) Then​
prix = CDbl(sPrix)​
Else​
prix = 0​
End If​

If IsNumeric([Link]) And [Link]
<> "" Then​
quantite = CLng([Link])​
Else​
quantite = 0​
End If​

total = prix * quantite​
[Link] = Format(total, "#,##0.00 €")​
End Sub​

○​ Dans cmdAjouterLigne_Click :​
Private Sub cmdAjouterLigne_Click()​
' Validations​
If [Link] = "" Then​
MsgBox "Veuillez sélectionner un article.",
vbExclamation, "Erreur"​
Exit Sub​
End If​
If Not IsNumeric([Link]) Or
CLng([Link]) <= 0 Then​
MsgBox "La quantité doit être un nombre entier
positif.", vbExclamation, "Erreur"​
[Link]​
Exit Sub​
End If​

' Ajouter la ligne à la ListBox​
With [Link]​
.AddItem​
.List(.ListCount - 1, 0) = [Link]​
.List(.ListCount - 1, 1) = [Link]​
.List(.ListCount - 1, 2) = [Link]​
.List(.ListCount - 1, 3) = [Link]​
End With​

' Mettre à jour le total général​
UpdateTotalGeneral​

' Réinitialiser les champs de saisie d'article pour la
prochaine ligne​
[Link] = -1 ' Désélectionne l'article​
[Link] = ""​
[Link] = ""​
[Link] = ""​
[Link]​
End Sub​

Private Sub UpdateTotalGeneral()​
Dim totalGeneral As Double​
totalGeneral = 0​

Dim i As Long​
With [Link]​
For i = 0 To .ListCount - 1​
Dim sTotalLigne As String​
sTotalLigne = Replace(.List(i, 3), "€", "")​
sTotalLigne = Replace(sTotalLligne, " ", "")​
sTotalLigne = Replace(sTotalLigne, ",", ".")​

If IsNumeric(sTotalLigne) Then​
totalGeneral = totalGeneral +
CDbl(sTotalLigne)​
End If​
Next i​
End With​
[Link] = Format(totalGeneral, "#,##0.00
€")​
End Sub​

○​ Dans cmdEnregistrerFacture_Click :​
Private Sub cmdEnregistrerFacture_Click()​
If [Link] = "" Then​
MsgBox "Veuillez entrer le nom du client.",
vbExclamation, "Erreur"​
[Link]​
Exit Sub​
End If​
If [Link] = 0 Then​
MsgBox "Veuillez ajouter au moins un article à la
facture.", vbExclamation, "Erreur"​
Exit Sub​
End If​

Dim wsFactures As Worksheet​
Set wsFactures = [Link]("Factures")​

Dim numFacture As String​
numFacture = [Link]​

Dim dateFacture As Date​
dateFacture = CDate([Link])​

Dim client As String​
client = [Link]​

Dim i As Long​
Dim derniereLigne As Long​

' Enregistrer chaque ligne de la ListBox dans la feuille
Factures​
With [Link]​
For i = 0 To .ListCount - 1​
derniereLigne = [Link]([Link],
1).End(xlUp).Row + 1​

[Link](derniereLigne, 1).Value =
numFacture​
[Link](derniereLigne, 2).Value =
dateFacture​
[Link](derniereLigne, 3).Value =
.List(i, 0) ' Article​
[Link](derniereLigne, 4).Value =
CLng(.List(i, 1)) ' Quantité​
[Link](derniereLigne, 5).Value =
CDbl(Replace(Replace(.List(i, 2), "€", ""), " ", "")),
"#,##0.00" ' Prix Unitaire​
[Link](derniereLigne, 6).Value =
CDbl(Replace(Replace(.List(i, 3), "€", ""), " ", "")),
"#,##0.00" ' Total Article​
[Link](derniereLigne, 7).Value = client​
Next i​
End With​

MsgBox "Facture " & numFacture & " enregistrée avec
succès !", vbInformation, "Confirmation"​
Call cmdNouvelleFacture_Click ' Prépare pour une nouvelle
facture​
Call UserForm_Initialize ' Réinitialise le numéro de
facture et la date​
End Sub​

○​ Dans cmdNouvelleFacture_Click :​
Private Sub cmdNouvelleFacture_Click()​
[Link] = ""​
[Link] = -1 ' Désélectionne l'article​
[Link] = ""​
[Link] = ""​
[Link] = ""​
[Link] ' Efface les lignes de la
ListBox​
[Link] = Format(0, "#,##0.00 €") '
Réinitialise le total général​
[Link]​
End Sub​

○​ Dans cmdFermerFacture_Click :​
Private Sub cmdFermerFacture_Click()​
Unload Me​
End Sub​

5.​ Créer une macro pour afficher frmFacturation :​


Sub GenererFacture()​
[Link]​
End Sub​

6.​ Tester : Exécutez la macro, testez la sélection d'articles, la saisie de quantités, l'ajout de
lignes, et l'enregistrement de la facture.

Exercice 7 : Modification de Données via UserForm


Objectif : Créer un UserForm pour rechercher, afficher et permettre la modification de données
existantes dans une feuille Excel.
Étapes :
1.​ Reprendre l'Exercice 2 (frmSaisieDonnees) et modifier la feuille Excel :
○​ Assurez-vous que votre feuille "Feuil1" a des données avec les en-têtes : Nom,
Prénom, Âge.
2.​ Créer un nouveau UserForm :
○​ Renommez-le frmModifierDonnees.
○​ Caption = "Modifier Données Personnelles".
3.​ Ajouter les contrôles :
○​ Label : "Rechercher par Nom :"
○​ TextBox : txtRechercheNom
○​ CommandButton : Caption = "Rechercher", cmdRechercher
○​ ListBox : lstResultats (Affichera les résultats de la recherche)
■​ ColumnCount = 3
■​ ColumnWidths = "80;80;40"
○​ Frame : Caption = "Détails de la Personne"
■​ Label : "Nom :"
■​ TextBox : txtNomModif
■​ Label : "Prénom :"
■​ TextBox : txtPrenomModif
■​ Label : "Âge :"
■​ TextBox : txtAgeModif
■​ CommandButton : Caption = "Enregistrer Modifications",
cmdEnregistrerModif
■​ CommandButton : Caption = "Annuler", cmdAnnulerModif
○​ CommandButton : Caption = "Fermer", cmdFermerModif
4.​ Écrire le code VBA :
○​ Dans UserForm_Initialize :​
Private Sub UserForm_Initialize()​
' Initialiser la ListBox​
With [Link]​
.Clear​
.ColumnCount = 3​
.ColumnWidths = "80;80;40"​
End With​
' Masquer le cadre de modification au démarrage​
[Link] = False​
End Sub​

○​ Dans cmdRechercher_Click :​
Private Sub cmdRechercher_Click()​
Dim ws As Worksheet​
Set ws = [Link]("Feuil1") ' Assurez-vous que
le nom correspond​

Dim nomRecherche As String​
nomRecherche = "*" & [Link] & "*" '
Recherche partielle​

[Link]​
[Link] = False ' Masque le cadre de détails​

Dim i As Long​
For i = 2 To [Link]([Link], 1).End(xlUp).Row '
Commence à la ligne 2 pour les données​
If LCase([Link](i, 1).Value) Like
LCase(nomRecherche) Then​
With [Link]​
.AddItem​
.List(.ListCount - 1, 0) = [Link](i,
1).Value ' Nom​
.List(.ListCount - 1, 1) = [Link](i,
2).Value ' Prénom​
.List(.ListCount - 1, 2) = [Link](i,
3).Value ' Âge​
End With​
End If​
Next i​

If [Link] = 0 Then​
MsgBox "Aucun résultat trouvé pour '" &
[Link] & "'", vbInformation, "Recherche"​
End If​
End Sub​

○​ Dans lstResultats_Click : (Quand un élément de la ListBox est cliqué)​


Private Sub lstResultats_Click()​
If [Link] = -1 Then Exit Sub ' Pas de
sélection​

' Afficher les détails de la personne sélectionnée​
[Link] =
[Link]([Link], 0)​
[Link] =
[Link]([Link], 1)​
[Link] =
[Link]([Link], 2)​

[Link] = True ' Rendre le cadre de
modification visible​
End Sub​

○​ Dans cmdEnregistrerModif_Click :​
Private Sub cmdEnregistrerModif_Click()​
If [Link] = -1 Then​
MsgBox "Veuillez sélectionner une personne à
modifier.", vbExclamation, "Erreur"​
Exit Sub​
End If​

If Not IsNumeric([Link]) Then​
MsgBox "L'âge doit être un nombre.", vbExclamation,
"Validation"​
[Link]​
Exit Sub​
End If​

Dim ws As Worksheet​
Set ws = [Link]("Feuil1")​

Dim nomOriginal As String​
nomOriginal =
[Link]([Link], 0) ' Nom
d'origine pour retrouver la ligne​

Dim rFind As Range​
Set rFind = [Link](1).Find(What:=nomOriginal,
LookIn:=xlValues, LookAt:=xlWhole)​

If Not rFind Is Nothing Then​
' Mettre à jour les données dans la feuille​
[Link](0, 0).Value = [Link] ' Nom​
[Link](0, 1).Value = [Link] '
Prénom​
[Link](0, 2).Value = CLng([Link])
' Âge​

MsgBox "Données mises à jour avec succès !",
vbInformation, "Confirmation"​
' Rafraîchir la ListBox et masquer le cadre de
modification​
Call cmdRechercher_Click ' Re-exécuter la recherche
pour mettre à jour la ListBox​
[Link] = False​
Else​
MsgBox "Erreur : La ligne sélectionnée n'a pas été
trouvée dans la feuille.", vbCritical, "Erreur"​
End If​
End Sub​

○​ Dans cmdAnnulerModif_Click :​
Private Sub cmdAnnulerModif_Click()​
[Link] = False​
[Link] = -1 ' Désélectionne l'élément
dans la ListBox​
End Sub​

○​ Dans cmdFermerModif_Click :​
Private Sub cmdFermerModif_Click()​
Unload Me​
End Sub​

5.​ Créer une macro pour afficher frmModifierDonnees :​


Sub ModifierDonnees()​
[Link]​
End Sub​

6.​ Tester : Exécutez la macro, recherchez des noms, sélectionnez un résultat, modifiez-le et
enregistrez.

Exercice 8 : UserForm avec Gestion de Multiples Enregistrements


(Ajout/Suppression)
Objectif : Créer un UserForm pour ajouter et supprimer des enregistrements dans une feuille
Excel, en utilisant une ListBox pour visualiser les données et un bouton de confirmation pour les
suppressions.
Étapes :
1.​ Créer un nouveau UserForm :
○​ Renommez-le frmGestionClients.
○​ Caption = "Gestion des Clients".
2.​ Préparer la feuille Excel :
○​ Dans une feuille (ex: "Clients"), mettez les en-têtes : ID Client, Nom, Ville, Email.
○​ Ajoutez quelques clients factices.
3.​ Ajouter les contrôles sur frmGestionClients :
○​ Label : "ID Client :"
○​ TextBox : txtIDClient
○​ Label : "Nom :"
○​ TextBox : txtNomClient
○​ Label : "Ville :"
○​ TextBox : txtVilleClient
○​ Label : "Email :"
○​ TextBox : txtEmailClient
○​ CommandButton : Caption = "Ajouter Client", cmdAjouterClient
○​ ListBox : lstClients (Affichera tous les clients)
■​ ColumnCount = 4
■​ ColumnWidths = "50;100;80;120"
○​ CommandButton : Caption = "Supprimer Client Sélectionné",
cmdSupprimerClient
○​ CommandButton : Caption = "Vider Champs", cmdViderChamps
○​ CommandButton : Caption = "Fermer", cmdFermerClients
4.​ Écrire le code VBA :
○​ Dans UserForm_Initialize :​
Private Sub UserForm_Initialize()​
LoadClientsIntoListBox​
Call cmdViderChamps_Click ' Vide les champs de saisie​
End Sub​

Private Sub LoadClientsIntoListBox()​
Dim ws As Worksheet​
Set ws = [Link]("Clients")​

With [Link]​
.Clear​
.ColumnCount = 4​
.ColumnWidths = "50;100;80;120"​
' Optionnel: Ajouter les en-têtes si vous le
souhaitez​
' .AddItem​
' .List(.ListCount - 1, 0) = [Link](1, 1).Value​
' .List(.ListCount - 1, 1) = [Link](1, 2).Value​
' .List(.ListCount - 1, 2) = [Link](1, 3).Value​
' .List(.ListCount - 1, 3) = [Link](1, 4).Value​

Dim i As Long​
For i = 2 To [Link]([Link], 1).End(xlUp).Row​
.AddItem​
.List(.ListCount - 1, 0) = [Link](i, 1).Value​
.List(.ListCount - 1, 1) = [Link](i, 2).Value​
.List(.ListCount - 1, 2) = [Link](i, 3).Value​
.List(.ListCount - 1, 3) = [Link](i, 4).Value​
Next i​
End With​
End Sub​

○​ Dans cmdAjouterClient_Click :​
Private Sub cmdAjouterClient_Click()​
Dim ws As Worksheet​
Set ws = [Link]("Clients")​

' Validations simples​
If [Link] = "" Or [Link] = ""
Then​
MsgBox "ID Client et Nom sont obligatoires.",
vbExclamation, "Validation"​
Exit Sub​
End If​

' Vérifier si l'ID client existe déjà​
Dim rFind As Range​
Set rFind = [Link](1).Find(What:=[Link],
LookIn:=xlValues, LookAt:=xlWhole)​
If Not rFind Is Nothing Then​
MsgBox "Cet ID Client existe déjà. Veuillez en
choisir un autre ou modifier le client existant.",
vbExclamation, "Doublon"​
Exit Sub​
End If​

Dim derniereLigne As Long​
derniereLigne = [Link]([Link], 1).End(xlUp).Row + 1​

[Link](derniereLigne, 1).Value = [Link]​
[Link](derniereLigne, 2).Value = [Link]​
[Link](derniereLigne, 3).Value = [Link]​
[Link](derniereLigne, 4).Value = [Link]​

MsgBox "Client ajouté avec succès !", vbInformation,
"Confirmation"​
LoadClientsIntoListBox ' Rafraîchir la ListBox​
Call cmdViderChamps_Click ' Vider les champs pour une
nouvelle saisie​
End Sub​

○​ Dans cmdSupprimerClient_Click :​
Private Sub cmdSupprimerClient_Click()​
If [Link] = -1 Then​
MsgBox "Veuillez sélectionner un client à
supprimer.", vbExclamation, "Aucune Sélection"​
Exit Sub​
End If​

Dim reponse As VbMsgBoxResult​
reponse = MsgBox("Êtes-vous sûr de vouloir supprimer le
client '" & [Link]([Link], 1) &
"' ?", vbYesNo + vbQuestion, "Confirmation de Suppression")​

If reponse = vbYes Then​
Dim ws As Worksheet​
Set ws = [Link]("Clients")​

Dim idClientASupprimer As String​
idClientASupprimer =
[Link]([Link], 0) ' Récupère
l'ID client sélectionné​

Dim rFind As Range​
Set rFind =
[Link](1).Find(What:=idClientASupprimer,
LookIn:=xlValues, LookAt:=xlWhole)​

If Not rFind Is Nothing Then​
[Link] xlUp ' Supprime la ligne
entière​
MsgBox "Client supprimé avec succès !",
vbInformation, "Confirmation"​
LoadClientsIntoListBox ' Rafraîchir la ListBox​
Call cmdViderChamps_Click​
Else​
MsgBox "Erreur : Client non trouvé dans la
feuille.", vbCritical, "Erreur"​
End If​
End If​
End Sub​

○​ Dans cmdViderChamps_Click :​
Private Sub cmdViderChamps_Click()​
[Link] = ""​
[Link] = ""​
[Link] = ""​
[Link] = ""​
[Link]​
End Sub​

○​ Dans cmdFermerClients_Click :​
Private Sub cmdFermerClients_Click()​
Unload Me​
End Sub​

5.​ Créer une macro pour afficher frmGestionClients :​


Sub GererClients()​
[Link]​
End Sub​

6.​ Tester : Exécutez la macro, ajoutez de nouveaux clients, supprimez des clients, et
observez la mise à jour de la ListBox.

Exercice 9 : Utilisation du Contrôle Image et SpinButton


Objectif : Intégrer un contrôle Image pour afficher une image et un SpinButton pour ajuster une
valeur numérique.
Étapes :
1.​ Créer un nouveau UserForm :
○​ Renommez-le frmQuantiteProduit.
○​ Caption = "Détail Produit et Quantité".
2.​ Préparer une image :
○​ Ayez un fichier image (.jpg, .png, .bmp) sur votre ordinateur (ex: [Link]).
3.​ Ajouter les contrôles sur frmQuantiteProduit :
○​ Label : "Produit : Ordinateur Portable" (ou tout autre nom de produit)
○​ Image : imgProduit
■​ Dans les propriétés de imgProduit, cliquez sur Picture et choisissez votre
fichier image.
■​ PictureSizeMode = 2 - fmPictureSizeModeZoom (pour ajuster l'image à la
taille du contrôle).
○​ Label : "Description :"
○​ TextBox : txtDescription (Mettez une description longue par défaut, par exemple :
"Puissant ordinateur portable, idéal pour le travail et le divertissement. Écran Full
HD, processeur rapide.")
■​ MultiLine = True
■​ ScrollBars = 2 - fmScrollBarsVertical
○​ Label : "Prix : 1200 €"
○​ Label : "Quantité :"
○​ TextBox : txtQuantite (Pour afficher la quantité sélectionnée)
○​ SpinButton : spnQuantite
■​ Min = 1
■​ Max = 10 (ou plus)
■​ Value = 1 (Valeur initiale)
○​ CommandButton : Caption = "Ajouter au Panier", cmdAjouterPanier
○​ CommandButton : Caption = "Fermer", cmdFermerProduit
4.​ Écrire le code VBA :
○​ Dans UserForm_Initialize :​
Private Sub UserForm_Initialize()​
[Link] = [Link] ' Initialise
la TextBox avec la valeur du SpinButton​
End Sub​

○​ Dans spnQuantite_SpinDown et spnQuantite_SpinUp :​


Private Sub spnQuantite_SpinDown()​
[Link] = [Link]​
End Sub​

Private Sub spnQuantite_SpinUp()​
[Link] = [Link]​
End Sub​
Alternative plus simple et robuste pour SpinButton (utilise l'événement Change):​
Private Sub spnQuantite_Change()​
' S'assure que la valeur du TextBox est mise à jour avec
la valeur du SpinButton​
[Link] = [Link]​
End Sub​
(Note : Si vous utilisez spnQuantite_Change, vous n'avez pas besoin de SpinDown
et SpinUp séparément, car Change se déclenche dans les deux cas.)
○​ Dans txtQuantite_Change : (Pour permettre la saisie manuelle et la synchroniser
avec le SpinButton)​
Private Sub txtQuantite_Change()​
' Si l'utilisateur saisit manuellement, met à jour le
SpinButton​
If IsNumeric([Link]) And [Link]
<> "" Then​
Dim val As Long​
val = CLng([Link])​
If val >= [Link] And val <=
[Link] Then​
[Link] = val​
ElseIf val < [Link] Then​
[Link] = [Link]​
[Link] = [Link]​
ElseIf val > [Link] Then​
[Link] = [Link]​
[Link] = [Link]​
End If​
End If​
End Sub​

Private Sub txtQuantite_Exit(ByVal Cancel As
[Link])​
' Validation si l'utilisateur quitte le champ sans saisir
un nombre valide​
If Not IsNumeric([Link]) Or
CLng([Link]) <= 0 Then​
MsgBox "Veuillez entrer une quantité numérique
positive.", vbExclamation​
Cancel = True ' Empêche de quitter le champ​
End If​
End Sub​

○​ Dans cmdAjouterPanier_Click :​
Private Sub cmdAjouterPanier_Click()​
Dim quantite As Long​
If IsNumeric([Link]) Then​
quantite = CLng([Link])​
Else​
quantite = 0​
End If​

MsgBox "Vous avez ajouté " & quantite & " " &
[Link] & " au panier (virtuel).", vbInformation,
"Panier"​
' Ici, vous pourriez ajouter du code pour enregistrer
dans une feuille de "panier"​
End Sub​

○​ Dans cmdFermerProduit_Click :​
Private Sub cmdFermerProduit_Click()​
Unload Me​
End Sub​

5.​ Créer une macro pour afficher frmQuantiteProduit :​


Sub AfficherProduit()​
[Link]​
End Sub​

6.​ Tester : Exécutez la macro, utilisez le SpinButton et saisissez manuellement la quantité.

Exercice 10 : Utilisation de ProgressBar pour une Opération Longue


(Simulation)
Objectif : Simuler une opération longue et afficher une barre de progression pour informer
l'utilisateur.
Étapes :
1.​ Créer un nouveau UserForm :
○​ Renommez-le frmProgression.
○​ Caption = "Traitement des Données...".
○​ Supprimez les boutons de fermeture et de minimisation/maximisation du
UserForm (propriétés ShowCloseButton, ShowMinimizeButton,
ShowMaximizeButton à False si disponibles, ou gérez-les via QueryClose).
2.​ Ajouter les contrôles sur frmProgression :
○​ Label : Caption = "Chargement en cours...", lblMessage
○​ Label : Caption = "0%", lblPourcentage
○​ Frame : FrameProgress (Servira de conteneur pour la barre de progression)
○​ Label : lblProgressBar (Ce sera la barre de progression elle-même, un simple
Label dont la largeur sera ajustée)
■​ BackColor = Une couleur distincte (ex: bleu clair)
■​ SpecialEffect = 1 - fmSpecialEffectRaised (optionnel)
■​ Placez lblProgressBar à l'intérieur de FrameProgress et alignez-le sur le
bord gauche.
3.​ Écrire le code VBA :
○​ Dans frmProgression :​
Private Sub UserForm_Activate()​
' Utilise UserForm_Activate pour lancer la tâche après
l'affichage du formulaire​
' Cela permet au formulaire d'être dessiné avant de
lancer le traitement​
Call SimulerTraitementLong​
Unload Me ' Ferme le formulaire une fois le traitement
terminé​
End Sub​

Public Sub SimulerTraitementLong()​
Dim i As Long​
Dim totalEtapes As Long​
totalEtapes = 100 ' Nombre total d'étapes pour la
simulation​

[Link] = "Initialisation..."​
[Link] = "0%"​

Dim largeurFrame As Double​
largeurFrame = [Link] ' Largeur totale du
cadre de la barre​

For i = 1 To totalEtapes​
' Simuler un travail​
DoEvents ' Permet à l'interface utilisateur de se
rafraîchir​
[Link] (Now + TimeValue("[Link].01")) '
Petite pause pour visualiser la progression​

' Mettre à jour la barre de progression​
Dim pourcentage As Integer​
pourcentage = Int((i / totalEtapes) * 100)​

[Link] = (largeurFrame /
totalEtapes) * i ' Ajuste la largeur du label​
[Link] = pourcentage & "%"​

' Mettre à jour le message​
Select Case pourcentage​
Case Is < 25​
[Link] = "Chargement des
données..."​
Case Is < 50​
[Link] = "Traitement des
calculs..."​
Case Is < 75​
[Link] = "Génération des
rapports..."​
Case Else​
[Link] = "Finalisation..."​
End Select​
Next i​

[Link] = "Traitement terminé !"​
[Link] = "100%"​
DoEvents ' S'assurer que le dernier état est affiché​
[Link] (Now + TimeValue("[Link]")) ' Laisse
le temps à l'utilisateur de voir le 100%​
End Sub​

' Empêcher la fermeture du formulaire avec le bouton X
pendant le traitement​
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode
As Integer)​
If CloseMode = [Link] Then​
MsgBox "Le traitement est en cours. Veuillez
patienter.", vbInformation, "Action Impossible"​
Cancel = True ' Annule la fermeture​
End If​
End Sub​

4.​ Créer une macro pour afficher frmProgression :​


Sub LancerTraitementAvecProgression()​
[Link]​
End Sub​

5.​ Tester : Exécutez la macro et observez la barre de progression. Essayez de fermer le


formulaire avec le bouton "X" pendant le traitement.

Projets et Idées d'Extension Avancées :


●​ UserForm de connexion/authentification : Créez un UserForm avec des champs de
nom d'utilisateur et mot de passe, vérifiant ces informations par rapport à une feuille Excel
ou une base de données simple.
●​ UserForm de configuration : Un formulaire pour que l'utilisateur puisse définir des
chemins de fichiers, des paramètres d'impression, ou d'autres préférences de votre
application VBA.
●​ Graphiques dynamiques via UserForm : Un UserForm qui permet à l'utilisateur de
sélectionner des données, puis de générer ou de mettre à jour un graphique sur une
feuille Excel.
●​ Intégration de contrôles ActiveX externes : Explorez l'ajout de contrôles qui ne sont
pas par défaut dans la boîte à outils (ex: un calendrier pour la sélection de dates).
●​ Interaction avec des bases de données externes (ADO) : Si vous avez des
connaissances en SQL, créez un UserForm qui interagit avec une base de données
Access, SQL Server, etc., pour lire, ajouter, modifier ou supprimer des enregistrements.
N'oubliez pas que la pratique est la clé. N'hésitez pas à jouer avec les propriétés des contrôles,
à expérimenter différentes logiques de code et à consulter la documentation VBA dès que vous
rencontrez des difficultés.
Bonne continuation dans votre apprentissage des UserForms !

Vous aimerez peut-être aussi