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
 

ChTi160

XLDnaute Barbatruc
Re : Userform / validation format €

Bonjour Sébastien
Bonjour le Fils ,Le Forum

histoire de te saluer , pas évident sans fichier !
Donc une approche sans test ?????
Code VB:
Private Sub Validation_Click()
'Enregistre les données dans la BDD
Dim LastLigne As Long
If MsgBox("Ajouter une nouvelle Ligne ? ", vbYesNo, " Demande de confirmation d’ajout ") = vbYes Then
Dim c, X&
DEBIT.Value = Format(DEBIT.Value, "#,##0.00 €") 'A quoi ça sert ?
CREDIT.Value = Format(CREDIT.Value, "#,##0.00 €") 'Idem
With Sheets("COMPTES") 'Avec la feuille
LastLigne = .Cells(.Rows.Count, 1).End(xlUp).Row + 1 'On détermine la dernière ligne non vide de la Colonne A
For Each c In Me.Controls 'Pour chaque Control du Userform
If c.Tag <> "" Then 'si Le Tag du Control n'est pas vide
X = c.Tag 'On récupére la valeur
With .Cells(LastLigne, X).Value 'Avec la cellule ainsi définie
If IsDate(c.Value) Then 'Si le Control contient une date
.NumberFormat = "dd/mm/yyyy" 'On formate la cellule cible
.Value = CDate(c.Value) 'On colle la date
Else 'sinon
.NumberFormat = "#,##0.00 €" 'On formate la cellule au format monétaire
.Value = CCur(c.Value ) 'On colle la valeur
End If
End With
End If
Next 'Autre Control
End With
End If
Unload Me
End Sub




Bonne fin de Journée
Amicalement
Jean marie
 
Dernière édition:

GADENSEB

XLDnaute Impliqué
Re : Userform / validation format €

Hello !!

Bon je viens de tester le code, cela ne charge pas les données.

J'ai joint mon fichier.

Avec mon ancien code Bt_ValidationOLD_Click() le problème persiste.

Est-ce que vous pouvez jeter un oeil svp .... là j'avoue que je comprends pas !!

Merkiiiii

Bonne soirée

Sébastien
 

Pièces jointes

  • TEST TEST TEST v2.xlsm
    49.9 KB · Affichages: 54

GADENSEB

XLDnaute Impliqué
Re : Userform / validation format €

Hello ChTi160, Dranreb, Le Forum;

J'ai essayé le code proposé mais il bloque sur (incompatibilité de type)

Code:
Else 'sinon
.NumberFormat = "#,##0.00 €" 'On formate la cellule au format monétaire
.Value = CCur(c.Value ) 'On colle la valeur
End If

J'ai essayé avec
Code:
Else 'sinon
if isnumeric(c.Value) Then
.NumberFormat = "#,##0.00 €" 'On formate la cellule au format monétaire
.Value = CCur(c.Value ) 'On colle la valeur
End If

Mais le problème est que mon combobox CODE est numérique aussi..... donc pas "#,##0.00 €"

C'est pour cela que je déterminé le format avec :
Code:
DEBIT.Value = Format(DEBIT.Value, "#,##0.00 €") 'A quoi ça sert ?
CREDIT.Value = Format(CREDIT.Value, "#,##0.00 €") 'Idem


J'avoue que ne sais pas comment prendre le truc ....
 

GADENSEB

XLDnaute Impliqué
Re : Userform / validation format €

Bonjour,
Je reviens (je sais après longtemps avec mon soucis de fichier)
Cela ne marche pas et je n’ai pas réussi à adapter votre code.
Donc je reprends depuis le début.
Ce fichier me sert à gère mon budget. Je le fait tourner sous excel 2013.


Je rentre les données via l’userform Usf_Saisie, le bouton est sur l’onglet INTERFACE.

Le code validation de données 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


Le code de ChTi160 est génial :

Code:
Private Sub Bt_Validation_Click()
'Enregistre les données dans la BDD
Dim LastLigne As Long
If MsgBox("Ajouter une nouvelle Ligne ? ", vbYesNo, " Demande de confirmation d’ajout ") = vbYes Then
Dim c, X&
DEBIT.Value = Format(DEBIT.Value, "#,##0.00 €") 'A quoi ça sert ?
CREDIT.Value = Format(CREDIT.Value, "#,##0.00 €") 'Idem
With Sheets("COMPTES") 'Avec la feuille
LastLigne = .Cells(.Rows.Count, 1).End(xlUp).Row + 1 'On détermine la dernière ligne non vide de la Colonne A
For Each c In Me.Controls 'Pour chaque Control du Userform
If c.Tag <> "" Then 'si Le Tag du Control n'est pas vide
X = c.Tag 'On récupére la valeur
With .Cells(LastLigne, X).Value 'Avec la cellule ainsi définie
If IsDate(c.Value) Then 'Si le Control contient une date
.NumberFormat = "dd/mm/yyyy" 'On formate la cellule cible
.Value = CDate(c.Value) 'On colle la date
Else 'sinon
.NumberFormat = "#,##0.00 €" 'On formate la cellule au format monétaire
.Value = CCur(c.Value ) 'On colle la valeur
End If
End With
End If
Next 'Autre Control
End With
End If
Unload Me
End Sub


mais j'ai un bug sur la ligne

Code:
.NumberFormat = "#,##0.00 €" 'On formate la cellule au format monétaire
.Value = CCur(c.Value ) 'On colle la valeur
erreur 1004


là j'avoue que je ne sais plus quoi faire ....
j'ai tt essayé :des validation de format dans la Bdd, des transformations de format.......

qqn aurait une idée ?

Bonne journée

seb
 

Dranreb

XLDnaute Barbatruc
Re : Userform / validation format €

Bonjour.
Mettez un espion sur c.Value quand ça plante et dites nous sa valeur.
Mettez aussi deux autres espions, un pour TypeName(c), l'autre pour TypeName(c.Value)
 
Dernière édition:

GADENSEB

XLDnaute Impliqué
Re : Userform / validation format €

Bonsoir,

En faisant une saisie avec la valeur 17.17 au DEBIT
j'obtiens 0,720138889


par contre quand je tape 15 au DEBIT j'obtiens bien 15

voir fichier joint

j'ai installé les espions mais pas ressui à les faire marcher.


je viens de m'apercevoir que ma

Code:
Function SansDoublons(a())
   Set d = CreateObject("Scripting.Dictionary")
   For Each c In a
      d(c) = ""
   Next c
   b = d.keys
   SansDoublons = b
End Function

utilise aussi C

est ce possible que cela perturbe le reste ?

Bonne soirée

Seb
 

Dranreb

XLDnaute Barbatruc
Re : Userform / validation format €

C'est en débogage, pendant que c'est planté qu'il faut les utiliser, pas après avoir abandonné l'exécution suite à ce plantage !
Vous allez pouvoir dorénavant vous en sortir tout seul dans la plupart des cas.
Parce qu'on ne fait pas autrement, nous, pour comprendre ce qui se passe.
Alors, finalement c'était peut être une bonne idée de nous empêcher de le faire en ne joignant pas de classeur…
 

Discussions similaires

Réponses
17
Affichages
251
Réponses
2
Affichages
129

Statistiques des forums

Discussions
311 725
Messages
2 081 941
Membres
101 847
dernier inscrit
Djigbenou