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

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? :) :confused:

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

  • Pb Module Classe 1.xlsm
    146.1 KB · Affichages: 71
  • Pb Module Classe 1.xlsm
    146.1 KB · Affichages: 75
  • Pb Module Classe 1.xlsm
    146.1 KB · Affichages: 79
Dernière édition:

Dranreb

XLDnaute Barbatruc
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
 

mécano41

XLDnaute Accro
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
 

pierrejean

XLDnaute Barbatruc
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

  • Pb Module Classe 1.xlsm
    123 KB · Affichages: 50
  • Pb Module Classe 1.xlsm
    123 KB · Affichages: 48
  • Pb Module Classe 1.xlsm
    123 KB · Affichages: 42
Dernière édition:

Dranreb

XLDnaute Barbatruc
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 !
 

mécano41

XLDnaute Accro
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

  • hélices mélangeur4.xlsm
    729.3 KB · Affichages: 38

pierrejean

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

Re

Je viens de tenter quelque chose
Cela a l'air de fonctionner mais je pense que l'ami Bernard risque de désapprouver
Je pars pour quelques jours (mais j'aurais aimé revoir le problème sans module de classe )
 

Pièces jointes

  • Pb Module Classe 1_c.xlsm
    134.9 KB · Affichages: 54

mécano41

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

Bonjour à tous,

Voilà, je pense avoir eu sa peau! :mad: Le code ne me paraît pas trop moche malgré tout ; j'attends vos avis éclairés :)

Encore merci à vous-deux.

Cordialement
 

Pièces jointes

  • Croisements hélices mélangeur V01-00 .xlsm
    753.7 KB · Affichages: 45

Discussions similaires

Réponses
29
Affichages
924
Réponses
7
Affichages
424

Statistiques des forums

Discussions
312 228
Messages
2 086 420
Membres
103 205
dernier inscrit
zch