Textbox format € et cdbl . je n'y arrive pas

Bonjour, les passionnées d'excel

J'ai besoin d'aide car je perds un temps fou à trouver mais je n'y arrive pas.

sur un userform j'ai un textbox qui se nomme : prixjs

j'ai mis ce code pour remplacer à la saisie le . par ,

Private Sub prixjs_Change()

If InStr(prixjs, ".") <> 0 Then

prixjs.Text = Replace(prixjs.Text, ".", ",")

End If

End Sub

tout va bien pour l'instant

j'ai ensuite mis cette procédure en doubleclic (multiplication de 2 texbox et formatage en €)

Private Sub prixjs_DblClick(ByVal Cancel As MSForms.ReturnBoolean)

On Error GoTo sortie

prixs = CDbl(nbjs.Value) * CDbl(prixjs.Value)

prixs = Format(prixs.Value, "0.00 €")

prixjs.Text = Format(prixjs.Value, "0.00 €")

Exit Sub

sortie:

Exit Sub

End Sub

tout fonctionne bien encore

par un command button je veux mettre le resultat obtenu de ce textbox prixs vers une cellule en a1 (par exemple)

c'est là que ça coince

[a1].value = format(prixs, "0.00 €)

ou

[a1].value = format(prixs, "0.00")

la valeur dans a1 est sous format texte et ne pourra être additionnée si besoin

je mets ceci

[a1].value =cdbl(prixs)

c'est parfait la valeur est exactement celle que je veux (avec les décimales)

mais si prixs est vide (pas de prix appliqué par exemple) j'ai une erreur à cause de cdbl

j'en suis réduis à mettre ceci

Private Sub CommandButton1_Click()

If prixs <> "" Then

[a1].Value = [a1].value =cdbl(prixs)

End If

et cela pour tout les texbox contenant des prix

End Sub

Cela fonctionne bien MAIS j'Ai plus de 50 textbox avec des prix (que je veux laisser affichés sur l'userform en format €)

Je ne vais pas mettre cette condition à chaque fois

Il me faudrait une condition "for each" qui zapperait les textbox prix vides et ne prendrait que les valeurs des textbox non vides

ou

une synthaxe pour que cdbl ne produise pas d'erreurs en cas de textbox vides

j'espère avoir été clair.

Je pense que cela doit être très facile pour les expert du forums

J'ai perdu un temps fou avec ça

Merci d'avance pour votre aide

Bonjour.

Function ValText@(TXT$)
         ValText = Val(Replace(TXT, ",", "."))
End Function

Sub Demo()
        PRIX1$ = "89,50 €"
        PRIX2$ = ""
    [A1].Value = ValText(PRIX1)
    [A2].Value = ValText(PRIX2)
End Sub

Merci MARC L

Ton code après une petite adaptation marche très bien

Function ValText@(TXT$)
         ValText = Val(Replace(TXT, ",", "."))
         End Function
Private Sub CommandButton38_Click()
Sheets("base").Select
[A1].End(xlDown).Offset(1, 0) = ValText(prixs) 'semaine
[A1].End(xlDown).Offset(0, 1) = VALText(prixm) 'mois
'......
End Sub

Quand le textbox est vide il n'y a pas d'erreur mais il est mis dans la cellule 0,00 € (en format nombre c'est super)

Seulement, je voudrais aucune valeur (rien) mise dans la cellule si textbox = "" - cellule destination = "" pour éviter d'avoir plein de zéros dans ma base

une petite question ta function ValText est bien mais remplace les . par , uniquement lorsque je lance le commandbutton alors que mon code le fais directement à la saisie (ou j'ai peut être pas compris)

Le tient est simple, comment me servir de ta function pour l'intégrer au textbox : prixs_change() ou after_update()

comme ceci : prixs.Value = ValText(prixs) (qui ne fonctionne pas)

Merci

P'tit rappel : VBA reste nativement en anglais même dans une version française et,

de facto, il ne comprend que le point comme séparateur décimal !

Non, la fonction sert à remplacer la virgule d'un texte (comme un TextBox)

car dans ton code initial le point est transformé en virgule ‼ Question de logique …

Suffit juste de tester si la valeur est égale à zéro pour ne pas l'afficher, non ?

Rechercher des sujets similaires à "textbox format cdbl arrive pas"