Enregistrer le format d'une valeur textbox en monétaire

gbstyle

XLDnaute Impliqué
Bonjour, voila je souhaiterai lors de l'enregistrement sur mon tableau que le format nombre soit monétaire
ci joint mon bout de code
Private Sub BtnAenregistrer_Click()
Ref = Me.TxtARefArticles
With Sheets("Base_Articles")
Set trouvé = .Range("TblBaseArticles").Columns(1).Find(Ref, lookat:=xlWhole, LookIn:=xlValues)
If trouvé Is Nothing Then 'il s'agit d'un nouvelle articles
derlig = .Range("A" & .Rows.Count).End(xlUp).Row + 1 'on se positionne sur la dernière ligne
Else 'existe déjà
derlig = trouvé.Row
If MsgBox("Souhaitez vous modifier l'article ?", vbYesNo) = vbNo Then Exit Sub
End If

.Range("A" & derlig) = TxtARefArticles
.Range("B" & derlig) = CboAFamille
.Range("C" & derlig) = CboASousfamille
.Range("D" & derlig) = TxtADesignation
.Range("E" & derlig) = CboAFournisseur
.Range("F" & derlig) = TxtALongueurcolisage
.Range("G" & derlig) = TxtALargeurcolisage
.Range("H" & derlig) = TxtAHauteurcolisage
.Range("I" & derlig) = TxtACréele
.Range("J" & derlig) = TxtANotes
.Range("K" & derlig) = TxtADelaislivraison
.Range("L" & derlig) = TxtAFraistransport
.Range("M" & derlig) = TxtAFacturation
.Range("N" & derlig) = CboAModedegestion
.Range("O" & derlig) = TxtAminicommande
.Range("P" & derlig) = TxtAPrixUnitHT ' => données à afficher en format Euros lors de la saisie dans le text box et lors de l'enregistrement que sont format se mette en monétaire dans le tableau source
J'ai essaye un code avec .NumberFormat = "#,##0.00 $" mais je n'y arrive pas, il me manque une déclaration de variable je pense


End With

End Sub

D'avance merci
 

Dranreb

XLDnaute Barbatruc
Vérifiez au moins si votre TextBox contient bien un texte convertible en Currency !
Mettez
If IsNumeric(TxtAPrixUnitHT.Text) Then .Range("P" & derlig).Value = CCur(TxtAPrixUnitHT.Text) Else .Range("P" & derlig).Value = Empty
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
Faites venir un modèle de Private Sub TxtAPrixUnitHT_KeyPress
pour y corriger la frappe d'un point en virgule notamment.
If Chr$(KeyAscii) = "." Then KeyAscii = Asc(",")
Parce que chez nous la tentative de convertir en Currency un texte contenant des chiffres et un point ça bloque toujours. (en Amérique probablement pas et des virgules seraient ignorées puisque contrairement à nous où c'est un espace, c'est le séparateur de milliers)
 
Dernière édition:

gbstyle

XLDnaute Impliqué
Bonjour
je n'arrive pas à incrémenter votre code dans le miens j'ai toujour une erreur d'éxecution, est il possible que vous m'aidiez à l'incorporer car je n'assimile pas tout a fait ce que vous me demandez.
'''''''''''''''''''''''''''''''''''''''''''''''''''''''
If IsNumeric(TxtAPrixUnitHT.Text) Then .Range("P" & derlig).Value = CCur(TxtAPrixUnitHT.Text) Else .Range("P" & derlig).Value = Empty
''''''''''''''''''''''''''''''''''''''''
Private Sub TxtAPrixUnitHT_KeyPress
pour y corriger la frappe d'un point en virgule notamment.
If Chr$(KeyAscii) = "." Then KeyAscii = Asc(",")
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''


Private Sub BtnAenregistrer_Click()
Ref = Me.TxtARefArticles
With Sheets("Base_Articles")
Set trouvé = .Range("TblBaseArticles").Columns(1).Find(Ref, lookat:=xlWhole, LookIn:=xlValues)
If trouvé Is Nothing Then 'il s'agit d'un nouvelle articles
derlig = .Range("A" & .Rows.Count).End(xlUp).Row + 1 'on se positionne sur la dernière ligne
Else 'existe déjà
derlig = trouvé.Row
If MsgBox("Souhaitez vous modifier l'article ?", vbYesNo) = vbNo Then Exit Sub
End If

.Range("A" & derlig) = TxtARefArticles
.Range("B" & derlig) = CboAFamille
.Range("C" & derlig) = CboASousfamille
.Range("D" & derlig) = TxtADesignation
.Range("E" & derlig) = CboAFournisseur
.Range("F" & derlig) = TxtALongueurcolisage
.Range("G" & derlig) = TxtALargeurcolisage
.Range("H" & derlig) = TxtAHauteurcolisage
.Range("I" & derlig) = TxtACréele
.Range("J" & derlig) = TxtANotes
.Range("K" & derlig) = TxtADelaislivraison
.Range("L" & derlig) = TxtAFraistransport
.Range("M" & derlig) = TxtAFacturation
.Range("N" & derlig) = CboAModedegestion
.Range("O" & derlig) = TxtAminicommande
.Range("P" & derlig) = TxtAPrixUnitHT
End With

End Sub
 

Dranreb

XLDnaute Barbatruc
Bonjour.
Il manque des paramètres à la procédure de l'évènement KeyPress de la TextBox.
Faites en venir le modèle exact à l'aide des deux larges listes déroulantes qui surmontent la fenêtre de code. (À gauche sélectionnez TxtAPrixUnitHT et à droite KeyPress)
Et à la fin n'affectez plus directement le texte de la textbox mais sa conversion en Currency.
Vos ComboBox me donnent à penser que vous auriez intérêt à utiliser mon objet ComboBoxLiées.
En remplaçant la TxtARefArticles aussi par une CboARefArticles (enfin moi je l'appellerais CBxARefArticles dans ma codification des trigrammes d'objets)
 
Dernière édition:

gbstyle

XLDnaute Impliqué
Oula je crois que vous avez surestimé le petit novice que je suis, je dois avoué que vos explication me déplace totalement
malgré quelque essais je vous joint une copie de mon fichier peut être que cela sera un peu plus clair.

Je vous remercie par avance si vous pouvez m'aider à cette mise en forme.
 

Dranreb

XLDnaute Barbatruc
J'ai dit plusieurs choses. Qu'est-ce que vous n'avez pas compris ?
Ce n'est pas une question de mise en forme c'est une question de mise au bon type de donnée. D'ailleurs il me semble qu'il manque aussi des CDbl pour convertir en nombre certaines TextBox.
Le modèle de procédure ayant été installé à l'aide des listes déroulantes "Objet" et "Procédure":
VB:
Private Sub TxtAPrixUnitHT_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
If KeyAscii = Asc(".") Then KeyAscii = Asc(",")
End Sub
Et à la fin des affectations :
VB:
    If IsNumeric(TxtAPrixUnitHT.Text) Then
      .Range("P" & derlig) = CCur(TxtAPrixUnitHT.Text)
    ElseIf TxtAPrixUnitHT.Text = "" Then
      .Range("P" & derlig) = Empty
    Else
      .Range("P" & derlig) = "(" & TxtAPrixUnitHT.Text & ")"
      End If
Pour ne pas refaire ce cirque pour toutes les TextBox concernées vous pouvez écrire cette procédure :
VB:
Private Function ValeurTBx(ByVal TBx As MSForms.TextBox)
If IsNumeric(TBx.Text) Then
  ValeurTBx = CDbl(TBx.Text)
ElseIf TBx.Text = "" Then
  ValeurTBx = Empty
Else: ValeurTBx = TBx.Text: End If
End Function
Comme ça il suffira de faire :
VB:
.Range("F" & derlig) = ValeurTBx(TxtALongueurcolisage)
 
Dernière édition:

gbstyle

XLDnaute Impliqué
Merci cela fonctionne, j'aimerai cependant savoir si vous pouvez vérifiez que j'ai bien adapté votre code sur le fichier.
Par contre j'ai un petit soucis lors d'un double clic dans ma list view je fait apparaitre mes champ pour une éventuelle modification de la fiche dans le formulaire. Tout les champs sont ok sauf le champs prixunit
 

Dranreb

XLDnaute Barbatruc
Bonjour.
Vous devriez joindre à nouveau votre fichier.
Je crois que c'est dans celui ci que vous voudriez pouvoir mettre à jour vos articles en les cherchant par n'importe quel critère parmi les colonnes de tête, et pour lesquels il faudrait des ComboBox…
 

gbstyle

XLDnaute Impliqué
Bonjour Danreb non c'était sur une autre de mes demandes :
affichage d'une concatenation de valeur dans une combobox

Mon problème est pour une question de mise en forme et de confidentialité je suis obligé de diminuer un peu les infos, le userform d'origine et donc a chaque modification comme tu me l'as dis sur mon autre sujet j'ai des mises à jour pas top.
Est il possible que je te fasse parvenir en Pv la base global que tu y jette un œil sur l'architecture car à te lire je crois qu'on pourrais grandement simplifié sont fonctionnement
 

Statistiques des forums

Discussions
311 720
Messages
2 081 920
Membres
101 840
dernier inscrit
SamynoT