Pour partager cette vidéo sur les réseaux sociaux ou sur un site, voici son url :
Sujets que vous pourriez aussi aimer :
Formulaire VBA d'insertion
Dans ce nouveau volet, nous proposons de créer un
formulaire de saisie plutôt intelligent. Selon la nature des informations entrées, il doit être capable de choisir la
bonne colonne à renseigner sur la
feuille Excel .
Classeur Excel à télécharger
Pour développer cet outil, nous suggérons d'appuyer l'étude sur un
classeur offrant une table à deux entrées et abritant un
formulaire de saisie , déjà construit.
Nous découvrons un tableau de personnes à noter sur des évaluations à passer.
Les deux dernières colonnes sont vides. La première des deux attend l'information numérique sur la note obtenue tandis que la seconde attend l'information textuelle sur l'évaluation.
Si vous cliquez sur le bouton placé à droite du tableau, vous déclenchez l'affichage d'un
formulaire de saisie . Il est doté de
six zones de texte à renseigner. Et précisément, les deux colonnes à enrichir sur la feuille, attendent respectivement six informations. C'est en fonction de la
nature des données entrées (nombres ou textes) que le
formulaire doit choisir d'implémenter la colonne des scores ou celle intitulée Eval.
La procédure d'ajout
Pour débuter la conception, nous devons déclencher un code VBA au clic sur le
bouton Ajouter du
formulaire . Si ce dernier est ouvert, il convient de le fermer en cliquant sur le
bouton Fermer .
Réaliser le raccourci clavier ALT + F11 pour basculer dans l'éditeur VBA Excel ,
Dans l'explorateur sur la gauche, déployer l'affichage du dossier nommé feuilles ,
Dès lors, double cliquer sur l'élément fAjout ,
C'est ainsi que nous affichons le formulaire au centre de l'écran, dans sa vue en conception.
Sur le formulaire, double cliquer sur le bouton Ajouter ,
Nous basculons ainsi dans la feuille de code, entre les bornes de la
procédure événementielle ajouter_Click . Son code se déclenchera au clic sur le
bouton Ajouter . Vous notez de même la présence d'une autre procédure nommée
fermer_Click . Elle se charge simplement de fermer le formulaire au clic sur le second bouton.
Les variables
Nous devons maintenant passer à la phase de déclaration et d'affectation des variables.
Dans les bornes de la procédure, ajouter les déclarations et affectations suivantes :
...
Dim controle As Control
Dim plage1 As Range: Dim plage2 As Range
Dim i As Integer
Set plage1 = Range("D4:D9")
Set plage2 = Range("E4:E9")
...
Nous le verrons, nous n'avons pas besoin de connaître les noms des contrôles en place sur le formulaire. Nous allons créer une
boucle pour les
parcourir tous dans la chronologie de leur implantation. C'est la raison pour laquelle, nous déclarons un
objet représentant un
contrôle au sens large. Nous déclarons ensuite
deux objets de plages de cellules que nous fixons alors (Set) sur les deux colonnes respectives du tableau. Puis, pour établir la correspondance dans la boucle, entre la zone de texte du formulaire et la cellule de la feuille à renseigner, nous déclarons une variable de boucle (i).
Parcourir les contrôles du formulaire
Il est temps d'enclencher la
boucle capable d'analyser le contenu de
chaque contrôle du formulaire . Mais attention, seules les
zones de texte nous intéressent. Les étiquettes et les boutons doivent être ignorés. C'est la raison pour laquelle, nous allons émettre une condition dans ce
traitement récursif .
...
For Each controle In Me.Controls
If TypeOf controle Is MSForms.TextBox Then
i = i + 1
End If
Next
...
C'est ainsi que nous passons en revue
tous les contrôles , tour à tour. Mais grâce à l'
instruction conditionnelle exploitant l'
opérateur VBA TypeOf , nous vérifions que celui en cours d'analyse est bien une
zone de texte (MSForms.TextBox). C'est ainsi que nous allons pouvoir ignorer les étiquettes et les boutons. Pour chaque nouvelle zone de texte, nous n'oublions pas d'
incrémenter notre
variable de boucle (i = i + 1) qui était implicitement initialisée à zéro.
Adapter la colonne de l'insertion
Maintenant c'est la nature de la donnée contenue dans le contrôle en cours d'analyse qui doit être évaluée. S'il s'agit d'une
information numérique , l'inscription doit avoir lieu dans la
première plage , à l'indice en cours de lecture (i). S'il s'agit d' une
information textuelle , l'inscription doit avoir lieu dans la
seconde plage , bien sûr toujours pour l'indice en cours.
Dans les bornes de l'instruction conditionnelle, ajouter les lignes VBA suivantes :
...
If TypeOf controle Is MSForms.TextBox Then
i = i + 1
If IsNumeric(Trim(controle.Text)) Then
plage1.Item(i).Value = CDbl(Trim(controle.Text))
Else
plage2.Item(i).Value = Trim(controle.Text)
End If
End If
...
Avec la
fonction IsNumeric , nous vérifions si le contenu de la zone de texte, purgée de ses potentiels espaces (Trim), est bien un nombre. Dans ce cas (Then), à l'emplacement correspondant à la progression de l'analyse dans la plage des scores (plage1.Item(i)), nous insérons la valeur étudiée. Dans le cas contraire (Else), toujours pour l'indice en cours (plage2.Item(i)), nous réalisons cette insertion dans la plage intitulée
Eval .
Décharger les objets
Pour finir, il ne nous reste plus qu'à fermer le formulaire automatiquement pour rendre la vue à la feuille ainsi enrichie et à décharger les objets de la mémoire.
Après la boucle, ajouter les instructions VBA suivantes :
...
Unload Me
Set plage1 = Nothing
Set plage2 = Nothing
Set controle = Nothing
...
Nous pouvons maintenant tester le fonctionnement de ce formulaire d'ajout de données.
Enregistrer les modifications (CTRL + S) et basculer sur la feuille Excel (ALT + Tab),
Cliquer sur le bouton Remplir pour afficher le formulaire,
Dans les six zones de texte, taper des nombres puis cliquer sur le bouton Ajouter ,
Comme vous pouvez l'apprécier, les inscriptions se réalisent chronologiquement dans la première plage vide, celle des scores.
Maintenant si vous réaffichez le formulaire et que vous entrez des textes, comme des lettres de l'alphabet pour les évaluations, à validation, vous constatez que les inscriptions basculent automatiquement sur la seconde colonne vierge. Toutes les cellules sont ainsi parfaitement renseignées grâce à un
formulaire d'ajout intelligent .