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
Oui, oui. on pourrait aussi préparer la date dans la colonne concernée juste après le Redim TVLx effectué par la CLsx_Change pour vider la fiche par appel subséquent de Garnir…
Pour ton dernier poste: manque d'abord les affectations aux TVLF(1, …) des valeurs des TextBox.
La méthode ValeursVers de l'objet ComboBoxLiées ne s'applique qu'aux valeurs des ComboBox dont il a la charge.
 

Dranreb

XLDnaute Barbatruc
Non, avant.
Il ne faut pas s'occuper des ComboBox prises en charge par l'objet ComboBoxLiées, seulement les autres contrôles. Il faut les affecter aux bonnes colonnes de TVLF. Il faut faire toutes les affectations qu'il y a dans GarnirFournisseur, mais en sens inverse, et en veillant à ce que les textes représentant des données numériques soient convertis en nombres. Par exemple pour l'article cette fois :
VB:
TVLA(1, 17) = CCur(Me.TxtAPrixUnitHT.Text)
Tu peux aussi faire
VB:
TVLA(1, 17) = ValeurTBx(TxtAPrixUnitHT, vbCurrency)
si tu écris derrière une :
VB:
Private Function ValeurTBx(ByVal TBx As MSForms.TextBox, _
   Optional ByVal TypeDon As VbVarType = vbDouble)
On Error Resume Next
If TBx.Text = "" Then
   ValeurTBx = Empty
ElseIf TypeDon = vbDate Then
   ValeurTBx = CDate(TBx.Text)
ElseIf TypeDon = vbString Or Not IsNumeric(TBx.Text) Then
   ValeurTBx = TBx.Text
ElseIf TypeDon = vbCurrency Then
   ValeurTBx = CCur(TBx.Text)
Else
   ValeurTBx = CDbl(TBx.Text)
   End If
End Function
Elles doivent être faites d'abord, qu'on soit en Ajout ou en Modification. Il n'y a que les valeurs des ComboBox qui doivent venir les compléter grâce à l'instruction CLsF.ValeursVers TVLF, et ce seulement en ajout, vu qu'elles y sont déjà si c'est une fiche existante.
 
Dernière édition:

gbstyle

XLDnaute Impliqué
Bonjour Dranreb désolé de n'avoir pu travailler sur le sujet ce week end, 3ans de mes loulou donc week très chargé.
Alors si j'ai bien compris dans un premier temp tu attend ce type d'écriture, je n'ai pas encore changé les format numérique car je n'ai pas tout assimilé a ton dernier post

Private Sub CBnValiderF_Click()

TVLF(1, 3) = CCur(Me.CBxGroupe.Text)
TVLF(1, 4) = CCur(Me.TxtAdresse.Text)
TVLF(1, 5) = CCur(Me.TxtCP.Text)
TVLF(1, 6) = CCur(Me.TxtVille.Text)
TVLF(1, 7) = CCur(Me.TxtPays.Text)
TVLF(1, 8) = CCur(Me.TxtNom.Text)
TVLF(1, 9) = CCur(Me.TxtPrénom.Text)
TVLF(1, 10) = CCur(Me.TxtTel.Text)
TVLF(1, 11) = CCur(Me.TxtFax.Text)
TVLF(1, 12) = CCur(Me.TxtPortable.Text)
TVLF(1, 13) = CCur(Me.TxtEmail.Text)
TVLF(1, 14) = CCur(Me.TxtSiteinternet.Text)
TVLF(1, 15) = CCur(Me.TxtCréele.Text)
TVLF(1, 16) = CCur(Me.CBxDelaislivraison.Text)
TVLF(1, 17) = CCur(Me.CBxFraistransport.Text)
TVLF(1, 18) = CCur(Me.CBxFacturation.Text)
TVLF(1, 19) = CCur(Me.TxtNote.Text)

If LCouF = 0 Then
CLsF.ValeursVers TVLF
CLsF.Lignes.Add.Range.Value = TVLF
CLsF.Actualiser
Rem. Refaire un Dictionary ? Refiltrer quelque chose ? On verra !
Else
CLsF.Lignes(LCouF).Range.Value = TVLF
End If

End Sub
 

Dranreb

XLDnaute Barbatruc
Bonjour.
il n'y a à ma connaissance que le texte du prix unitaire de l'article qui doive être converti au passage en le type de donnée Currency (c'est un entier exceptionnellement long, valant 10000 fois sa valeur conventionnelle, utilisé pour les montants, et donnant automatiquement lieu à un format de cellule monétaire si elle n'en possède pas déjà un)

Installe et utilise peut être plutôt la Function ValeurTBx pour faire moins d'erreur. Mais ne précise vbCurrency comme second paramètre que pour le prix unitaire de l'article. Ce second paramètre est facultatif. S'il n'est pas précisé, vbDouble est assumé. Le texte de la TextBox est alors converti en nombre s'il peut l'être.
 
Dernière édition:

gbstyle

XLDnaute Impliqué
C noté je dois donc enlever les CCur
j'avais ce type de procédure renseigné pour la valeur du PUHT

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
+
cette procédure pour changer la saisie du point en virgule
Private Sub TxtAPrixUnitHT_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
If KeyAscii = Asc(".") Then KeyAscii = Asc(",")

End Sub

Dois je tout remplacer par celle que tu me recommande ?

Sinon as tu regarder ce que j'ai compléter dans mon dernier post, je pense qu'il manque encore quelque infos.
 

Dranreb

XLDnaute Barbatruc
Qu'est-ce que ça apporte de mettre un message de confirmation ?
Ça pousse seulement les gens à prendre l'habitude de devoir inutilement faire Entrée systématiquement et sans réfléchir après avoir cliqué sur le bouton de validation.
 

gbstyle

XLDnaute Impliqué
Par contre j'ai juste un petit soucis, c'est par exemple si je modifie mon puHT il m'enregistre bien mon infos, par contre dans mon tableau source ma dernière colone sur la feuille excel est cencé calculer automatiquement ma valeur de stock,
Et donc quand je fais ma mise à jour il me supprime ma formule du tableau, et donc ne me met pas à jour la valeur du stock :/
Comme je n'ai plus les formule de calcul de stock sur mes entrée / Sortis dans mon tableau source
 

Dranreb

XLDnaute Barbatruc
Aïe! Intercale un .Resize(, 20) pour ne pas écraser les formules entre .Range et .Value, si 20 est bien le nombre de colonnes contenant des constantes.
VB:
CLsA.Lignes.Add.Range.Resize(, 20).Value = TVLA
VB:
CLsA.Lignes(LCouA).Range.Resize(, 20).Value = TVLA
 
Dernière édition:

gbstyle

XLDnaute Impliqué
Aie je n'aime pas quand tu fais des choses comme ca :/
En gros les valeurs que je complète de mon tableau sont de 1 à17 et de 19 à 21
Les colonnes 18 / 22 / 23 / 24 / 25 / 26 / 27 sont des formules.
Comment je fais pour intégrer le resize :/
Ca ne concerne que les données articles pas fournisseur

je l'intègre ici avant garnir article :
Private Sub CLsA_Résultat(Lignes() As Long)
Dim Tdon(), TLBx(), Ldon As Long, LLBx As Long, C As Long
If UBound(Lignes) = 1 Then
LCouA = Lignes(1)
TVLA = CLsA.Lignes(LCouA).Range.Value
GarnirArticle
Else
TLA = Lignes
Tdon = CLsA.PlgTablo.Value
ReDim TLBx(1 To UBound(TLA), 1 To 8)
For LLBx = 1 To UBound(TLA)
Ldon = TLA(LLBx)
For C = 1 To 8: TLBx(LLBx, C) = Tdon(Ldon, Choose(C, 1, 4, 5, 24, 25, 27, 26, 28)): Next C, LLBx
ListBox1.List = TLBx: End If
End Sub
 

Statistiques des forums

Discussions
312 329
Messages
2 087 327
Membres
103 516
dernier inscrit
René Rivoli Monin