XL 2016 Formulaire VBA

halecs93

XLDnaute Impliqué
re-bonjour,

Bon, je n'y arrive vraiment pas. Hé oui...le vba, ce n'est pas que du bricolage.

Je souhaitais utiliser mon formulaire 'userform' pour entrer des données dans une feuille de saisie de dépense....

Si quelqu'un peut regarder ça, ce sera un grand plaisir pour moi et un grand merci pour lui ou elle.

Je laisse le fichier en pièce jointe.
 

Pièces jointes

  • TEST COMPTA_Cp4.xlsm
    25 KB · Affichages: 4

JM27

XLDnaute Barbatruc
Bonsoir
Ta comboBox1 n'existe pas dans l'userform
pas bien du tout le On Error Resume Next sur toute une procédure!!
Ne doit être utilisé que dans des cas particulier et en général sur une ou deux lignes de procédure
Ou sont les 9 Txt ?
Ou sont les 9 feuilles de 1 à 9 ?
En fait ton Usf ne correspond pas à ton fichier
 
Dernière édition:

youky(BJ)

XLDnaute Barbatruc
Bonsoir,
Je viens de bricoler le fichier
J'ai renommé les textbox et même renommé les combobox en TextBox cela facilite bien.
Perso je m'amuse pas à tout renommer là j'ai fait l'inverse
Comme je procède la ligne inscrite s'écrit toujours en haut donc la 1ère ligne du tableau
C'est plus facile aussi pour la lecture.
Dans le bouton Valide j'ai supprimé les lignes de code des onglets inexistants.
Bruno
 

Pièces jointes

  • TEST COMPTA_Cp4.xlsm
    27.9 KB · Affichages: 7

halecs93

XLDnaute Impliqué
Bonsoir,
Je viens de bricoler le fichier
J'ai renommé les textbox et même renommé les combobox en TextBox cela facilite bien.
Perso je m'amuse pas à tout renommer là j'ai fait l'inverse
Comme je procède la ligne inscrite s'écrit toujours en haut donc la 1ère ligne du tableau
C'est plus facile aussi pour la lecture.
Dans le bouton Valide j'ai supprimé les lignes de code des onglets inexistants.
Bruno
Toutou d'abord un grand merci. Cela semble fonctionner à merveille.

Je voulais savoir si on peut forcer la saisie dans le textbox6 'somme' pour qu'elle renvoie obligatoirement le résultat en monétaire ? En effet, si j'écris dedans 2,50 il sera renvoyé en format texte alors qu'en écrivant 2.50, il sera en numéraire (ce que je voudrais obtenir).

Merci
 

youky(BJ)

XLDnaute Barbatruc
Re,
Pour que le textbox soit numérique il faut une virgule au lieu du point.
Cette macro surveille bien . Faire un doubleclick sur textbox6 et copie ce code
Pour la date si PB mettre cells(3,1)=cdate(TextBox1)
Bruno

VB:
Private Sub TextBox6_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
'que numéric et 1 seule virgule
If KeyAscii = 46 And Not TextBox6 Like "*,*" Then KeyAscii = 44: Exit Sub
If InStr("0123456789", Chr(KeyAscii)) = 0 Then KeyAscii = 0
End Sub
 

halecs93

XLDnaute Impliqué
Re,
Pour que le textbox soit numérique il faut une virgule au lieu du point.
Cette macro surveille bien . Faire un doubleclick sur textbox6 et copie ce code
Pour la date si PB mettre cells(3,1)=cdate(TextBox1)
Bruno

VB:
Private Sub TextBox6_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
'que numéric et 1 seule virgule
If KeyAscii = 46 And Not TextBox6 Like "*,*" Then KeyAscii = 44: Exit Sub
If InStr("0123456789", Chr(KeyAscii)) = 0 Then KeyAscii = 0
End Sub
re bonjour,

je viens de tester le code. Souci (peut-être que mon questionnement n'était pas très clair), lorsque je saisi une somme en utilisant le point du pavé numérique la valeur renvoyé par la suite dans la cellule est en format texte et à contrario si j'essaie de saisir la valeur en utilisant la virgule celle-ci n'est pas acceptée...
 

JM27

XLDnaute Barbatruc
Bonjour
La réponse de @youky(BJ) fonctionne avec une petite modif
Remplace le 46 par 44 et 44 par 46

concernant la date : ( en mettant la propriété maxlenght à 10)
VB:
Sub ValidationDate(dat As Object, Valide As Boolean)
Dim reponse As Variant
Dim LaDate As String
'
 Select Case Len(dat.Value)
    Case 1
        If CLng(dat.Value) > 3 Then
            reponse = MsgBox("Le jour ne peut pas commencer par " & dat.Value, vbOKOnly, "Erreur de saisie")
            dat.Value = ""
            Exit Sub
        End If
    Case 2
        If CLng(dat.Value) > 31 Then
            reponse = MsgBox("Le mois ne peut avoir plus de 31 jours", vbOKOnly, "Erreur de saisie")
            dat.Value = Left(dat.Value, 1)
            Exit Sub
        Else
            dat.Value = dat.Value & "/"
        End If
    Case 4
        If Right(dat.Value, 1) > 1 Then
            reponse = MsgBox("L'année ne peut avoir plus de 12 mois", vbOKOnly, "Erreur de saisie")
            dat.Value = Left(dat.Value, 3)
            Exit Sub
        End If
    Case 5
        If CLng(Right(dat.Value, 2)) > 12 Then
            reponse = MsgBox("L'année ne peut avoir plus de 12 mois", vbOKOnly, "Erreur de saisie")
            dat.Value = Left(dat.Value, 4)
            Exit Sub
        Else
            dat.Value = dat.Value & "/20"
        End If
    Case 10
 
    If Not IsDate(dat.Value) Then
        reponse = MsgBox("Le " & dat.Value & " n'existe pas ", vbOKOnly, "Erreur de saisie")
        dat.Value = ""
        Exit Sub
    End If
   
    Valide = True
End Select
End Sub
 

youky(BJ)

XLDnaute Barbatruc
Bon j'arrive trop tard
Merci JM27
Faut aussi changer la virgule en point Like "*.*"
C'est étonnant habituellement il faut la virgule.
Attention si le fichier passe sur différent ordis
Ceci est à régler dans les options Excel on peux choisir.
Bruno
 

halecs93

XLDnaute Impliqué
Bonjour
La réponse de @youky(BJ) fonctionne avec une petite modif
Remplace le 46 par 44 et 44 par 46

concernant la date : ( en mettant la propriété maxlenght à 10)
VB:
Sub ValidationDate(dat As Object, Valide As Boolean)
Dim reponse As Variant
Dim LaDate As String
'
 Select Case Len(dat.Value)
    Case 1
        If CLng(dat.Value) > 3 Then
            reponse = MsgBox("Le jour ne peut pas commencer par " & dat.Value, vbOKOnly, "Erreur de saisie")
            dat.Value = ""
            Exit Sub
        End If
    Case 2
        If CLng(dat.Value) > 31 Then
            reponse = MsgBox("Le mois ne peut avoir plus de 31 jours", vbOKOnly, "Erreur de saisie")
            dat.Value = Left(dat.Value, 1)
            Exit Sub
        Else
            dat.Value = dat.Value & "/"
        End If
    Case 4
        If Right(dat.Value, 1) > 1 Then
            reponse = MsgBox("L'année ne peut avoir plus de 12 mois", vbOKOnly, "Erreur de saisie")
            dat.Value = Left(dat.Value, 3)
            Exit Sub
        End If
    Case 5
        If CLng(Right(dat.Value, 2)) > 12 Then
            reponse = MsgBox("L'année ne peut avoir plus de 12 mois", vbOKOnly, "Erreur de saisie")
            dat.Value = Left(dat.Value, 4)
            Exit Sub
        Else
            dat.Value = dat.Value & "/20"
        End If
    Case 10
 
    If Not IsDate(dat.Value) Then
        reponse = MsgBox("Le " & dat.Value & " n'existe pas ", vbOKOnly, "Erreur de saisie")
        dat.Value = ""
        Exit Sub
    End If
  
    Valide = True
End Select
End Sub
Bonjour,

En effet, une question de code ascii.... mais mais mais ;) Pour faciliter l'usage d'un futur utilisateur, n'est-il pas possible d'autoriser les deux types de saisie pour qu'au moment de la validation excel formate la somme en numéraire ?
 

JM27

XLDnaute Barbatruc
Bonjour Bruno
Pour info on peut tester le séparateur : Application.International(xlDecimalSeparator)
effectivement J'avais oublié d'indiquer le changement de la virgule en point
@halecs93
as tu vraiment essayé cela
VB:
Private Sub TextBox6_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
    'que numéric et 1 seule virgule
    If KeyAscii = 44 And Not TextBox6 Like "*.*" Then KeyAscii = 46: Exit Sub
    If InStr("0123456789", Chr(KeyAscii)) = 0 Then KeyAscii = 0
End Sub
 
Dernière édition:

halecs93

XLDnaute Impliqué
Bonjour Bruno
effectivement J'avais oublié d'indiquer le changement de la virgule en point
@halecs93
as tu vraiment essayé cela
VB:
Private Sub TextBox6_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
    'que numéric et 1 seule virgule
    If KeyAscii = 44 And Not TextBox6 Like "*.*" Then KeyAscii = 46: Exit Sub
    If InStr("0123456789", Chr(KeyAscii)) = 0 Then KeyAscii = 0
End Sub
Oui, encore une fois à l'instant. Et le point du pavé numérique ne s'écrit pas...
 

halecs93

XLDnaute Impliqué
Bonjour Bruno
Pour info on peut tester le séparateur : Application.International(xlDecimalSeparator)
effectivement J'avais oublié d'indiquer le changement de la virgule en point
@halecs93
as tu vraiment essayé cela
VB:
Private Sub TextBox6_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
    'que numéric et 1 seule virgule
    If KeyAscii = 44 And Not TextBox6 Like "*.*" Then KeyAscii = 46: Exit Sub
    If InStr("0123456789", Chr(KeyAscii)) = 0 Then KeyAscii = 0
End Sub
Je venais de tomber sur ce code (extrait d'un fichier trouvé sur le net).... j'imagine qu'il faudrait remplacer "Me.Salaire" par TexBox6...?

Me.Salaire = Replace(Me.Salaire, ".", ",")
If Not IsNumeric(Me.Salaire) Then
MsgBox "Saisir du num!"
Me.Salaire = ""
Me.Salaire.SetFocus
Exit Sub
End If
 

JM27

XLDnaute Barbatruc
on va finir par y arriver : on y croit ;)
VB:
Private Sub TextBox6_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
    'que numéric et 1 seule virgule
    If KeyAscii = 44 Then KeyAscii = 46
    If KeyAscii = 46 And Not TextBox6 Like "*.*" Then Exit Sub
    If InStr("0123456789", Chr(KeyAscii)) = 0 Then KeyAscii = 0
End Sub
 

Pièces jointes

  • TEST COMPTA_Cp4.xlsm
    27.1 KB · Affichages: 2

Discussions similaires

Réponses
18
Affichages
790
Réponses
12
Affichages
412

Statistiques des forums

Discussions
312 559
Messages
2 089 604
Membres
104 224
dernier inscrit
Brilma