|
Sommaire > 4. Création d'une feuille VBA |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
4. Création d'une feuille VBALes feuilles VBA sont des zones sur lesquelles on place des contrôles tels que des cases à cocher, des boutons à options, des zones de texte, des zones de liste, des boutons de commande, ... . Ces zones forment une interface qui permet une interaction simple et conviviale entre l'utilisateur final et le programme VBA. Les actions de l'utilisateur, appelées événements, comme un clic de souris ou la modification de la valeur d'une zone de texte, sont automatiquement repérées par le programme. On associe du code à un événement donné pour que ce code s'exécute lorsque l'événement correspondant survient. On parle alors de procédure événementielle. L'exploitation des feuilles consiste à fournir les informations (entrées par l'utilisateur sur la feuille VBA) à une procédure de code. Dès que les informations fournies ont été validées par l'utilisateur, elles sont exploitées par le programme. 4.1. Calculette en EUROCet exemple peut fonctionner tel quel dans Excel, Word ou PowerPoint. Moyennant quelques adaptations, on peut également l'utiliser dans un formulaire d'Access. 4.1.1. La fenêtre « UserForm »Le développement de la feuille se fait dans la fenêtre « UserForm » de Visual Basic Editeur ou VBE. Pour créer une nouvelle feuille :
4.1.2. Contrôles standards de la boîte à outils :
4.1.3. Placement des contrôles sur la feuille :
Voici les différents contrôles utilisés et leurs propriétés :La propriété « Name » est le nom utilisé dans le code pour faire référence au contrôle et la propriété « Caption » correspond au libellé du contrôle. Les valeurs de ces propriétés sont indiquées soit dans la fenêtre « Propriétés » soit par du code, par exemple : lblDevise1.Caption = "BEF" La propriété « Value » détermine la valeur d'un contrôle. Elle accepte des valeurs qui varient d'un contrôle à l'autre : elle peut correspondre à un état (activé ou non) ou à un contenu (numérique ou chaîne de caractères). Dans le cas des cases à option, on détermine le bouton qui sera actif au démarrage de la feuille VBA : le bouton « en EURO » dans notre exemple. La propriété « Default » indique si un contrôle « Bouton de commande » est ou non le bouton par défaut de la feuille. Lorsqu'un bouton de commande est le bouton par défaut, la frappe de la touche « Entrée » déclenche l'événement « click » du bouton, à condition qu'aucun autre bouton de commande n'ait le « focus ». Le contrôle qui a le focus est le contrôle réceptif aux événements utilisateurs : soit par la souris ou le clavier. La propriété « Cancel » indique si un contrôle « Bouton de commande » est ou non le bouton « Annuler » de la feuille. Lorsqu'un bouton de commande est le bouton « Annuler », la frappe de la touche « Esc » déclenche l'événement « click » du bouton, qu'il ait ou non le focus. La propriété « TextAlign » spécifie la façon dont un texte est aligné dans un contrôle. Dans notre exemple, les valeurs des contrôles « txtMontant » et « lblRésultat » sont alignées à droite (3 - fmTextAlignRight).
4.1.4. Les procédures événementiellesElles peuvent être générées de différentes façons. Elles répondent toujours à la même syntaxe : Private Sub Contrôle_Evénement()
Instructions
End Sub
Pour générer une procédure événementielle :
Private Sub cmdCalculer_Click() End Sub La zone de liste déroulante affiche l'ensemble des événements qui peuvent être détectés sur le contrôle sélectionné.
Voici le code à introduire :
Private Sub UserForm_Activate()
txtMontant.SetFocus
End Sub
Private Sub txtMontant_Enter()
With txtMontant
.SelStart = 0
.SelLength = Len(txtMontant)
End With
End Sub
Private Sub txtMontant_AfterUpdate()
Calcul
End Sub
Private Sub cmdCalculer_Click()
Calcul
txtMontant.SetFocus
End Sub
Private Sub cmdQuitter_Click()
Unload Me
End Sub
Private Sub optEuro_Click()
lblDevise1.Caption = "BEF"
lblDevise2.Caption = "EUR"
Calcul
End Sub
Private Sub optBEF_Click()
lblDevise1.Caption = "EUR"
lblDevise2.Caption = "BEF"
Calcul
End Sub
Sub Calcul()
If IsNumeric(txtMontant) Then
If optEuro Then
lblRésultat.Caption = Arrondi(txtMontant / 40.3399, 2)
Else
lblRésultat.Caption = Arrondi(txtMontant * 40.3399, 0)
End If
Else
MsgBox "Le txtMontant n'est pas numérique !"
txtMontant.SetFocus
End If
End Sub
' Arrondi d'Excel
' (inutile si la calculette est dans Excel)
' Nombre = le nombre à arrondir
' NoChiffres = le nombre de décimales (doit être >= 0)
Function Arrondi(Nombre As Double, _
Optional NoChiffres As Byte) As Double
If IsMissing(NoChiffres) Then NoChiffres = 0
If Not IsNumeric(Nombre) Or _
Not IsNumeric(NoChiffres) Then Exit Function
NoChiffres = Abs(NoChiffres)
Arrondi = Nombre * 10 ^ NoChiffres + 0.5
Arrondi = Int(Arrondi) / 10 ^ NoChiffres
End Function
4.1.5. Appel de feuille VBAPour pouvoir utiliser cette calculette, il faut créer une macro dans une feuille de module.
Sub Calculette()
frmCalculette.Show
End Sub
4.2. Utilisation du « contrôle calendrier »
4.2.1. La fenêtre « UserForm »Créer deux nouvelles feuilles et modifier les propriétés :
4.2.2. Ajout d'un contrôle de la boîte à outils :Pour ajouter l'outil « Calendrier »
4.2.3. Placement des contrôles sur la feuille :Voici les différents contrôles utilisés et leurs propriétés :La propriété « ControlTipText » spécifie le texte qui apparaît lorsque l'utilisateur maintient brièvement le pointeur de la souris sur un contrôle sans cliquer. Feuille FrmSaisieDate
Feuille FrmCalendrier
4.2.4. Les procédures événementiellesVoici le code à introduire dans la feuille FrmSaisieDate : Private Sub UserForm_Initialize()
txtDate.Value = Format(Date, "dd/mm/yyyy")
UserForm_Activate
End Sub
Private Sub UserForm_Activate()
With txtDate
.SetFocus
.SelStart = 0
.SelLength = Len(txtDate)
End With
End Sub
Private Sub txtDate_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
frmCalendrier.Show
End Sub
Private Sub cmdOK_Click()
Selection = DateValue(txtDate.Value)
Unload Me
End Sub
Private Sub cmdAnnuler_Click()
Unload Me
End Sub
Voici le code à introduire dans la feuille FrmCalendrier :
Private Sub UserForm_Initialize()
Calendrier.Today
End Sub
Private Sub Calendrier_DblClick()
cmdChDate_Click
End Sub
Private Sub cmdChDate_Click()
frmSaisieDate.txtDate.Value = Calendrier.Value
Unload Me
End Sub
Private Sub cmdAnnuler_Click()
Unload Me
End Sub
4.2.5. Appel de feuille VBA
Sub SaisieDate()
frmSaisieDate.Show
End Sub
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Sommaire - Début de cette page |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||