Calcul à la volée dans USF avec module de classe

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 !

mécano41

XLDnaute Accro
Bonjour à tous,

Dans le fichier joint, j'ai un tableau dans la feuille Calculs dont la ligne à fond violet est alimentée par les Textbox d'un USF.

Des calculs sont effectués dans la feuille au fur et à mesure des saisies dans les Textbox et certains de ces Textbox sont modifiés à la volée en fonction des résultats de calculs ; il n'y a pas de validation a posteriori mais un contrôle permanent de validité (pas de valeur <=0 pour certaines, des bornes pour une autre, etc...).

La gestion des sept Textbox est faite par le biais d'un module de classe.

Le problème est que :

- lorsque l'on modifie par ex. R1 dans le Textbox, la valeur envoyée dans la cellule R_1 correspondante de la feuille est erronée : le dernier chiffre de la valeur n'est pas pris en compte! et évidemment, d'autres valeurs dans la feuille sont affectées par cette erreur
- les messages d'anomalies n'apparaissent pas ou à retardement

Tout se passe comme si la "mise à jour" se faisait au coup d'après... Je pense que je fais une erreur au niveau du module de classe, mais laquelle? 🙂 😕

Si quelqu'un a une idée là-dessus, merci d'avance...

J'ai effacé tout ce qui ne servait pas pour ne pas embrouiller mais si quelqu'un veut des détails, c'est sans problème...

Cordialement
 

Pièces jointes

Dernière édition:
Re : Calcul à la volée dans USF avec module de classe

Bonjour.
Je vous recommanderais deux choses:
1) - Récupérer la valeur du GroupeTextBox dans un évènement Change et non KeyPress
2) - Dans le KeyPress corriger les points en virgules par If Chr$(Touche) = "." Then Touche = Asc(",") et non par des SendKeys
 
Re : Calcul à la volée dans USF avec module de classe

Bonjour Dranreb,

Merci pour ta réponse. J'ai donc essayé ceci :

Code:
Private Sub GroupeTextBox_Change(ByVal Touche As MSForms.ReturnInteger)
With BdDlgCroisements
    If GroupeTextBox.Name = "Phi" Then ' ---------------------------------------------------------------- Traitement spécial Phi (doit être positif, négatif ou nul mais compris entre deux bornes)
        If InStr("0123456789-.,", Chr(Touche)) = 0 Then Touche = 0                                    ' Chiffres, point, virgule et signe "-"
        If Chr(Touche) = "." Then Touche = Asc(",")                                                           ' et transforme en virgule si c'est un point

mais j'ai les mêmes problèmes...

Cordialement
 
Re : Calcul à la volée dans USF avec module de classe

Bonjour mécano41

Je n'aurai jamais imaginé te venir en aide
J'essaie:

A mon avis le pb vient de ce que le Keypress intervient avant le Change
Pour le montrer vois le fichier joint
PS: Il me vient une idée : (tout passer dans le _Change ???)
PS2: Je n'ai bien entendu pas tout testé !!!

Edit: Salut Bernard
 

Pièces jointes

Dernière édition:
Re : Calcul à la volée dans USF avec module de classe

On a quand même le droit d'écrire aussi à coté une minuscule GroupeTextBox_KeyPress qui se borne à changer le "." en ",".
Pour ma part je ne mettrais de toutes façon pas autant de choses dans le module de classe. Ou j'y ajouterais des propriétés Public Mini As Double, Maxi As Double et Cel As Range pour qu'il sache le faire en aveugle. Ce n'est pas d'une bonne facture de programmer des préoccupations de l'application utilisatrice dans un module de classe. D'aucun prétendent même qu'ils ne devraient pas comporter de MsgBox mais renvoyer une erreur à gérer par le programme utilisateur. Mais bon, je m’assoie là dessus aussi !
 
Re : Calcul à la volée dans USF avec module de classe

Alors, j'avais été meilleur dans ma version précédente ci-jointe 🙂 car j'avais séparé les problèmes de touches des autres...j'avais changé pensant que le code serait plus simple...

Je vais y revenir mais (si je me souviens bien) il restait un problème de calcul qui ne se fait pas dans certains cas probablement à cause des "If Valide1 = False Then Exit Sub" ... je vais me replonger dedans.

Cordialement
 

Pièces jointes

- 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

Retour