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
Mettez simplement des infos bidon dans la base, ça devrait aller, non ?

Un modèle de mise à jour, avec objet ComboBoxLiées, un peu établi à l'aveugle :
VB:
Option Explicit
Private WithEvents CL As ComboBoxLiées, LCou As Long, TVL()

Private Sub UserForm_Initialize()
Set CL = Création.ComboBoxLiées
CL.Plage [TblBaseArticles]
CL.Add CBxRefArticle, 1
CL.Add CBxFamille, 2
CL.Add CBxSousFamille, 3
CL.Add CBxDésignation, 4
CL.Add CBxFournisseur, 5
CL.CouleurSympa
CL.Actualiser
End Sub

Private Sub CL_Change(ByVal Complet As Boolean, ByVal NbrLgn As Long)
If NbrLgn = 1 Then Exit Sub
LCou = 0
ReDim TVL(1 To 1, 1 To 16)
GarnirAutresContrôles
End Sub

Private Sub CL_BingoUn(ByVal Ligne As Long)
LCou = Ligne
TVL = CL.Lignes(LCou).Range.Value
GarnirAutresContrôles
End Sub

Private Sub GarnirAutresContrôles()
TBxLongueurColisage.Text = TVL(1, 6)
TBxLargeurColisage.Text = TVL(1, 7)
TVL(1, 8) = TBxHauteurColisage.Text
TBxCrééLe = TVL(1, 9)
TBxNotes.Text = TVL(1, 10)
TBxDelaisLivraison.Text = TVL(1, 11)
TBxFraisTransport.Text = TVL(1, 12)
TBxFacturation.Text = TVL(1, 13)
CBxModeDeGestion.Text = TVL(1, 14)
TBxMiniCommande.Text = TVL(1, 15)
TBxPrixUnitHT.Text = TVL(1, 16)
End Sub

Private Sub CBnEnregistrer_Click()
TVL(1, 6) = ValeurTBx(TBxLongueurColisage)
TVL(1, 7) = ValeurTBx(TBxLargeurColisage)
TVL(1, 8) = ValeurTBx(TBxHauteurColisage)
TVL(1, 9) = Now
TVL(1, 10) = ValeurTBx(TBxNotes)
TVL(1, 11) = ValeurTBx(TBxDelaisLivraison)
TVL(1, 12) = ValeurTBx(TBxFraisTransport)
TVL(1, 13) = ValeurTBx(TBxFacturation)
TVL(1, 14) = ValeurTBx(CBxModeDeGestion)
TVL(1, 15) = ValeurTBx(TBxMiniCommande)
TVL(1, 16) = ValeurTBx(TBxPrixUnitHT, TypDon:=vbCurrency)
If LCou = 0 Then
   CL.ValeursVers TVL
   CL.Lignes.Add.Range.Value = TVL
   CL.Actualiser
Else
   CL.Lignes(LCou).Range.Value = TVL
   End If
End Sub
Private Function ValeurTBx(ByVal TBx As MSForms.TextBox, Optional ByVal TypDon As VbVarType = vbDouble)
If IsNumeric(TBx.Text) And TypDon <> vbString Then
   If TypDon = vbCurrency Then ValeurTBx = CCur(TBx.Text) Else ValeurTBx = CDbl(TBx.Text)
ElseIf TBx.Text = "" Then
   ValeurTBx = Empty
Else: ValeurTBx = TBx.Text: End If
End Function
 

gbstyle

XLDnaute Impliqué
c'est un peu plus compliqué que ça :/ ...
exemple typique de code qui me serait d'une grande utilité mais difficile à adapter au projet étant donnée que toute les infos n'y sont pas renseigné :/ d'où mon besoin :/
 
Dernière édition:

gbstyle

XLDnaute Impliqué
c'est ce que j'essaye de faire mais trop compliqué j'essaie de travailler sur une base simple recensant 4 page
Base création fournisseur
Base création article
Base mouvement entrée sortie/ gestion mutli emplacement définis
Base etat des stocks
Je doute que toute ces infos avec un minimum de précision rentre que sur un seul userform d'où mon idée de créer des multipages.
si je pouvais t'envoyer mon fichier tu comprendrais très rapidement vu ta maitrise ma problématique

D'avance merci
 

gbstyle

XLDnaute Impliqué
Si c'est pour un suivi de stock je rajouterais simplement une colonne Stock actuel et un certain nombre de paires de colonnes avec Date/Heure et Quantité apportée ou retirée, et je me servirais d'un seul UserForm pour tout faire.

je t'ai joint un lien cjoint pour que tu me donne ton point de vue sur l'architecture ca m'interesse fortement
Et encore merci si tu prend un petit peu de temp pour y jeter un oeil
 

Dranreb

XLDnaute Barbatruc
Moi je pense que ce serait plus simple s'il y avait juste un fichier Articles avec à la fin la quantité en stock et un petit historique sous forme de paires de colonnes dates et heure et quantité apportée ou retirée.
Mais bon… S'il faut aussi une base Fournisseur et une base Clients…
Il est possible d'utiliser plusieurs objet ComboBoxLiées dans un même UserForm s'appyant sur des base différentes. Mais attention, s'ils ont des ComboBox en commun il ne doivent pas être actifs en même temps. Heureusement l'objet est muni d'une méthode Stopper.
 

gbstyle

XLDnaute Impliqué
En effet la base article et necessaire pour référencement ou déférencement au cas ou.
Dans la logique pas d'article sans fournisseur :/

Les deux autres plages sont necessaire pour assurer les mouvement entrée/sorties et etat des stocks
Par contre d'un premier point de vue as tu regarder un peu en détail la structure des codes car a te lire il y avait beaucoup de chose à simplifier.
 

Dranreb

XLDnaute Barbatruc
J'ai regardé un peu, je trouve ça compliqué. Je suis assez allergique aux MultiPage et en particulier, là, je ne digère pas la structure de la page Mouvements Entrées / Sorties avec cette répétition de contrôles. La structure du tableau feuille Mouvement_Entrée_Sortie a pourtant l'air plus simple que ça, même si elle me semble à première vue compliquer les choses un peu inutilement.
 

gbstyle

XLDnaute Impliqué
La raison est simple je ne souhaite pas que les utilisateurs de la base à terme est accés au données tableau pour s'affranchir de toute erreur de manipulation de saisie ou autre.
La structure multipage me permettait jusement de bloquer ces accès par un verrouillage des feuilles a terme.
Et pour la page mouvement et bien l'objectif était d'avoir un petit formulaire permettant une saisie de 8 référence pour un même fournisseur en une seule fois, j'ai bien imaginer d'autre solutions mais l'objectif et de gagner en temp de saisie/traitement/ et de recherche

Si je suis votre raisonnement je ne devrait pas gérer les mouvements de cette façon, comment vous verriez les choses ?

Je suis à l'écoute de toute proposition qui peuvent réponde à mon besoin, rien n'est figer. :/
 

Dranreb

XLDnaute Barbatruc
Je pense à priori qu'un seul UserForm avec une seule page et toutes les informations visibles simultanément serait jouable.
Bon, admettons pour gérer les mouvements de cette façon. Mais saisissez un seul mouvement à la fois, dans un seul ensemble de contrôles. Une commande aurait me semble-t-il les même fournisseur, Réf commande et date. L'objet ComboBoxLiée pourrait facilement vous isoler toutes les lignes ayant ces trois informations en commun. Il serait possible de les visualiser dans la ListView et d'en rappeler une pour correction ou suppression. Il serait souhaitable de réserver une colonne de la ListView, de largeur nulle, au numéro de la ligne de commande. À moins de prévoir une petite table à une dimension de ces numéros. L'évènement Résultat de l'objet ComboBoxLiées vous la transmettrait directement, il n'y aurait qu'à l'affecter à variable table globale.
Reste que je ne comprend pas bien pourquoi l'état des stock n'est pas rangé dans des colonnes en bout de la base Articles.
 
Dernière édition:

gbstyle

XLDnaute Impliqué
Et bien en fait l'état des stock pourrait se présenter ainsi avec une gestion de multi emplacement de stock pour un seul et meme article.
C'est pour cela que je ne souhaitait pas l'intégrer à la base article qui est le recensement des données d'entrées

Je vais essayer de revoir ma copie en effet je pense qu'il y a plus simple a réaliser