Activer userform pour saisie
bonsoir à tous,
bonsoir à thauthème
je ne sais pas comment intégrer dans une macro "POINTAGE" qui se trouve dans le module 6, l'activation d'un userform qui présente la saisie d'un montant.
suite à cette saisie en cas de validation je vais stocker ce montant saisi dans une zone intermédiaire
je souhaiterais intégrer cette "action" après la ligne 45 du module 6
merci
Bonjour Sam, bonjour le forum,
Juste une remarque. Quand je vois un post qui s'adresse à quelqu'un en particulier je n'y réponds pas, car cela semble ignorer les autres membres (et Dieu sait si il y en a de balèzes ici) de ce forum...
Pour lancer une UserForm, dans ton cas L'UserForm2, le code :
UserForm2.Show
Après, toi seul peut savoir quand le lancer dans ta macro Pointage. En dernière ligne certainement...
bonjour à tous,
ThauThème a écrit :Juste une remarque. Quand je vois un post qui s'adresse à quelqu'un en particulier je n'y réponds pas, car cela semble ignorer les autres membres (et Dieu sait si il y en a de balèzes ici) de ce forum...
si tu m'en as fait la remarque, c'est que tu l'as ressenti comme ça et donc d'autres ont pu avoir le même sentiment! je m'en excuse auprés d'eux.
Mais je veux préciser qu'il n'était pas du tout dans mon intention d'être discourtois avec le forum, pas plus que de te solliciter plus particulièrement. C'était tout simplement un clin d'oeil plus "appuyé" à quelqu'un avec qui j'ai échangé plus qu'avec les autres.
Désolé de cette maladresse
pour la question technique :
j'avais écrit ce que tu suggères mais je ne sais pas récupérer le résultat de la saisie.
j'ai écrit :
userform2.show
mont=textbox1.value
il me dit que textbox1 = variable non définie
merci
Re,
Pas évident de comprendre... Peut-être comme ça :
Private Sub CommandButton1_Click()
'bouton validation
mont_sais = CCur(TextBox1.Value)
MsgBox "mont_sais = " & mont_sais
End Sub
Une autre petite erreur, Userform2 ou Me au lieu Userform
Private Sub CommandButton3_Click()
'bouton quitter
Unload UserForm2 'ou Unload Me
End Sub
merci thauthème
je voudrais dire ce que je comprends du fonctionnement :
j'ai écrit dans la macro POINTAGE :
userform2.show pour afficher la fenêtre de saisie de mon montant
le système affiche alors la fenêtre (comme demandé par show)
une fois le montant saisi, je tape sur "valider"
le système quitte alors (provisoirement) la macro POINTAGE, pour aller exécuter la fonction "validation"
et là, on y fait ce qu'on doit faire, on quitte la fonction "validation" et on revient à la macro POINTAGE, à l'instruction qui suit le "show"
1/ L'interprétention que je fais de ce "cheminement" est-elle correcte ?
Si elle l'est, je dois faire la récupération de la saisie du montant, dans cette fonction validation, et là j'y inscrit :
montrlv=userform2.textbox1.value
cette variable montrlv, je m'en sers donc dans "validation" ET dans POINTAGE
2/ pour la déclarer, je le fais dans le module 1 en "Public montrlv as integer" (inutile, ou obligatoire ?)
3/ quoiqu'il en soit, la récup de la saisie ne fonctionne pas : il plante sur :
"montrlv=userform2.textbox1.value" ou "montrlv=ccur(textbox1.value)
je ne comprends pas
4/comment formater "le masque de saisie" pour ne saisir qu'un montant avec 2 décimales ?
merci pour vos explications
Re,
1. Tout a fait correct.
2. Pourquoi une autre variable montrlv ? Tu as eu la sagesse de déclarer mont_sais publique dans le Module1. Utilise mont_sais puisqu'elle est disponible dans tout le projet.
3. Je pense que tu as un problème de séparateur décimal virgule ou point. Perso, je n'utilise jamais le type Currency (que je découvre avec toi) mais je te propose un petit bout de code qui devrait résoudre ton problème et en plus, limiter la saisie à deux décimales maximum) :
Private Sub CommandButton1_Click()
'bouton validation
If Me.TextBox1.Value = "" Then Exit Sub
mont_sais = CCur(TextBox1.Value)
MsgBox "mont_sais = " & mont_sais
End Sub
Private Sub CommandButton3_Click()
'bouton quitter
Unload UserForm2
End Sub
Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger) 'à l'appui sur une touche du clavier
If KeyAscii = 44 Then 'condition si la touche est une virgule
Me.TextBox1.MaxLength = Len(Me.TextBox1.Value) + 3 'définit la nombre maximum de caractères de la ComboBox1
Exit Sub 'sort de la procédure
End If 'fin de la condition
If KeyAscii = 46 Then 'si la touche est un point
KeyAscii = 44 'remplace le point par une virgule
Me.TextBox1.MaxLength = Len(Me.TextBox1.Value) + 3 'définit la nombre maximum de caractères de la ComboBox1
Exit Sub 'sort de la procédure
End If 'fin de la condition
If KeyAscii < 48 Or KeyAscii > 57 Then KeyAscii = 8 'remplace toute autre touche que {0, 1, 2, 3, 4, 5, 6, 7, 8 ou 9} par "effacement" (Backspace)
End Sub
merci thauthème
- on peut saisir un nbre entier
- on peut saisir un nombre limité à 2 décimales
- si après le premier point ou virgule saisi, je tape des chiffres je suis effectivement limité à 2 décimales
- mais si je retape encore 1 point ou une virgule, je peux alterner un chiffre, une virgule, indéfiniment
Bonjour,
Essaie comme ça :
Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger) 'à l'appui sur une touche du clavier
If KeyAscii = 44 Then 'condition si la touche est une virgule
If InStr(1, Me.TextBox1.Value, ",", vbTextCompare) <> 0 Then KeyAscii = 8: Exit Sub
Me.TextBox1.MaxLength = Len(Me.TextBox1.Value) + 3 'définit la nombre maximum de caractères de la ComboBox1
Exit Sub 'sort de la procédure
End If 'fin de la condition
If KeyAscii = 46 Then 'si la touche est un point
If InStr(1, Me.TextBox1.Value, ",", vbTextCompare) <> 0 Then KeyAscii = 8: Exit Sub
KeyAscii = 44 'remplace le point par une virgule
Me.TextBox1.MaxLength = Len(Me.TextBox1.Value) + 3 'définit la nombre maximum de caractères de la ComboBox1
Exit Sub 'sort de la procédure
End If 'fin de la condition
If KeyAscii < 48 Or KeyAscii > 57 Then KeyAscii = 8 'remplace toute autre touche que {0, 1, 2, 3, 4, 5, 6, 7, 8 ou 9} par "effacement" (Backspace)
End Sub
bonjour à tous, bonjour thauthème,
merci pour ton code :
c'est mieux!
sauf qu'on peu entrer dès le départ :
"," (ou "." transformé en ",") et ensuite les 2 chiffres possibles des 2 décimales
exemple ",54" donnerait "0,54". C'est peut-etre voulu et de toutes façon pas génant : il suffit de faire backspace et recommencer la saisie
mais j'ai oublié un paramètre qui risque de compliquer le code :
il me faut accepter les montants négatifs, donc accepter d'avoir le signe "-" en tête!
Si on ne veut pas toucher au code, ça ne me gêne pas de rajouter sur mon userform
2 boutons d'option (débit et crédit) et ainsi je peux gérér mes montants négatifs
merci
Re,
Le ,54 = 0,54 est plus que normal ! C'est même très pratique...
Sinon, je me demande à quoi ça sert que je commente les codes...
Essaie ça :
Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger) 'à l'appui sur une touche du clavier
If KeyAscii = 45 Then 'condition si la touche est le signe moins (-)
If InStr(1, Me.TextBox1.Value, "-", vbTextCompare) <> 0 Then KeyAscii = 8: Exit Sub 'si il existe déjà un signe moins, efface le nouveau signe éditée, sort de la procédure
Exit Sub 'sort de la procédure
End If 'fin de la condition
If KeyAscii = 44 Then 'condition si la touche est une virgule
If InStr(1, Me.TextBox1.Value, ",", vbTextCompare) <> 0 Then KeyAscii = 8: Exit Sub 'si il existe déjà une virgule, efface la nouvelle virgule éditée
Me.TextBox1.MaxLength = Len(Me.TextBox1.Value) + 3 'définit la nombre maximum de caractères de la ComboBox1
Exit Sub 'sort de la procédure
End If 'fin de la condition
If KeyAscii = 46 Then 'si la touche est un point
If InStr(1, Me.TextBox1.Value, ",", vbTextCompare) <> 0 Then KeyAscii = 8: Exit Sub 'si il existe déjà un point, efface le nouveau point édité
KeyAscii = 44 'remplace le point par une virgule
Me.TextBox1.MaxLength = Len(Me.TextBox1.Value) + 3 'définit la nombre maximum de caractères de la ComboBox1
Exit Sub 'sort de la procédure
End If 'fin de la condition
If KeyAscii < 48 Or KeyAscii > 57 Then KeyAscii = 8 'remplace toute autre touche que {0, 1, 2, 3, 4, 5, 6, 7, 8 ou 9} par "effacement" (Backspace)
End Sub
une fois de plus !!! (... je crains que ce ne soit pas la dernière!
MERCI!
je reste impressionné par ta réactivité à t'adapter au problème posé!
ce qui traduit une certaine maîtrise du sujet et qui me fait dire qu'il va me falloir du temps !!!