Formulaire VBA
Projet VBA
Objectif
Créer dynamiquement un classeur de frais (frais_2010.xlsx) à partir d'un formulaire Excel.
Création du formulaire
Dans l'éditeur VBA (Alt + F11), menu Insertion / UserForm
Dans la fenêtre "Propriétés" (menu Affichage / Fenêtre Propriétés), renommer le formulaire (via la propriété Name) en "frm_nouveau_classeur_de_frais" et donnez-lui le titre (propriété Caption) "Nouvelle fiche de frais".
Rajoutez les 4 contrôles suivant (Affichage Boîte à outils) :
◊ Un intitulé (Label) avec la propriété Caption "Année"
◊ Une zone de texte (TextBox) avec la propriété Name : "txt_annee"
◊ Un bouton de commande (CommandButton) avec la propriété Caption "Ok", la propriété Name "btn_ok" et la propriété Default à True (lié à la touche "Entrée").
◊ Un bouton de commande (CommandButton) avec la propriété Caption "Annuler" et la propriété Name "btn_annuler"
Attention : l'ordre d'insertion des contrôles implique la propriété "TabIndex".
Le formulaire "frm_nouveau_classeur_de_frais"
Code du formulaire
Double cliquer sur les boutons "Ok" et "Annuler" et saisissez ce code dans les procédures évennementielles qui sont apparue:
'Code du bouton "Annuler"
Private Sub btn_annuler_Click()
frm_nouvelle_fiche_de_frais.Hide
End Sub
Private Sub btn_annuler_Click()
frm_nouvelle_fiche_de_frais.Hide
End Sub
'Code du bouton "Ok"
Private Sub btn_ok_Click()
'On test la saisie - Code à rajouter plus tard...
If txt_annee.Value = "" Then
MsgBox "Merci de saisir une année", vbCritical, "Données manquantes"
txt_annee.SetFocus
ElseIf IsNumeric(txt_annee.Value) = False Then
MsgBox "Saisie incorrecte", vbCritical, "Données incorrectes"
txt_annee.Value = "" 'Vide le champ
txt_annee.SetFocus
'Si vous voulez obliger une saisie :
'If txt_annee.TextLength >= 4 Then... ' Voir aussi la propriété MaxLength
Else
MsgBox "Création d'un classeur de frais pour l'année " & _
txt_annee.Value, vbInformation + vbOKOnly, "CREATION"
'Appel de procédure distante (voir code du module "Gestion_de_frais")
proc_nouveau_classeur
'Appel de procédure distante (à réaliser plus tard)
proc_recapitulatif_annuel
'Appel de procédure distante (à réaliser encore plus tard)
proc_ajoute_12_nouvelles_feuilles
'Masque le formulaire
frm_nouvelle_fiche_de_frais.Hide 'Ou bien Unload Me
Enf If 'ferme le If du début
End Sub
Private Sub btn_ok_Click()
'On test la saisie - Code à rajouter plus tard...
If txt_annee.Value = "" Then
MsgBox "Merci de saisir une année", vbCritical, "Données manquantes"
txt_annee.SetFocus
ElseIf IsNumeric(txt_annee.Value) = False Then
MsgBox "Saisie incorrecte", vbCritical, "Données incorrectes"
txt_annee.Value = "" 'Vide le champ
txt_annee.SetFocus
'Si vous voulez obliger une saisie :
'If txt_annee.TextLength >= 4 Then... ' Voir aussi la propriété MaxLength
Else
MsgBox "Création d'un classeur de frais pour l'année " & _
txt_annee.Value, vbInformation + vbOKOnly, "CREATION"
'Appel de procédure distante (voir code du module "Gestion_de_frais")
proc_nouveau_classeur
'Appel de procédure distante (à réaliser plus tard)
proc_recapitulatif_annuel
'Appel de procédure distante (à réaliser encore plus tard)
proc_ajoute_12_nouvelles_feuilles
'Masque le formulaire
frm_nouvelle_fiche_de_frais.Hide 'Ou bien Unload Me
Enf If 'ferme le If du début
End Sub
' Procédure évènementielle de remize à zéro des champs du formulaire (facultative)
' A réaliser sur la feuille de code du formulaire en utilisant les menus d'évènement
Private Sub UserForm_Activate()
txt_annee.Value = "" 'Nettoyage du champ Année
txt_annee.SetFocus 'Met le focus dans le champ
'Remise par defaut du bouton ok (si utilisation du bouton Annuler)
btn_ok.Default = True
End Sub
' A réaliser sur la feuille de code du formulaire en utilisant les menus d'évènement
Private Sub UserForm_Activate()
txt_annee.Value = "" 'Nettoyage du champ Année
txt_annee.SetFocus 'Met le focus dans le champ
'Remise par defaut du bouton ok (si utilisation du bouton Annuler)
btn_ok.Default = True
End Sub