Manipulations de base avec les formulaires

Récuperer des données de la feuille pour les afficher dans le formulaire

Dans l'exemple précédent (second formulaire) nous avons vu comment saisir des données dans un formulaire pour les entrer dans la feuille de calcul.
Il est cependant très souvent utile de faire aussi l'inverse :

  • Pour permettre de corriger des données d'une feuille de calcul via une interface prédéfinie
  • Pour remplir des listes de choix affichées dans le formulaire à partir de données stockées dans la feuille.

Initialisation du formulaire : affecter des valeurs à des contrôles avant leur affichage

Prenons un exemple très simple : dans votre formulaire, ajoutez un Contrôle label (étiquette). Nommez le (propriété Name) lblTitre
Dans la feuille de calcul, tapez en D1 "merci d'entrer vos coordonnées"
Nous allons faire en sorte que lorsque vous demanderez l'affichage du formulaire le texte (caption) qui s'affiche dans votre label soit celui de cette cellule D1.
Les instructions nécessaires sont à placer dans une macro particulière, qui se déclenche à l'initialisation du formulaire. Elle est toujours nommée UserForm_Initialize, quel que soit le nom du formulaire.

Allez dans le module VBA associé à votre userform. Avec les deux menus du haut sélectionnez Userform_Initialize ce qui crée une macro vide correspondante.
Tout ce qui sera écrit dans cette macro sera lu et exécuté avant l'affichage du userform par la méthode show. C'est donc ici que l'on va remplir les listes, affecter des valeurs par défaut à des textbox ou dans notre exemple mettre un texte dans notre intitulé lblTitre, ce que fait la macro ci-dessous :

Private Sub UserForm_Initialize()
LblTitre.Caption = Sheets(1).Range("D1").Value
End Sub

Suivre le déroulement de la macro ; déverminage

Ceci nous permet de mettre un tout petit peu les doigts dans la mécanique du userform pour suivre ce qui se passe quand dans la feuille de calcul vous cliquez sur le bouton qui lance le userform.
Pour le savoir, on peut suivre les instructions pas à pas :
Le bouton déclenche la macro lancefrmCoordonnées. Allez dans VBA et placez le pointeur n'importe ou dans cette macro (qui est dans le module associé à la feuille 1 puisque ce n'est pas un bouton du formulaire mais un bouton de la feuille) puis appuyez sur la touche F8. Ceci vous met en lecture pas à pas. Chaque appui sur F8 déplace le pointeur et la ligne en cours de lecture est surlignée en jaune. En plaçant le pointeur dans cette ligne, vous pouvez suivre la valeur des variables. Ainsi la valeur affectée à lblTitre est initialement label3 (valeur affectée par défaut à ce label puisqu'il est le 3° créé dans ce userform après les labels noms et prénoms) après avoir appuyé encore une fois sur F8 vous voyez qu'il contient maintenant le texte de la cellule D1. N'hésitez pas à suivre de la sorte le déroulement de vos macros quand le résultat n'est pas conforme à ce que vous attendez.
Petite astuce: fermez tous les fenêtres autres qu'excel, ouvrez VBA (alt+F11) clic droit sur la barre des tâches Windows, Mosaïque verticale
vous avez maintenant les 2 fenêtres visibles et en activant vba (en cliquant dans le code puis F8) vous pouvez contrôler visuellement ce que déclenche votre code sur l'interface

Afficher un userform dès l'ouverture du classeur

Dans l'exemple précédent, nous avons mis un bouton sur la feuille 1 pour lancer l'affichage du formulaire. Mais on peut aussi lancer le userform dès l'ouverture du classeur et se passer ainsi du bouton.
Faites un double clic sur le module ThisWorkbook dans l'éditeur VBA dans la fenetre "Projet". Dans la liste deroulante de gauche de la fenetre d'edition, choisissez "workbook" et dans celle de droite "open" (ça se fait tout seul car open est la méthode ou l'événement associé par défaut à workbook). C'est dans cette macro que l'on met les instructions d'affichage du formulaire:

Private Sub Workbook_Open()
frmCoordonnées.Show
End Sub

Mot clef associé à cette page :

Nouveau

2 Nouvelles pages ajoutées ce mois-ci dont :

  • 2 Nouvelles annonces

Mises à jour

5 pages modifiées ce mois-ci dont :