Votre Assistante : http://www.votreassistante.net - le 16/06/2015 Article écrit

Votre Assistante : http://www.votreassistante.net - le 16/06/2015 Article écrit par Lydia Provin du blog Votre Assistante : http://www.votreassistante.net 1 Explication du code VBA utilisé dans le tutoriel Créer un formulaire personnalisé pour saisir des données sur Excel Suite aux nombreuses questions qui ont suivi après la publication du tutoriel Créer un formulaire personnalisé pour saisir des données sur Excel, j’ai décidé de réaliser une sorte de suite afin d’expliquer le code utilisé. Je n’avais pas expliqué le code lors de ce tutoriel, car c’était ma première expérience du langage VBA et j’ai donc testé différentes choses jusqu’à arriver au résultat escompté, mais sans vraiment savoir pourquoi. J’ai commencé à l’apprendre grâce à l’élaboration de ce cours, puis des commentaires qui ont suivi. Désormais, la création de formulaire ou autre en langage VBA fait partie des prestations que je propose. Si vous n’avez aucune connaissance en VBA, je vous conseille fortement de commencer par un tutoriel tel que celui de la création d’un formulaire de saisie de coordonnées afin de vous mettre le pied à l’étrier :). Je vous rappelle que le code VBA utilisé dans le tutoriel en question se trouve chez Excel-Plus puisqu’il s’agit d’un article invité. À la fin de ce dernier, vous pouvez copier-coller le code pour n’avoir aucune erreur. Pour suivre ces explications, je vous invite à vous rendre dans la fenêtre Visual Basic dans l’onglet Développeur (si vous ne savez pas comment l’afficher, je vous invite à revoir le début du tutoriel de création) > Visual Basic . Explication du code de l’UserForm1 : Dans la fenêtre de l’Explorateur de projet (si elle n’apparaît pas, cliquez sur Affichage > Explorateur de projets ou faites Ctrl + R), vous avez par défaut un dossier Microsoft Excel Objets qui contient tous vos onglets et ThisWorkbook. Si vous souhaitez créer une action sur double-clic d’une cellule dans un de vos onglets, vous écrirez le code dans l’onglet correspondant, si vous souhaitez pouvoir effectuer cette action dans n’importe quel onglet, vous l’écrirez dans ThisWorkbook qui peut être aussi utilisé pour faire une action à l’ouverture d’un fichier comme nous l’avons fait dans le tutoriel Créer un message d’alerte à l’ouverture d’Excel. Votre Assistante : http://www.votreassistante.net - le 16/06/2015 Article écrit par Lydia Provin du blog Votre Assistante : http://www.votreassistante.net 2 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 l’Explorateur de projets > Code. J’avais placé un commentaire devant chaque évènement tel que l’initialisation du formulaire (son ouverture), le changement au niveau de la ComboBox et les clics sur les différents boutons. Ces commentaires sont en vert et commencent toujours par une apostrophe (‘), c’est-à-dire que tout ce qui se trouve derrière une apostrophe ne sera jamais interprété dans votre code. Si vous voulez retirer une action temporairement, au lieu de l’effacer, vous pouvez tout simplement la mettre en commentaire. Je n’avais pas modifié les noms des différents contrôles (ComboBox1, TextBox1…), mais si vous le faites n’oubliez pas de le modifier dans l’userform et dans le code. Mon code commence par Option Explicit ce qui veut dire que je vais devoir déclarer toutes mes variables. De cette manière, si vous ne déclarez pas une variable, le mode débug que nous allons voir juste après, vous le signalera et vous évitera de découvrir des erreurs une fois que votre programme sera terminé et qu’il contiendra énormément de données. Si cette ligne vous gêne ou que vous l’oubliez régulièrement, vous pouvez vous rendre dans le menu Outils > Options et cocher la case Déclaration des variables obligatoire dans l’onglet Éditeur : Cette case sera cochée par défaut pour tous vos nouveaux projets. Votre Assistante : http://www.votreassistante.net - le 16/06/2015 Article écrit par Lydia Provin du blog Votre Assistante : http://www.votreassistante.net 3 Il est ensuite suivi de Dim Ws As Worksheet qui est une déclaration de variable que j’aurais pu placer après Private Sub UserForm_Initialize(). Mais une déclaration de variable doit toujours se trouver avant l’utilisation de son nom. Cette déclaration va me servir à utiliser mon onglet Clients. Private Sub UserForm_Initialize() : À l’ouverture du formulaire, j’ai déclaré J et I comme étant des valeurs numériques. Je peux donner n’importe quel nom à une variable. Un nom, que ce soit de variable ou de macro, peut contenir des lettres minuscules ou majuscules et des chiffres, mais pas d’espaces, de points, de virgules, de traits d’union ou de slashs (évitez les accents) qui seraient mal interprétés par Excel. En clair, restez simple. ComboBox2.ColumnCount = 1 indique qu’il n’y aura qu’une colonne dans la ComboBox2. Si j’avais souhaité avoir 2, 3, 4 colonnes, il aurait fallu écrire les items de la première colonne, puis la deuxième, etc. pour avoir une liste déroulante du même type que nous avons réalisé dans le tutoriel sur la facturation avec Access. ComboBox2.List() = Array("", "M.", "Mme", "Mlle") permet de spécifier les données à afficher dans la ComboBox2. Faites attention à la méthode utilisée pour vos formulaires : si les données n’ont pas besoin d’être modifiées et ne sont pas nombreuses, vous pouvez utiliser la méthode Array, mais dans le cas où les données sont amenées à changer souvent, il est préférable qu’elles soient accessibles à une personne novice en VBA et qui pourra les modifier dans son classeur Excel grâce à la méthode AddItem qui suit. Ici, nous avons, la possibilité de ne rien afficher ou de choisir M., Mme ou Mlle. Set Ws = Sheets("Clients") me permet d’attribuer une valeur à la variable que j’ai déclarée plus haut, à savoir que Ws ne traitera que de l’onglet Clients (modifiez-le si vous renommez vos onglets). Nous avons ensuite un bloc d’instruction qui contient une boucle qui indique que dans la ComboBox1, nous voulons récupérer à partir de la 2e ligne (la première étant la ligne de titre) toutes les cellules se trouvant dans la colonne A de l’onglet Clients. Cette méthode est préférable à Range("A65536") que nous allons voir juste après, car ici nous allons partir de la dernière cellule de l’onglet qui était la 65 536e sur les versions antérieures à 2007, mais a augmenté depuis, puis nous remontons jusqu’à la première cellule non vide. End(xlUp) est préférable, car Votre Assistante : http://www.votreassistante.net - le 16/06/2015 Article écrit par Lydia Provin du blog Votre Assistante : http://www.votreassistante.net 4 si nous partions du haut et qu’une cellule était vide dans le tableau, le programme ne prendrait pas en compte les suivantes. Comme il s’agit d’une boucle, si vous lancez le mode débug, vous verrez que l’action se répète le nombre de fois nécessaire pour afficher tous les items (ici, 20 fois pour les 20 lignes du tableau). En réalisant ce tutoriel, je me suis aperçue que certaines choses n’étaient pas nécessaires dans mon code comme : For I = 1 To 7 Me.Controls("TextBox" & I).Visible = True Next I Il s’agit d’une boucle pour les 7 TextBox (d’où l’intérêt de modifier ce chiffre si vous en ajoutez ou supprimez) qui va les rendre visibles… Or, elles sont, par défaut, visibles. Par la même occasion, la déclaration de I n’est plus indispensable. Donc si ce code était à refaire, je supprimerais cette boucle ainsi que ComboBox2.ColumnCount = 1 puisqu’une ComboBox contient par défaut au moins une colonne et je supprimerais également le Me. dans With Me.ComboBox1 puisque la ComboBox1 est dans ce même formulaire. Private Sub ComboBox1_Change() : Sur changement de la ComboBox1, les données vont se mettre à jour dans les autres contrôles du formulaire. Je déclare Ligne et I comme étant des valeurs numériques. If Me.ComboBox1.ListIndex = -1 Then Exit Sub permet de sortir de la procédure dans le cas où vous ne sélectionnerez aucun numéro client. Ligne est égale à la ligne de la ComboBox1 (si vous modifiez + 2 en + 1 ou + 3, vous verrez qu’il y a un décalage au niveau des données affichées). ComboBox2 = Ws.Cells(Ligne, "B") va ensuite récupérer les données de la ligne en cours à la colonne B (vous remarquerez que je n’ai pas eu besoin de déclarer à nouveau Ws, car il n’est pas dans un Private sub contrairement à I que j’ai dû déclarer de nouveau). Je fais ensuite une boucle sur toutes les TextBox (7) pour récupérer toutes les données dans chaque contrôle. Chaque contrôle (du 1er au 7e) sera égal à sa ligne et sa colonne dans l’onglet. Je n’ai pas créé de boucle pour la ComboBox2 puisqu’il n’y avait qu’une ComboBox. Votre Assistante : http://www.votreassistante.net - le 16/06/2015 Article écrit par Lydia Provin du blog Votre Assistante : http://www.votreassistante.net 5 On peut faire en sorte que notre liste déroulante se mette à jour lorsque l’on ajoute un numéro client, mais comme l’action devra être utilisée après confirmation de l’ajout d’un client, on va l’ajouter dans l’évènement suivant. Private Sub CommandButton1_Click() : Sur clic du bouton CommandButton1, je vais ajouter un contact. Pour cela, je déclare L uploads/S4/ explication-du-code-vba.pdf

  • 27
  • 0
  • 0
Afficher les détails des licences
Licence et utilisation
Gratuit pour un usage personnel Attribution requise
Partager
  • Détails
  • Publié le Nov 17, 2022
  • Catégorie Law / Droit
  • Langue French
  • Taille du fichier 0.2574MB