Configurer un bouton 'Supprimer' dans VBA avec Gestion des Erreurs

Le code du UserForm : cohérence des données
Vidéo non disponible ! Réessayez plus tard
Cette vidéo fait partie de la formation
Programmez Microsoft Project 2016 avec les macros et VBA
Revoir le teaser Je m'abonne
Transcription

49,90€ Je commande

À partir de
27€ /mois
Je m'abonne à Elephorm

Description Programme Avis

49,90€ Je commande

À partir de
27€ /mois
Je m'abonne à Elephorm

Objectifs de cette vidéo :

  • Configurer un bouton 'supprimer' dans un UserForm VBA.
  • Valider les saisies des utilisateurs pour les dates de début et de fin.
  • Gérer les erreurs de saisie et assurer la cohérence des données.
  • Rafraîchir automatiquement la liste des splits après chaque modification.

Apprenez à intégrer et configurer un bouton 'supprimer' dans un UserForm de VBA. Cette leçon couvre la gestion des erreurs de saisie des dates et le rafraîchissement de la liste des splits.

Dans cette leçon, nous allons voir comment ajouter et configurer un bouton 'supprimer' dans un UserForm VBA. Nous commencerons par mettre en place le code associé à ce bouton pour supprimer les splits existants. Ensuite, nous introduirons une macro pour rafraîchir automatiquement la liste des splits après chaque suppression.

En parallèle, la vidéo montre comment gérer la validation des saisies d'utilisateur. Les zones de texte pour les dates de début et de fin seront testées pour assurer qu'elles contiennent des dates valides. Si l'utilisateur saisit des informations incorrectes, le script effacera la saisie et repositionnera le curseur sur la zone de texte correspondante.

Enfin, nous verrons comment assurer la cohérence des dates saisies : par exemple, la date de fin ne doit pas être antérieure à la date de début de la tâche. Une fois les dates validées, le split sera créé et la liste des splits mise à jour en conséquence.

Voir plus
Questions réponses
Comment supprimer un split dans un UserForm VBA?
En appelant la macro de suppression à partir de l'événement de clic du bouton 'supprimer'.
Pourquoi valider les saisies des utilisateurs?
Pour garantir que les données soient cohérentes et éviter les erreurs lors de la création des splits.
Que fait la macro listé_split?
Elle rafraîchit la liste des splits affichée dans le UserForm.
Nous allons maintenant continuer la mise en place du code avec le bouton supprimer, celui-ci sera facile, double clic sur supprimer, j'obtiens un code btn-sup underscore clic. L'ordre des différents subs n'a aucune importance, il peut simplement peut-être être important pour vous pour pouvoir retrouver votre logique, mais VBA gère par le nom du sub et non pas par sa position. Nous sommes donc bien dans la page de code du UserForm et lorsque l'utilisateur cliquera sur le btn-supprimer, j'envisage d'appeler la macro supprimer split, comme je ne lui fais aucune modif, elle restera dans le module de tout à l'heure, aucun problème, la macro peut être n'importe où dans votre projet, et puis ça serait peut-être bien de rafraîchir la liste des splits, donc je prends ctrl-c le nom de la macro listé split, ctrl-v, j'appelle aussi la macro listé split dans sa version du UserForm uef underscore listé split, ça permettra donc dès qu'il y aura clic sur le bouton de supprimer l'ensemble des splits, il n'y aura plus qu'une seule partie. Je reviens sur le UserForm, c'est parfait, et il me reste maintenant à créer les splits, alors là on va bien sûr réutiliser la macro qu'on a déjà prévue, mais dans une forme un peu différente, même très différente, tout à l'heure avec l'enregistreur automatique, on avait fait une macro qui supprimait tous les splits, je vous rappelle avec une boucle qui permettait de supprimer tous les splits, quel qu'en soit le nombre. Ici on va la réutiliser, mais on va avoir pas mal de contrôles à faire avant, des contrôles de validité, il est clair que l'utilisateur peut saisir n'importe quoi dans les deux zones de texte, de date de début, date de fin, et bien on va comparer les dates saisies par l'utilisateur pour dire non là c'est pas possible parce que tu me saisis une date de fin du split qui est antérieure à la date de début de la tâche, c'est incohérent, ça passe pas. Alors je vais venir sur le bouton créer, je vais faire un double clic sur ce bouton créer, il me propose tout en haut de la page un sub btn créer clic, c'est un tout petit peu tôt, pourquoi ? Parce que je ne veux pas mettre tout le code dans le bouton lui-même, je vais juste en dessous me créer un nouveau sub que j'appellerai sub uf parce que j'ai son homologue dans le module de tout à l'heure donc uf pour bien le distinguer, créer, création, underscore split, comme ça je suis certain de ne pas avoir d'homonyme. Je fais entrer et le btn créer clic appellera ce sub, donc je copie-colle le nom du sub dans l'événement clic sur le bouton. Alors ce sub de création, c'est très bien, je vais faire quelques lignes vierges, il va être un petit peu long, on va devoir déjà déclarer deux variables, donc je vous propose de le faire par copier-coller ce que j'ai déjà préparé, deux variables des start des finish, as date, qui seront chargées de récupérer les dates saisies par l'utilisateur, pourquoi ? Parce qu'avant de les utiliser, on va les tester pour voir si tout simplement elles sont cohérentes. Premier test, il faut vérifier si la saisie de l'utilisateur représente bien une date, si l'utilisateur a saisi du texte, on va refuser cette saisie, donc là encore je vous ai préparé le code, validation de la saisie, on remarque si ce qui est saisi dans le txtstart.text, si dans la zone txtstart, ce qu'on a saisi n'est pas une date, donc if not, is date, et entre parenthèses j'appelle txtstart.text, alors je vide la zone txtstart.text égale chaîne vide, la saisie disparaîtra et avec un txtstart.setfocus, je ramène l'utilisateur sur cette zone, prêt à nouveau à saisir. Alors on pourrait améliorer peut-être avec une msgbox pour lui dire attention vous n'avez pas ce que vous avez saisi n'est pas une date. Je fais un exit sub, c'est pas la peine d'aller plus loin, un else if, et je teste la deuxième zone, si not, is date, le txtfinish, alors je vide la zone, la saisie disparaîtra, et je remets le focus sur cette zone afin que l'utilisateur soit prêt à reprendre une nouvelle saisie. On va faire un deuxième test qui va valider la cohérence de la saisie, et ça c'est pas tout à fait la même chose, l'utilisateur a bien saisi des dates, mais ces dates sont farfelues, cohérence de la saisie. Alors là je commence à charger mes deux variables, dans les deux variables start et finish, je récupère la saisie de l'utilisateur, ce sera plus facile à manier, et je prends la tâche en cours, ActiveCell.task, et je vérifie si la date de début saisie est plus petite que la date de début de la tâche, ça ne peut pas faire, donc on va tout simplement vider la zone à nouveau et lui remettre le focus. Si la date de fin qui est saisie par l'utilisateur est plus petite que la date de début de la tâche, alors c'est la même chose, c'est pas cohérent, on efface la saisie utilisateur et on arrête le sub. Vous pourrez évidemment améliorer ces contrôles avec tous les tests que vous pourriez imaginer opportun. Je suis en mesure maintenant de faire mon split, comme j'ai déjà fait un with, tout en haut j'ai déjà le with ActiveCell.task, je peux me permettre tout de suite de dire .split, donc ça s'appliquera à la tâche en cours, et je crée le split qui démarre à des start et termine à des finish, les dates saisies par l'utilisateur. Il me reste une dernière petite chose à remettre à jour la liste qui est affichée en bas de mon UserForm, voilà, je rappelle la procédure uf listé listé split, et là la liste se remettra à jour. Je pense que nous avons maintenant tout ce qui est nécessaire, on peut tester débuggage compilé, ah j'ai peut-être fait une petite erreur ici dans mes copiers collés, la zone ne s'appelle sans doute pas txt start, on va le vérifier, c'est .txt, txt début, et évidemment ce sera après txt début, je dois le reporter, txt finish ce sera sans doute txt fin, donc je prévois bien d'appeler fin, et je dois retrouver les mêmes questions, c'est txt début, txt fin, txt début, txt fin, txt début en nouveau, et puis txt fin. Donc je renomme correctement mes objets textes, voilà, débuggage compilé, j'ai encore un fin que je dois corriger, débuggage compilé, ça paraît bon, je peux enregistrer, il nous restera dans l'étape suivante à tester le bon fonctionnement de cet ensemble.

Programme détaillé de la formation

Nos dernières formations Microsoft Project