Академический Документы
Профессиональный Документы
Культура Документы
net - le 16/06/2015
Je vous rappelle que le code VBA utilis dans le tutoriel en question se trouve chez Excel-Plus
puisquil sagit dun article invit. la fin de ce dernier, vous pouvez copier-coller le code pour
navoir aucune erreur.
Pour suivre ces explications, je vous invite vous rendre dans la fentre Visual Basic dans
longlet Dveloppeur (si vous ne savez pas comment lafficher, je vous invite revoir le dbut
Dans notre exemple, nous avons ensuite ajout un UserForm et un Module. Les premiers se
trouvent toujours dans un dossier nomm Feuilles et les seconds dans un dossier nomm
Modules.
Cliquez droit sur UserForm1 de lExplorateur de projets > Code. Javais plac un
commentaire devant chaque vnement tel que linitialisation du formulaire (son ouverture), le
changement au niveau de la ComboBox et les clics sur les diffrents boutons. Ces commentaires
sont en vert et commencent toujours par une apostrophe (), cest--dire que tout ce qui se trouve
derrire une apostrophe ne sera jamais interprt dans votre code. Si vous voulez retirer une
action temporairement, au lieu de leffacer, vous pouvez tout simplement la mettre en
commentaire.
Je navais pas modifi les noms des diffrents contrles (ComboBox1, TextBox1), mais si
vous le faites noubliez pas de le modifier dans luserform et dans le code.
Mon code commence par Option Explicit ce qui veut dire que je vais devoir dclarer toutes mes
variables. De cette manire, si vous ne dclarez pas une variable, le mode dbug que nous allons
voir juste aprs, vous le signalera et vous vitera de dcouvrir des erreurs une fois que votre
programme sera termin et quil contiendra normment de donnes. Si cette ligne vous gne
ou que vous loubliez rgulirement, vous pouvez vous rendre dans le menu Outils > Options
et cocher la case Dclaration des variables obligatoire dans longlet diteur :
Cette case sera coche par dfaut pour tous vos nouveaux projets.
Il est ensuite suivi de Dim Ws As Worksheet qui est une dclaration de variable que jaurais pu
placer aprs Private Sub UserForm_Initialize(). Mais une dclaration de variable doit toujours
se trouver avant lutilisation de son nom. Cette dclaration va me servir utiliser mon onglet
Clients.
Nous avons ensuite un bloc dinstruction qui contient une boucle qui indique que dans la
ComboBox1, nous voulons rcuprer partir de la 2e ligne (la premire tant la ligne de titre)
toutes les cellules se trouvant dans la colonne A de longlet Clients. Cette mthode est prfrable
Range("A65536") que nous allons voir juste aprs, car ici nous allons partir de la dernire
cellule de longlet qui tait la 65 536e sur les versions antrieures 2007, mais a augment
depuis, puis nous remontons jusqu la premire cellule non vide. End(xlUp) est prfrable, car
Article crit par Lydia Provin du blog
Votre Assistante : http://www.votreassistante.net
3
si nous partions du haut et quune cellule tait vide dans le tableau, le programme ne prendrait
pas en compte les suivantes. Comme il sagit dune boucle, si vous lancez le mode dbug, vous
verrez que laction se rpte le nombre de fois ncessaire pour afficher tous les items (ici, 20 fois
pour les 20 lignes du tableau).
En ralisant ce tutoriel, je me suis aperue que certaines choses ntaient pas ncessaires dans
mon code comme :
For I = 1 To 7
Me.Controls("TextBox" & I).Visible = True
Next I
Il sagit dune boucle pour les 7 TextBox (do lintrt de modifier ce chiffre si vous en ajoutez
ou supprimez) qui va les rendre visibles Or, elles sont, par dfaut, visibles. Par la mme
occasion, la dclaration de I nest plus indispensable.
Donc
si
ce
code
tait
refaire,
je
supprimerais
cette
boucle
ainsi
que
Je fais ensuite une boucle sur toutes les TextBox (7) pour rcuprer toutes les donnes dans
chaque contrle. Chaque contrle (du 1er au 7e) sera gal sa ligne et sa colonne dans longlet.
Je nai pas cr de boucle pour la ComboBox2 puisquil ny avait quune ComboBox.
Article crit par Lydia Provin du blog
Votre Assistante : http://www.votreassistante.net
4
On peut faire en sorte que notre liste droulante se mette jour lorsque lon ajoute un numro
client, mais comme laction devra tre utilise aprs confirmation de lajout dun client, on va
lajouter dans lvnement suivant.
Jajoute ensuite une condition grce la fonction If qui est si je rponds Oui mon MsgBox
qui est une bote de dialogue qui me demandera Confirmez-vous linsertion de ce nouveau
contact ?, qui contiendra les boutons Oui et Non et qui aura pour titre Demande de confirmation
dajout, alors on va effectuer laction qui se trouve, ici, avant End If.
Personnellement, je rajouterais :
Else
' Rien ou Exit Sub (puisque de toute faon linstruction est termine aprs)
avant End If pour plus de clart, mais a fonctionne quand mme sans.
Si vous souhaitez mettre jour la liste droulante aprs ajout, ajouter le code suivant :
Dim J As Long
Dim I As Integer
ComboBox1.Clear
Set Ws = Sheets("Clients") Correspond au nom de votre onglet dans le fichier Excel
With Me.ComboBox1
Article crit par Lydia Provin du blog
Votre Assistante : http://www.votreassistante.net
5
Pour modifier cette proprit, cliquez sur la ComboBox1 en mode Afficher lobjet (clic droit sur
lUserForm1 dans lExplorateur de projets) et, dans le panneau Proprits, recherchez la
ligne MatchEntry et slectionnez loption qui vous intresse :
Cette proprit peut tre ajoute via le code en ajoutant cette ligne dans linitialisation du
formulaire par exemple (le code remplace la proprit) :
ComboBox1.MatchEntry = fmMatchEntryNone
Attention : cette proprit ne fonctionne pas sur Mac et provoque une erreur.
modifi avec longlet Format) puis en cliquant droit dessus > Affecter une macro. Une fois
que la bote de dialogue des macros est ouverte, il vous suffit de slectionner la macro
correspondante au lancement du formulaire.
UserForm1.Show affiche le formulaire UserForm1. tant donn que je navais pas chang le
nom du formulaire, cest donc le nom de base, les formulaires suivants seraient UserForm2,
UserForm3 sauf si vous les renommez.
vbModeless permet douvrir le formulaire en non modal, cest--dire que vous pourrez cliquer
en dehors du formulaire, contrairement vbModal o un clic en dehors du formulaire est
impossible tant que celui-ci est ouvert. vbModal nest pas utile crire puisque cest le
fonctionnement pas dfaut.
Enfin, vous pouvez parfois avoir une erreur dexcution sur la ligne affichant le formulaire dans
le module. Si le nom de votre formulaire est bien saisi, le problme vient surement de
linitialisation du formulaire dans le code de lUserform.
Pour lancer ce mode, dans la fentre VBA, cliquez sur Dbogage > Compiler suivi
gnralement de VBAProject qui est le nom donn par dfaut votre projet. Il peut tre modifi
en cliquant droit sur VBAProject (Le nom de votre fichier avec son extension) dans la fentre
Projet > Proprits de VBAProject. Dans le champ Nom du projet, vous pouvez modifier le
nom par dfaut.
Une fois le mode lanc, sil ne se passe rien, cest que votre code est correct. Dans le cas
contraire, une fentre souvre avec lerreur. Si par exemple, je supprime la ligne de dclaration
de J dans linitialisation du formulaire (Dim J As Long) et que je lance le mode dbug, jai bien
lerreur de variable non dfinie.
Pour terminer, nhsitez pas voir ou revoir le tutoriel Comment vider (effacer) un userform
aprs validation sur Excel ? utilisant le mme formulaire de saisie.