Académique Documents
Professionnel Documents
Culture Documents
1
VBA-01: Programmation VBA
Propriété de l’objet :
- Name : Nom de l’objet. Sera utilisé pour la manipulation de la variable
objet
- Caption : Titre de la fenêtre
- Color : background, border, etc.
Exercice : (se référer au tutoriel programmation VBA pour les propriétés des
contrôles)
1. Modifier le nom de l’objet en « AddEtudiant»
2. Modifier le titre de la fenêtre en « Formulaire de saisie d’un étudiant »
3. Modifier les couleurs de la fenêtre à votre convenance.
4. Placer les contrôles suivants et modifier leur priorité (Name, caption)
2
VBA-01: Programmation VBA
Cet objet est composé des contrôles suivants : Intitulé, Zone de texte, Zone de
liste modifiable, bouton de commande, objet date, Bouton d’option.
Pour placer un contrôle dans l’objet UserForm, cliquer sur l’objet voulu de la
BOITE A OUTILS et le faire glisser vers l’objet UserForm.
3
VBA-01: Programmation VBA
Les contrôles placés sur un objet UserForm et l’objet UserForm lui-même sont
réceptifs aux événements utilisateurs qui les affectent.
On peut ainsi créer des procédures dites procédures événementielles, qui se
déclencheront lorsque l’événement correspondant sera repéré.
La syntaxe d’une procédure événementielle attachée à un contrôle de nom
NomContrôle (propriété NAME) et déclenchée par un événement
NomEvénement est la suivante :
Private Sub NomContrôle_NomEvénement()
...
End Sub
Dans le cas d’une procédure événementielle attachée à un objet UserForm, le
nom de l’objet UserForm (propriété NAME) n’apparaît pas dans les instructions
de déclaration de la procédure. Il est remplacé par le mot clé UserForm comme
suit :
Private Sub UserForm_Click()
…….
End Sub
4
VBA-01: Programmation VBA
Exemple :
Evènement Description
Change détecté lors de la modification de la valeur (propriété
VALUE) d’un contrôle (par exemple une zone de
texte).
Click détecté lorsque l’utilisateur clique sur un contrôle
(par
exemple un bouton de commande).
dblClick détecté lorsque l’utilisateur double-clique sur un
contrôle.
Exit Détecté quand on sort du contrôle
5
VBA-01: Programmation VBA
L’événement Initialize d’un objet UserForm est détecté lorsque l’objet UserForm
est chargé, à l’aide de la méthode Show ou de l’instruction Load.
La procédure événementielle associée à l’événement Initialize d’un objet
UserForm s’exécute avant l’affichage de l’objet et a la syntaxe suivante :
Private Sub UserForm_Initialize()
...
End Sub
Cette procédure permet d’effectuer des réglages dans l’objet UserForm avant
son chargement.
Exercice
Ecrire le code nécessaire pour affecter les valeurs “CPI1A ; CPI2A ; CI1A ; CI2A” à
la zone de liste modifiable ComboBox1, en utilisant les valeurs qui se trouvent
dans la plage de cellule A1:A4 de la feuille de calcul DIVERS.
Dans la procédure initialize du UserForm, ajouter le code suivant :
Private Sub UserForm_Initialize()
Dim i As Integer
i=1
Do Until IsEmpty(Worksheets("Divers").Range("A" & i))
Call Me.ComboBox1.AddItem(Worksheets("Divers"). _
Range("A" & i).Value)
i=i+1
Loop
End Sub
Tester la procédure à l’ouverture de l’UserForm.
6
VBA-01: Programmation VBA
Pour information : Il existe une autre méthode pour initialiser la zone de liste
modifiable ComboBox1 avec les valeurs “CPI1A ; CPI2A ; CI1A ; CI2A”, en la liant
à la plage de cellule A1:A4 de la feuille de calcul DIVERS.
Pour lier un contrôle à une plage de cellules, il faut renseigner la propriété
ROWSOURCE du contrôle avec la plage de cellules voulue (dans notre cas,
Divers!A1:A4) ou encore mieux avec le nom de la plage de cellules voulue, ce qui
suppose de nommer cette plage de cellules.
Remarque : La propriété CONTROLSOURCE permet de lier un contrôle à une
seule cellule.
Attention: Cette méthode, contrairement à la précédente, ne pourra pas
prendre en compte les éventuelles modifications faites sur le titre d’un client
(ajout ou suppression d’un titre). La zone de liste modifiable ComboBox1 est liée
à la plage de cellule fixe A1:A4 de la feuille de calcul DIVERS.
L'évènement Initialize se produit au chargement d'un UserForm, l'évènement
QueryClose se produit à sa fermeture.
Nous avons créé un objet UserForm pour saisir de nouveaux étudiants, et,
ouvert et fermé cet objet. Cependant, si l’utilisateur saisit des données dans
l’objet UserForm, ces dernières ne sont pas recopiées dans liste de données
EXCEL correspondante.
La mise à jour de la liste de données EXCEL correspondant aux données de
l’étudiant doit être faite lorsque l’utilisateur clique sur le bouton enregistrer. Elle
consiste à insérer une nouvelle ligne dans la liste de données et à recopier les
valeurs des contrôles de l’objet UserForm dans les bonnes cellules de la nouvelle
ligne.
Pour récupérer les valeurs des contrôles ou les modifier, on utilise Text
Ex : Matricule.Text = 12321 ou Range(« A1 »).value = Matricule.Text
Exercice
7
VBA-01: Programmation VBA
Insérer une nouvelle ligne dans la feuille étudiant des données saisies dans le
formulaire.
Pour cela, nous avons besoin de connaitre la dernière ligne vide du tableau
pour insérer les valeurs. Nous pouvons utiliser la méthode end de Range :
Range("A1").End(Direction).Select
xlDown : Down
xlUp : up
xlToLeft : left
xlToRight : right
Ex : DernLigne = Range("A" & Rows.Count).End(xlUp).Row
Solution:
8
VBA-01: Programmation VBA
Exercice
Ajouter un bouton modifier étudiant qui permet d’ouvrir la même fenêtre mais
avec les contrôles pré-remplie par les données de la ligne sélectionnée.
Pour gérer les listes des étudiants dans un formulaire, il faut utiliser le contrôle
« ListView ». Assurez-vous que ce contrôle est bien actif dans ou l’activer via les
contrôles supplémentaires. Et faites glisser le contrôle dans le formulaire.
L’objectif étant de remplir cette liste avec les informations des étudiants. Le
remplissage de la liste se fait en code VBA.
Pour commencer :
Chaque ligne d'une ListView peut être définie en 2 parties:
ListView1.ListItems(x) spécifie la ligne x et la 1ere colonne de cette ligne.
9
VBA-01: Programmation VBA
.ListItems(1).ListSubItems.Add , , "prenom1"
.ListItems(1).ListSubItems.Add , , "date de naissance 1"
.ListItems(2).ListSubItems.Add , , "prénom 2"
.ListItems(2).ListSubItems.Add , , "date de naissance 2"
Clear : ListView1.ListItems.Clear
Count : ListView1.ListItems.Count
Tri de la liste :
Private Sub ListView1_ColumnClick(ByVal ColumnHeader As MSComctlLib.ColumnHeader)
ListView1.Sorted = False
ListView1.SortKey = ColumnHeader.Index - 1
10
VBA-01: Programmation VBA
ListView1.SortOrder = lvwDescending
Else
ListView1.SortOrder = lvwAscending
End If
ListView1.Sorted = True
End Sub
Exercice :
Afficher dans un objet userForm, une liste permettant de lister tous les
étudiants de la feuille 1.
Private Sub UserForm_Initialize()
Dim i, derniligne As Integer
derniligne = Range("A" & Rows.Count).End(xlUp).Row
'----- remplissage ListView------------------------
With ListView1
'Définit le nombre de colonnes et Entêtes
'Définir les entêtes, donc les nombres de colonnes
With .ColumnHeaders
'Supprime les anciens entêtes
.Clear
'Ajoute 3 colonnes en spécifiant le nom de l'entête
'et la largeur des colonnes
.Add , , "Nom", 80
.Add , , "Prénom", 50
.Add , , "Date de naissance", 120
End With
'Remplissage 1ere colonne
For i = 3 To derniligne
ListView1.ListItems.Add, , Range("A" & i).Value
Next i
'Remplissage colonnes 2 et 3
For i = 3 To derniligne
ListView1.ListItems(i - 2).ListSubItems.Add , , Range("B" & i).Value
ListView1.ListItems(i - 2).ListSubItems.Add , , Range("C" & i).Value
Next i
End With
'Spécifie l'affichage en mode "Détails"
ListView1.View = lvwReport
End Sub
11
VBA-01: Programmation VBA
Exercice :
12