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 ?