XL 2021 Détecter un changement dans un des contrôles de formulaire et mettre à jour un TS correspondant.

  • Initiateur de la discussion Initiateur de la discussion jeff1494
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

jeff1494

XLDnaute Occasionnel
Bonjour à toutes et tous ;

Je cherche des avis sur une idée pour faire quelque chose de simple, mais avec une efficacité maximum.

Voilà donc mon problème :

J'ai un formulaire qui contient des contrôles (TextBox, CheckBox, ComboBox), et j'aimerai pouvoir détecter si des modifications ont eu lieu sur l'un de ces contrôles pour enchainer la mise à jour du TS impacté.

Dans les TextBox certaines sont alimentées par des saisies manuelles contrôlées (du genre calendrier de Patricktoulon), et donc à priori ne nécessitent pas de contrôles supplémentaires.
D'autres TextBox sont à saisir manuellement, et doivent donc respecter des règles de gestion définies, comme par exemple des saisies numériques (Sur cela pas de soucis).
Les ComboBox sont aussi validées par traitement, car les valeurs possibles appartiennent à un TS spécifique, ComboBox qui autorisent la création de nouvelles valeurs dans le TS associé.

Donc en principe 😇🙃 tout devrait être valide en terme de cohérence et validation des données.

Ma question est de savoir comment faire pour détecter la modification d'un des contrôles pour pouvoir alors procéder à la mise à jour du tableau structuré qui contient la base de données.

Il existe bien la possibilité d'utiliser une macro du genre :

VB:
Private Sub object _Change( )
' 
' object correspondant au contrôle du formulaire
' Détecte le changement sur un contrôle, et donc on valide la saisie si besoin
' Puis enchainer sur la suite du code, par exemple
' appel d'une fonction de mise à jour de la ligne du TS impacté.
'
End Sub

Ce qui me gêne c'est qu'il serait peut-être possible d'avoir à utiliser ce genre de macro pour d'autres utilisations que la modification, comme par exemple vérifier la saisie numérique dans une TextBox.

Et là cela devient beaucoup plus complexe pour ma vieille petite cervelle fragile.

Une idée serait d'avoir un indicateur quelconque qui me dirait quelle est la procédure d'origine de la demande, et donc de pouvoir exécuter des procédures différentes.

Du style :

  • "Indic" = " " alors on vérifie que la saisie soit numérique dans la TextBox.
  • "Indic = Test" alors on exécute une procédure spécifique.
  • "Indic = Truc" alors on exécute une autre procédure spécifique.
Gérer cela avec des "Case". Là c'est quelque chose que je ne maitrise pas du tout, et j'aimerai bien apprendre.
Mais j'aimerais bien avoir votre avis sur cette manière de faire, et la lourdeur que cela peut engendrer.

En remerciant d'avance toutes celles et tous ceux qui voudront bien perdre un peu de leur temps pour me donner leur avis.
Je vous souhaite une bonne soirée à toutes et tous.
 
Hello,

Ma question est de savoir comment faire pour détecter la modification d'un des contrôles pour pouvoir alors procéder à la mise à jour du tableau structuré qui contient la base de données.
Pour moi la question n'est pas 100 % limpide : que veux-tu dire par "détecter la modification" ?

Normalement tu dois avoir le "_Change" qui intercepte un éventuel changement.
Du coup je suppose c'est autre chose que tu veux faire. Mais quoi ?
 
Bonjour à toutes et tous.

@TooFatBoy : Ce que j'essaie de faire est à inclure dans un process de modification d'une ligne de TS depuis un formulaire, comment détecter si après affichage des valeurs de la ligne du TS dans des contrôles de formulaires, la valeur d'un des contrôles a été modifiée. En effet j'ai bien le "_Change' pour le contrôle, mais dans certains cas je peux être amené à l'utiliser déjà pour par exemple vérifier que la zone saisie est bien numérique.
Donc j'utilise le "_Change" pour cette vérification. Je crois que je vais voir mon idée d'indicateur de type de traitement.

@dysorthographie : C'est en effet une solution. Je vais voir si je peux m'en servir. Même si je voudrais bien ne pas avoir trop de boutons à cliquer.

Dans tous les cas merci pour votre attention.
Bonne journée à toutes et tous.
 
@TooFatBoy :

En réfléchissant un peu, j'ai peut-être trouvé une solution.
  1. Soit j'inclue un test dans le "_Change" sur le type de traitement (Modification) pour gérer mon problème, cela me semble bien lourd.
  2. Soit j'utilise "_KeyPress" pour un contrôle de la saisie numérique d'une part , et j'utilise "_Change" pour le contrôle du type de traitement.
Je vais voir ce que cela donne, et si c'est viable.
Encore merci à toi et bonne journée.
 
Bonjour à tous,
Ai-je bien compris ? Vous affichez des données dans un formulaire et vous voulez être prévenu si un changement est effectué, par exemple avant de passer à un autre enregistrement, ou bien à la fermeture du formulaire ?
Si c'est cela une classe peut gérer cela, avec une collection par exemple, celle-ci enregistrerait les valeurs des zones de textes et liste déroulantes, quand vous passer à un autre enregistrement vous vérifiez si des changements ont eu lieux, si c'est le cas vous afficher un message.
Pour la validation de données une fonction avec des expressions régulières peut faire le taf.
 
@TooFatBoy : J'ai compris, mais je ne voulais pas avoir à gérer deux choses différentes dans la même procédure. Je vais pourtant le faire.
Merci pour tes conseils.

@Valtrase : Bonjour; merci pour votre aide.
Vous avez parfaitement compris ma problématique.
Mais vous abordez des solutions qui ne sont pas de mon niveau de connaissances, que ce soit la notion de collection, ou bien celle des expressions régulières.
Je reviendrais certainement vers vous le jour ou j'aurais l'opportunité de me plonger dans ces concepts.
Pour l'instant j'essaie de progresser et d'assimiler ce que j'apprends.
Dans tous les cas je vous remercie pour le temps que vous avez pris pour me répondre.

Bonne journée à tous les deux.
 
Bonjour @jeff1494
La base de chez base serait d'associer le contrôle à une ligne ou colonne voir cellule pour les unitaires
Cela peut se faire dans le tag et bien d'autre méthode encore

Ensuite l'événement change détecte parfaitement le changement de valeur dans un textbox
Une condition sur vide et peut-être même sur une ou plusieurs valeurs contraintes
Et dans cette/ces conditions inscription en ligne et colonne ou cellule

Maintenant il serait en effet moins compliqué de mettre un bouton Valider
Et dans son click mettre toutes les conditions pour un/des textbox
Le travail se ferait qu'une fois

c'est la base de chez base
 
Il faut tout vérifier au moment de la validation c'est mieux que de mettre des contraintes dans les textboxs qui ne font qu'alourdir le code et agacer l'utilisateur.
C'est marrant, moi je dirais plutôt l'inverse : ce qui agace l'utilisateur, c'est de remplir tous les champs puis au moment de la validation du formulaire d'être obligé de revenir sur un ou plusieurs champs dont les valeurs ne conviennent pas, alors que ça aurait dû être vérifié lors de la saisie de chaque champ. 😉
 
@patricktoulon : Je crois que je vais en effet me diriger vers un bouton de validation.
@Rheeem : Oui c'est ce que je vais mettre en place.
@TooFatBoy : C'était aussi mon idée, mais dans mon cas cela semble alourdir le code.

Bref je vais réfléchir à tout cela et je verrais comment je m'y prends.
En tous cas un grand merci à tous pour vos idées et remarques pertinentes.
Bonne soirée à vous.
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
14
Affichages
465
Retour