Userform / validation format €

GADENSEB

XLDnaute Impliqué
Bonjour le Forum,
J’espère que vous allez bien !

Je reviens avec une question basique mais qui me pose probléme :
La validation des données à la sortie d'un Userform
J'ai 2 textbox (DEBIT et CREDIT) que je souhaite valider au format "€" classique.

Pour précision, je ne valide aucun format au moment de la saisie dans les textbox.

J'essaye avec un isnumeric et j'obtiens une erreur
"Erreur de compilation : Sub ou fonction non définie"
mmmm j'ai dû sauter une étape ....

Voici mon code :

Code:
Private Sub Validation_Click()
'Enregistre les données dans la BDD
Dim LastLigne As Integer
Dim ModeRecalcul As Long


ModeRecalcul = Application.Calculation

' Réglage du recalcul sur mode manuel
Application.Calculation = xlCalculationManual
 
If MsgBox("Ajouter une nouvelle Ligne ? ", vbYesNo, " Demande de confirmation d’ajout ") = vbYes Then
 
LastLigne = Sheets("COMPTES").Range("a65536").End(xlUp).Row + 1
Dim c, x&
     For Each c In Me.Controls
    
        If c.Tag <> "" Then
            x = c.Tag
            If IsDate(c.Value) Then
                Feuil3.Cells(LastLigne, x).Value = CDate(c.Value)
             if IsNumeric(c.Value) Then
               Feuil3.Cells(LastLigne, x).Value = SetFocus(c.Value)
            Else
                Feuil3.Cells(LastLigne, x).Value = c.Value
            End If
        End If
    Next
End If
Unload Me

' Rétablissement du mode de recalcul d'origine
Application.Calculation = ModeRecalcul

End Sub


QQn aurais une idée ??

Bonne journée

Seb
 

GADENSEB

XLDnaute Impliqué
Re : Userform / validation format €

Re
ben c bizarre, j'ai joint le classeur plusieurs fois.....
Bon je le renvoie en ZIP, désolé
J'espére que c'est passé.

en fait il ne beuge pas mais renvoie une information fausse ....

désolé des loupés
 

Pièces jointes

  • BUDGET - TEST.zip
    292.8 KB · Affichages: 36
  • BUDGET - TEST.zip
    292.8 KB · Affichages: 30
Dernière édition:

Dranreb

XLDnaute Barbatruc
Re : Userform / validation format €

Qu'est ce qu'il faut tester dans tout ça ?

Vous pouvez quand même vous en sortir avec des espions si ça ne plante pas.
Mettez un Stop, ou mieux un point d'arrêt (cliquez dans la petite marge grise à gauche)


Si vous navez pas encore l'habitude ce sera plus simple de mettre :
VB:
If c.Tag <> "" Then
            X = c.Tag
            MsgBox TypeName(c.Value) & " = """ & c.Value & """.", vbInformation, "Test"
 
Dernière édition:

GADENSEB

XLDnaute Impliqué
Re : Userform / validation format €

Merci de m'aider

avec le bouton "Saisie" un usf apparait,

faire une saisie du type de celle-ci
Capture.PNG

la saisie de 17.17 se transforme en 0,720138889 dans la Bdd (onglet : COMPTES)
cette saisie est aussi visible dans l'onglet INTERFACE tout à droite (c'est extraction de la BDD)

et tout le problème est là ....les chiffres à "," ne fonctionne pas avec le "." du pavé numerique.
alors que les chiffres comme 15 fonctionnent parfaitement.....
la macro concernée par la validation des données dans la BDD est :


Code:
Private Sub Bt_Validation_Click()
'Enregistre les données dans la BDD
Dim LastLigne As Integer

'Fige l'écran pendant l'éxécution de la macro
Application.ScreenUpdating = False

' Réglage du recalcul sur mode manuel
Application.Calculation = xlCalculationManual

'Texte PopUp
TexteDate = "En date du : " & DATESAISIE
Textecompte = "Sur le Compte : " & COMPTE
TexteBR = "En : " & BUDGETREEL
TexteDépenses = "Pour la dépense : " & LIBELLE

If DEBIT <> "" Then
TexteMtt = "Pour un montant de : " & DEBIT & " €"
Else: TexteMtt = "Pour un montant de : " & CREDIT & " €"
End If

TextePopUp = Chr(10) & TexteDate & Chr(10) & Textecompte & Chr(10) & TexteBR & _
             Chr(10) & TexteDépenses & Chr(10) & TexteMtt

If MsgBox("Ajouter une nouvelle Ligne ? " & Chr(10) & TextePopUp, vbYesNo, _
    " Demande de confirmation d'ajout ") = vbYes Then
 
LastLigne = Sheets("COMPTES").Range("a65536").End(xlUp).Row + 1
Dim c, X&

     For Each c In Me.Controls
 '   DEBIT.Value = Format(DEBIT.Value, "#,##0.00 €")
  '  CREDIT.Value = Format(CREDIT.Value, "#,##0.00 €")
            
' .Range("P:S").EntireColumn.NumberFormat = "#,##0.00 €"
        If c.Tag <> "" Then
            X = c.Tag
            If IsDate(c.Value) Then
                Feuil3.Cells(LastLigne, X).Value = CDate(c.Value)
            Else
                Feuil3.Cells(LastLigne, X).Value = c.Value

            End If
           End If
    Next
    
End If

' Rétablissement du mode de recalcul d'origine
Application.Calculation = xlAutomatic


'Défige l'écran aprés l'éxécution de la macro
 Application.ScreenUpdating = True
 
 Unload Me

End Sub


ais-je étais assez clair dans mes explications ?

Bonne am

Seb
 

Pièces jointes

  • Capture.PNG
    Capture.PNG
    11.4 KB · Affichages: 33

Dranreb

XLDnaute Barbatruc
Re : Userform / validation format €

Je vous conseillerais d'ajouter cette procédure pour que CDbl(DEBIT.Text) puisse marcher :
VB:
Private Sub DEBIT_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
If KeyAscii = Asc(".") Then KeyAscii = Asc(",")
End Sub
 

GADENSEB

XLDnaute Impliqué
Re : Userform / validation format €

Parfait,

Un grand merci !!!! tu me sauves la vie.

Une derniére question : comment je pourrais valider ces chiffres en formats €

sachant que dans ma macro
Code:
Sub Formats()
.................................................
j'avais crée cela
'Format € des chiffres
.Range("P:S").EntireColumn.NumberFormat = "#,##0.00 €"
'.Range("P:S").EntireColumn.NumberFormat = "#,##0.00"
'.Range("P:S").EntireColumn.NumberFormat = "General"
'.Range("A2:S" & .Range("A" & Rows.Count).End(xlUp).Row).NumberFormat = "General"
.........

merci encore
bonne journée
 

GADENSEB

XLDnaute Impliqué
Re : Userform / validation format €

Pour l'instant j'avais bloqué les formats dans la BDD en attendant d'avoir trouvé la solution du probléme ",/.".
CCur doit être inclut dans l'usf ? au moment de la validation des données?
 

Dranreb

XLDnaute Barbatruc
Re : Userform / validation format €

CCur est une fonction qui renvoie en Currency une valeur d'un autre type spécifié en paramètre tel que la Value d'un contrôle qui est généralement String. Et oui, c'est cette expression qu'il convient d'affecter : Feuil3.Cells(LastLigne, X).Value = CCur(c.Value)
Sinon il risquerait d'affecter un String à la cellule. Ce n'est pas toujours vrai, parfois il réussi à trouver tout seul ce qu'il faut y mettre. Je le déplore fondamentalement, d'ailleurs, je préférerais en rester maître et qu'il n'essaye même pas, parce qu'il continue quand même à se gourer souvent…

Mais évidemment tout le monde n'est pas ex-informaticien, la plupart préfèrent ne pas avoir à se poser de question quitte à être complètement démunis dans les cas plus rares où le trans-typage automatique ne fonctionne pas.
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
Re : Userform / validation format €

…Et pour continuer mon discours (bonjour Si…) je le déplore aussi parce que cet automatisme ne fait qu'entretenir la confusion des gens entre ce qu'ils voient dans une cellule et la nature de sa valeur.
 

Dranreb

XLDnaute Barbatruc
Re : Userform / validation format €

Le plus sûr à mon avis c'est de ne pas retoucher des formats identiques à toutes les lignes, mis à la main, au départ, dans toutes les colonnes et de stocker des CCur(ctrl.Text) dans celles qui sont dédiées aux montants.

Et, c'est vrai, dans des plages mises sous forme de tableaux, les format identiques à toutes les lignes sont reconduits automatiquement sur les nouvelles. Ça implique un peu, pour une programmation sérieuse, de travailler avec le ListObject et ses propriétés ListColumns et ListRows. Cette dernière admettant une méthode Add qui renvoie aussi une ListRow (je veux dire comme .ListRows(x) en est une existante) cette dernière possédant une méhode Delete et un propriété Range avec laquelle on peut (enfin) travailler à peu près classiquement.
 
Dernière édition:

GADENSEB

XLDnaute Impliqué
Re : Userform / validation format €

Hello Danreb
Tu as raison : Sécurisons, si je peux encore te demander ton aide.

commençons par cette macro :
Ou implanter le Ccur ?

Code:
Private Sub Bt_Validation_Click()
'Enregistre les données dans la BDD
Dim LastLigne As Integer

'Fige l'écran pendant l'éxécution de la macro
Application.ScreenUpdating = False

' Réglage du recalcul sur mode manuel
Application.Calculation = xlCalculationManual

'Texte PopUp
TexteDate = "En date du : " & DATESAISIE
Textecompte = "Sur le Compte : " & COMPTE
TexteBR = "En : " & BUDGETREEL
TexteDépenses = "Pour la dépense : " & LIBELLE

If DEBIT <> "" Then
TexteMtt = "Pour un montant de : " & DEBIT & " €"
Else: TexteMtt = "Pour un montant de : " & CREDIT & " €"
End If

TextePopUp = Chr(10) & TexteDate & Chr(10) & Textecompte & Chr(10) & TexteBR & _
             Chr(10) & TexteDépenses & Chr(10) & TexteMtt

If MsgBox("Ajouter une nouvelle Ligne ? " & Chr(10) & TextePopUp, vbYesNo, _
    " Demande de confirmation d'ajout ") = vbYes Then
 
LastLigne = Sheets("COMPTES").Range("a65536").End(xlUp).Row + 1
Dim c, X&

     For Each c In Me.Controls
        If c.Tag <> "" Then
            X = c.Tag
            If IsDate(c.Value) Then
                Feuil3.Cells(LastLigne, X).Value = CDate(c.Value)
            Else
                Feuil3.Cells(LastLigne, X).Value = c.Value

            End If
           End If
    Next
    
End If

' Rétablissement du mode de recalcul d'origine
Application.Calculation = xlAutomatic


'Défige l'écran aprés l'éxécution de la macro
 Application.ScreenUpdating = True
 
 Unload Me

End Sub

Bonne journée
Seb
 

Discussions similaires

Réponses
17
Affichages
249
Réponses
2
Affichages
129

Statistiques des forums

Discussions
311 720
Messages
2 081 892
Membres
101 831
dernier inscrit
gillec