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 » à la boîte à outils :
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 VBASub SaisieDate() frmSaisieDate.Show End Sub |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Sommaire - Début de cette page |