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

95sam-test.xlsm (53.93 Ko)

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
je peux même démarrer par un point ou une virgule

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

Rechercher des sujets similaires à "activer userform saisie"