Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Nombres et moyennes

  • Initiateur de la discussion Initiateur de la discussion paul87
  • 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 !

paul87

XLDnaute Impliqué
Bonjour à tous, bonjour le Forum
dans le programme test joint,
j'ai un masque de saisie qui me sert à relever des valeurs numériques.
Pour lancer le UF il faut double click dans la colonne A, à la ligne choisie.
Tout fonctionne bien, pour l'ouverture, le remplissage, et le tranfert des données dans la Feuil1.
Mais je ne comprends pas, il y a des erreurs dans les formats de nombre, les moyennes sont fausses ou pas calculées...
ou les moyennes disparaissent lorsqu'on ré-ouvre le UF sur une ligne déja saisie..
Si quelqu'un pouvait me donner une piste...svp
 

Pièces jointes

Re : Nombres et moyennes

Bonjour,

Tes nombres sont stockés sous forme de texte.

Il faut utiliser cdbl(TextboxX):
Si la virgule est rentrée directement dans les textBox:

Code:
Cells(i,j)=cdbl(TextBox1.Text)

Si la valeur textuelle du textbox contient le point comme séparateur:

Code:
Cells(i,j)=cdbl(replace("123.45",".",application.DecimalSeparator))

A+
 
Re : Nombres et moyennes

Bonjour et merci à toi.

Donc, ça fonctionne bien avec :
Code:
Cells(i,j)=cdbl(TextBox1.Text)
sauf que ça plante si ma moyenne est composée de moins de 5 données (cases vides)


Par contre, je ne sais pas adapter le code pour point comme séparateur.
Je voudrais bien utiliser celui là, car comme j'ai des centaines de valeurs à saisir, avec le point du pavé numérique, c'est plus facile..!!!
si tu pouvais me donner encore un coup de pouce ..stp
 
Dernière édition:
Re : Nombres et moyennes

Re,

sauf que ça plante si ma moyenne est composée dempins de 5 données (cases vides)

Quoi ça vouloir dire😕

Sinon pour l'autre question, dans mon post précédent tu as une solution simple qui permettra de convertir en Type Double les valeurs des textbox, que l'utilisateur saisisse le . (point) ou la virgule comme séparateur décimal.

Pour remplacer le point par la virgule en cours de frappe:

Code:
Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
    If KeyAscii = 46 Then KeyAscii = 44
End Sub

Mais vu le nombre de tes textBox, il faudrait passer par un module de classe dont je pense tu ne sauras pas le manipuler.

Utilise la solution passée dans mon dernier post. C'est la plus simple à mettre en oeuvre.

A+
 
Re : Nombres et moyennes

oups...c'est bien compliqué...dommage..!!!
ça aurait été tellement mieux pour la saisie des données..!!!


dans le texte est composée dempins de 5 données il faillait lire
de moins de 5 données !!
comment faire pour supprimer ce pb..?
 
Re : Nombres et moyennes

re,

Tu peux utiliser la fonction générique suivante pour empêcher toute saisie autre le point, la virgule et les chiffres:

Code:
'A faire pour chaque textbox : appeler la fonction ReturnKeyAscii
[COLOR=blue]Private[/COLOR] [COLOR=blue]Sub[/COLOR] TextBox1_KeyPress([COLOR=blue]ByVal[/COLOR] KeyAscii [COLOR=blue]As[/COLOR] MSForms.ReturnInteger)
ReturnKeyAscii KeyAscii
[COLOR=blue]End[/COLOR] [COLOR=blue]Sub[/COLOR]
 
[COLOR=blue]Function[/COLOR] ReturnKeyAscii([COLOR=blue]ByVal[/COLOR] KeyAscii [COLOR=blue]As[/COLOR] MSForms.ReturnInteger)
   [COLOR=blue]Select[/COLOR] [COLOR=blue]Case[/COLOR] KeyAscii
     [COLOR=blue]Case[/COLOR] 46: KeyAscii = 44
     [COLOR=blue]Case[/COLOR] 48 To 57
     [COLOR=blue]Case[/COLOR] [COLOR=blue]Else[/COLOR]
        Beep
        KeyAscii = 0
    [COLOR=blue]End[/COLOR] [COLOR=blue]Select[/COLOR]
    ReturnKeyAscii = KeyAscii
[COLOR=blue]End[/COLOR] [COLOR=blue]Function[/COLOR]

A+
 
Re : Nombres et moyennes

re bonjour,

tu trouvera dans le fichier joint différente modifications:

1 - Ligne est définie à ma sauce dans UserFrom_Initialize car je ne savais pas comment tu voulais l'initialiser. (c'était pour mes tests)

2 - Un module de classe qui prend en charge l'évènement KeyPress d'un Textbox

3 - En tête de module du userform une variables Tableau 'grpTB()' qui est alimentée dans UserForm_Initialize par tous les controles textbox gérés par le module de class.

4 - Pour les Textbox 1 à 5 tu verra dans leur propriété 'Tag' que j'y ai mis le numero de colonne auquels ils sont liés. Tu verras dans Userform_Initialise comment sont alimentés ces textBox. A toi de compléter avec les suivants.

5 - Je te laisse à partir de cela trouvé le moyen d'alimenter les cellules à partir de ces textbox et de leur propriété 'Tag' et de la variable Ligne. Petite indication: tu devras utiliser une boucle sur tous les textBox du userForm pour déterminer ceux qui ont un numéro de colonne dans leur 'Tag', et t'en servir pour alimenter la colonne idoine.

A+
 
Re : Nombres et moyennes

Bonjour à Tous,
Bonjour le Forum,
Bonjour Hasco,

Après quelques jours d'absence, je me relance dans ce petit programme.
Malgré ton aide..😱 je n'arrive à rien de concluant😱

Tes propositions sont bien au dela de mon niveau de vb...(comme tu as pu le remarquer à la lecture de mon programme).

Je suis bien embêté...
je probléme des virgules / points est réglé...mais le calcul des moyennes n'est pas juste ou les valeurs disparaissent à la réouverture du UF
 
Re : Nombres et moyennes

Bonjour,

Je comprends bien qu'en débutant on ait envie de parvenir à un résultat. Mais peut-être faut-il y aller pas à pas dans la découverte de VBA et commencer par maîtriser des choses simples, puis de plus en plus ardu.

Peut-être te demandes-tu d'être en HEC sans être passé au préalable par le primaire, le secondaire etc...

A+
 
Re : Nombres et moyennes

Re,
j'entends et comprends bien ton point de vue,
cependant, j'ai fort besoin de finaliser et fiabiliser cet outil, car mes listes de rélévés s'allonges plus vite que mon niveau de vba augmente..!!
Si ça continue, je vais me retrouver avec des heures de saisie !!
Depuis que je "bricole" du vba, j'ai souvent constaté que des situations souvent ardues pouvaient se simplifier...quitte à générer un code..moins recherché ou brillant...
Je ne désespère pas de finir par trouver...
 
Re : Nombres et moyennes

Re,

C'est bien ce qu'il me semblait, t'es au marché à la macro, j'étais pourtant près à t'aider progressivement à comprendre et mettre en application ce que je t'ai passer plus haut pour ensuite passé à ce problème de moyenne.

A+
 
Dernière modification par un modérateur:
Re : Nombres et moyennes

Re,
je ne comprends pas ce qui peut te faire dire cela !!
Je constate seulement que la solution que tu me propose est bien supérieure à mon niveau actuel, ce qui me la rend donc difficilement applicable et reproductible.
Je suis sur, au vu de ma production de code pour ce programme, que tu es de cet avis.
Il a cependant le mérite d'avoir été réalisé tout seul...sans aller à la pêche aux macros..
Mais si tu n'as pas peur de t'arracher les cheveux..
 
Dernière édition:
Re : Nombres et moyennes

Re bonjour.
Après quelques réflexions..

Pour ce point 5, j'ai utilisé une MsgBox (Ctl.Tag)afin déterminer la valeur de Tag qui est donc la référence de la colonne liée au textbox, et MsgBox (Ctl.Value) afin de trouver déterminer la valeur de Value qui est donc la valeur contenue dans le Textbox.

Par contre pour ce qui est de la boucle pour le remplissage des cellules
je trouve plutôt logique de faire ceci..
Code:
For Each Ctl In Me.Controls
        If Ctl.Name Like "TextBox*" Then
            ReDim Preserve GrpTb(0 To i)
            Set GrpTb(i) = New clsTbNum
            Set GrpTb(i).LeTextBox = Ctl
            i = i + 1
Cells(Ligne, Ctl.Tag) = Ctl
        End If
Next
mais ça plante.
lorsque je débogue la ligne
Code:
Cells(Ligne, Ctl.Tag) = Ctl
toutes les variables ont une valeurs affectée qui est juste !!
 
Dernière édition:
- 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
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…