Fonctionnement incohérent d’un UserForm de correction d’une ligne de la base

Webperegrino

XLDnaute Impliqué
Supporter XLD
Bonjour Le Forum,
Je soumets encore une devinette qui sera certainement classée « facile » pour les « compétiteurs agréés du Forum », ceux-ci auront le plaisir de trouver la solution.
Cette « devinette » m’astique les neurones depuis plus d’un mois malgré de nombreuses recherches ici et sur le Net. J'aimerai un peu de pédagogie et d'explications complémentaires...

Voici un extrait d’une usine à gaz de 10 Mo qui me convient en fonctionnement et dans laquelle j’ai voulu améliorer la gestion par la création d’une fiche de correction de ligne ENTRÉES-Recettes et BALANCE dans la base (je ferai ensuite un 2ème UserForm similaire pour corriger une ligne SORTIES-Dépenses).

Je ne vous présente ici que le 1er UserForm ENTRÉES.
Le code de déprotection des feuilles est « cod ».

La solution trouvée, si vous me la transmettez, il m’appartiendra de l’appliquer dans le fonctionnement du 2ème UserForm un peu plus complexe en nombre de TextBox.

Je reviens à l’UserForm ligne ‘Entrées - Recettes’ qui doit pouvoir corriger la ligne choisie dans la feuille ENTRÉS et dans la feuille BALANCE ; dans la base (Feuille ENTRÉES) on trouve la colonne Sous-Total qui présente le résultat des cellules précédentes, en tenant compte des deux décimales.

Avec cet UserForm de correction de ligne saisie en Feuille ENTRÉES et BALANCE il est constaté :
- à son ouverture, une non cohérence du résultat Sous-Total affiché (plus de décimales et mauvaise valeur)
- en réalité l’userForm semble placer du texte et non des nombres décimaux dans les TextBox : la preuve, si on valide sans corriger, de mauvaises erreurs se mettent dans les deux feuilles destination, ENTRÉS et BALANCE,
- si on entre des valeurs à décimales sur celles affichées dans les TextBox, les sommes Sous-Total et Total des TextBox correspondent alors parfaitement ! il faut donc tout resaisir dans cette fiche avant de valider : fâcheux ! Mais à la validation dans ces conditions tout se place bien dans la base,
- à la validation dans d’autres conditions (en corrigeant seulement un ou quelques TextBox, les résultats Sous-Total et Total sont incohérents et le transfert dans les deux feuilles de la base sont aussi faux : fâcheux à nouveau !

L’objectif dès l’ouverture de l’UserForm :
- un affichage de nombre à deux décimales et non du texte dans les TextBox
- un affichage cohérent sur Sous-Total et Total avant validation
- un transfert dans les deux feuilles de la base fidèle aux données de l’UserForm à la validation.

C’est pour cela que vos éclaircissements et votre aide me seront utiles, vous contribuerez ainsi à ma fierté d’avoir réussi à monter cette fenêtre particulière de saisie (je reconnais avec l’aide de Fils précédents sur ce Forum, car certains de leur codes m’ont été pratiques).
Dans les codes, en vert, différentes lignes qui n’ont pas été concluantes.

Merci à vous,
Bonne lecture du fichier qui pourra servir certainement à d’autres personnes du Forum, du moins le principe de fonctionnement.

Webperegrino
 

Pièces jointes

  • Rectifier_Ligne_Dans_Base_Entée_Balance.xls
    86.5 KB · Affichages: 65
  • Rectifier_Ligne_Dans_Base_Entée_Balance.xls
    86.5 KB · Affichages: 64
  • Rectifier_Ligne_Dans_Base_Entée_Balance.xls
    86.5 KB · Affichages: 64

Dranreb

XLDnaute Barbatruc
Re : Fonctionnement incohérent d’un UserForm de correction d’une ligne de la base

Bonsoir
Je n'ai pas ouvert le fichier, mais tout de suite: les TextBox ne peuvent contenir que du texte. Si ce texte doit signifier autre chose qu'une chaîne de caractère il faut construire cette information à l'aide de fonctions CDate, CLng, CDbl etc.

Remarque: pour initialiser le TextBox, vu qu'il ne peut de toute façon pas contenir de nombre, on peut avoir intérêt à utiliser la fonction Format.

On peut aussi recourir à un truc auquel on ne pense pas assez souvent, une paire de procédures Property :
VB:
Property Get Mont(Tbx As TextBox) As Double
Mont = CDbl(Tbx.Text)
End Property
Property Let Mont(Tbx As TextBox, Montant As Double)
Tbx.Text = Format(Montant, "# ### ### ###.00")
End Property
Cette écriture permet de considérer le Montant représenté par le texte d'un TextBox et ne plus se poser de question. Mont(TextBox1) peut être utilisé à gauche comme à droite du signe "=" d'une affectation comme TextBox1.Text, sauf que ça représente bien un nombre et plus un texte et qu'il faut donc lui affecter une expression Double ou l'affecter à une variable Double.
Mont(TextBox1) = Mont(TextBox1) provoque une normalisation de la présentation du nombre dans la TexBox1
Cordialement.
 
Dernière édition:

jpb388

XLDnaute Accro
Re : Fonctionnement incohérent d’un UserForm de correction d’une ligne de la base

Bonjour à tous
ma petite pierre à l'édifice
a+
 

Pièces jointes

  • Rectifier_Ligne_Dans_Base_Entée_Balance.xls
    95 KB · Affichages: 66
  • Rectifier_Ligne_Dans_Base_Entée_Balance.xls
    95 KB · Affichages: 61
  • Rectifier_Ligne_Dans_Base_Entée_Balance.xls
    95 KB · Affichages: 63

Webperegrino

XLDnaute Impliqué
Supporter XLD
Re : Fonctionnement incohérent d’un UserForm de correction d’une ligne de la base

Bonsoir Le Forum,
Bonsoir Dranreb et jpb388,
jpb388 Lorient remercie Tregunc,
Je vais étudier vos propositions.
La solution de jpb388 fonctionne parfaitement : je suis sauvé au moins pour cet UserForm !
Dranreb, je vais essayer ces codes que je ne connaissais pas.

Pour l'UserForm SORTIES, que vous n'aviez pas dans ce fichier partiel, il me restera à voir si l'une de vos deux propositions fonctionne : en effet le transfert du contenu de certains textBox de ce 2ème UserForm sont parfois du texte, parfois des nombres, et le remplissage doit pouvoir être opéré correctement.
Mais je n'hésiterai pas à revenir vers vous en cas de besoin,
Merci à vous,
Bonne soirée,
Webperegrino
 

Discussions similaires

Membres actuellement en ligne

Statistiques des forums

Discussions
312 294
Messages
2 086 895
Membres
103 404
dernier inscrit
sultan87