Macros-commandes VBA/Travail pratique/Construire une interface graphique
Apparence
Chacun de ces travaux pratiques utilise une interface graphique pour la saisie des données par l'utilisateur et l’affichage du résultat, et suppose donc l’utilisation d'un environnement de développement hébergeant Microsoft Visual Basic.
Travail Pratique N°1
[modifier | modifier le wikicode]Construire une application conforme au modèle ci-dessous permettent de vérifier qu'un nombre entier saisi est pair ou impair.
Voir Solution
Indications:
Remarque : Sauf à utiliser "Option Explicit", la ligne contenant "Dim" n’est pas obligatoire. Il est néanmoins de bonne pratique de déclarer toutes les variables utilisées, ne fût ce que pour des questions de lisibilité du code.
- Commencer un nouveau projet ;
- L’idée du projet est de saisir un nombre dans une zone de saisie et d’afficher le résultat dans un label après un clic sur le bouton.
- Placer deux contrôles de type label (dont un nommé
lblresultat
pour afficher le résultat), un textbox (nommétextsaisie
) et un bouton de commande (nommébtnverifier
) ;
Dans notre projet, un clic sur le bouton de commande btnverifier
exécute un code qui vérifie la parité du nombre saisi dans l’objet textsaisie
. Donc l’évènement est le clic de btnverifier
. D’où le code correspondant :
Private Sub btnverifier_Click()
Dim a As Integer, b As Integer
a = Val(txtsaisie)
b = a Mod 2
If b = 0 Then
lblresultat.Caption = "Le nombre " & a & " est pair"
Else
lblresultat.Caption = "Le nombre " & a & " est impair"
End If
End Sub
Travail Pratique N°2
[modifier | modifier le wikicode]Construire une application conforme au modèle ci-dessous permettant de vérifier qu'un nombre entier saisi est premier.
- Commencer un nouveau projet ;
- L’idée du projet est de saisir un nombre dans une zone de saisie et d’afficher sa primalité dans un label après un clic sur le bouton.
- Placer deux contrôles label, un textbox et un bouton de commande ;
Voir Solution
Dans notre projet un clic sur le bouton de commande exécute un code qui vérifie la primalité du nombre saisie dans l’objet
textsaisie
. Donc l’évènement est le clic. D’où le code correspondant :
Private Sub Cmd1_Click()
Dim N, m, c
N = Val(Text1)
m = Int(Sqr(N))
If N = 2 Or N = 3 Or N = 1 Then
lbl3.Caption = N & " EST PREMIER"
Else
For i = 2 To m
c = N Mod i
If c = 0 Then
lbl3.Caption = N & " N'EST PAS PREMIER"
Exit Sub
End If
Next i
lbl3.Caption = N & " EST PREMIER"
End If
End Sub
Travail Pratique N°3
[modifier | modifier le wikicode]- Commencer un nouveau projet ;
- L’idée du projet est de créer une fonction qui renvoie le libellé du jour d'une date donnée, cette fonction doit être intégrée dans les fonctions disponibles d'EXCEL
- Placer un contrôle label ;
Voir Solution
Dans notre projet la fonction libelledujour2 reçoit une date en paramètre et renvoie une chaine de caractère contenant le libellé du jour. Cette fonction VBA est utilisable directement parmi les fonctions EXCEL, un objet label lJour pourra être initialisé de la façon suivante : lJour = libelleDuJour2("25/12/2020"). Voici le code correspondant à la procédure :
Function libelleDuJour2(madate As Date) As String
'
' libelleDuJour fonction qui reçoit une date et une constante vbMonday (indiquant que la semaine commence le lundi comme en France)
' et retourne un libellé français correspondant à ce jour
'
Dim numjour As Integer
numjour = Weekday(madate, vbMonday)
Select Case numjour
Case 1: libelleDuJour2 = "Lundi"
Case 2: libelleDuJour2 = "Mardi"
Case 3: libelleDuJour2 = "Mercredi"
Case 4: libelleDuJour2 = "Jeudi"
Case 5: libelleDuJour2 = "Vendredi"
Case 6: libelleDuJour2 = "Samedi"
Case Else: libelleDuJour2 = "Dimanche"
End Select
End Function
Travail Pratique N°4
[modifier | modifier le wikicode]- Commencer un nouveau projet ;
- L’idée du projet est de créer une procédure qui écrit le numéro et le libellé du mois d'une date saisie, cette procédure écrit dans les cellules A2, B2, C2 d'EXCEL
- Placer 3 contrôles labels ;
Voir Solution
Dans notre projet la procedure libelleDuMois fait saisir une date et écrit en A2 la date saisie, en B2 le numéro du mois puis en C2 le libellé du mois, les objets label pourront être initialisés en même temps. Voici le code correspondant :
Sub libelleDuMois()
' déclarations des variables
Dim reponse As Variant
Dim dateSaisie As Date
Dim numeroMois As Integer
Dim libelleMois As String
' déclaration du tableau
Dim listeMois(12) As String 'Tableau de 12 "cases"
'Remplissage du tableau
listeMois(1) = "Janvier"
listeMois(2) = "Février"
listeMois(3) = "Mars"
listeMois(4) = "Avril"
listeMois(5) = "Mai"
listeMois(6) = "Juin"
listeMois(7) = "Juillet"
listeMois(8) = "Août"
listeMois(9) = "Septembre"
listeMois(10) = "Octobre"
listeMois(11) = "Novembre"
listeMois(12) = "Decembre"
' saisie de la date par l'utilisateur
reponse = InputBox("Entrer votre date ", "Dates", "07/05/2015")
If IsDate(reponse) Then
' si la date saisie est une date calculer et afficher
dateSaisie = reponse
numeroMois = Month(dateSaisie)
libelleMois = listeMois(numeroMois)
lblMoisDate.Caption = dateSaisie
Range("A2") = dateSaisie
lblMoisNum.Caption = numeroMois
Range("B2") = numeroMois
lblMoisLib.Caption = libelleMois
Range("C2") = libelleMois
Else
' si la date saisie n’est pas une date afficher l'erreur
Range("A2") = "Saisie non calendaire"
Range("B2") = "Calcul impossible"
Range("C2") = "Calcul impossible"
End If
End Sub
Travail Pratique N°5
[modifier | modifier le wikicode]- Commencer un nouveau projet ;
- L’idée du projet est de créer un combo box procédure qui affiche à l'utilisateur tous les noms de chefs contenus dans une feuille EXCEL
Voir Solution
Dans notre projet la procedure UserForm_Initialize parcourt les noms des 6 chefs trouvés dans la feuille Chefs et les affiche via une combo box dès l'ouverture de la fenêtre formulaire. Voici le code correspondant :
Private Sub UserForm_Initialize()
'
' Cette procédure s'exécute dès que le formulaire s'affiche
'
Dim i As Integer
' se positionner sur la feuille Chefs
Worksheets("Chefs").Activate
' vider la combo box
cbChefs.Clear
' remplir la combo box de tous les chefs saisis dans la feuille Chefs
For i = 1 To 6
cbChefs.AddItem ActiveSheet.Cells(i, 1)
Next i
End Sub
Travail Pratique N°6
[modifier | modifier le wikicode]Cette section est vide, insuffisamment détaillée ou incomplète. Votre aide est la bienvenue ! Comment faire ?