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
Pourtant il n'y avait pas de problème avec le PUHT dans l'autre UserForm…
Dans le principe général des mise à jours utilisant un ComboBoxLiées, c'est normal que tout s'efface quand on renseigne un élément d'identification formant avec les autres une combinaison inexistante, car alors ce sera forcément un ajout, et ce en principe à partir d'une fiche vierge. Il faut tout spécifier de l'identification avant de renseigner quoi que ce soit d'autre. Si ça ne va pas il faut ruser pour contourner ce comportement parfaitement normal.
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
Ça s'efface parce que la CLsE_Change présente exprès un tableau vide à la procédure de garnissage de la fiche pour tout nettoyer afin de présenter une fiche vierge, puisqu'on veut en créer une, et que dans le grand principe général du système c'est toujours à partir de rien, donc tous contrôles associés à cette nouvelle identification à blanc !
Une des façon de ruser peut être de garnir certains TVLE à partir d'autre sources présentes TVLC ou TVLA juste après le Redim TVLE. On peut raisonnablement considérer que si on a un article sous le coude et qu'on fait venir une fiche Sortie vierge par saisie d'un élément d'identification inexistant, elle doit quand même déjà être préremplie, dans ce cas, des infos de l'article, non ? Et aussi peut être de celles de la commande si on en a une en cours. Le test pour savoir si on a un article sous le coude, c'est toujours le même: If LCouA <> 0 Then
 
Dernière édition:

gbstyle

XLDnaute Impliqué
bonjour Dranreb
Alors j'essaye ceci mais en vain, en faite j'ai un peu de mal comprendre :
dans un premier temp je selectionne un article du CLsA, et c'est lui qui devrais me préremplir les infos si je comprend bien.
J'avais fait ce ceci, mais à mon avis c'est plutôt une procédure de Clsa_Change qui me manque, avec un appel de garnir article pas existant à ce jour.
VB:
Private Sub CLsE_Change(ByVal Complet As Boolean, ByVal NbrLgn As Long)
If NbrLgn = 1 Then CBnEValider.Caption = "Modifier": Exit Sub
If NbrLgn = 0 Then 'LBxA.Clear
LCouE = 0
ReDim TVLE(1 To 1, 1 To 10)
If LCouA <> 0 Then
  TVLE(1, 3) = TVLA(1, 17)
  End If

GarnirEntree
CBnEValider.Caption = "Ajouter"
End If
End Sub
 

gbstyle

XLDnaute Impliqué
Bonjour Dranreb alors j'ai pu avancer un peu sur mon sujet et j'aimerai savoir si c'est ce que tu attendais
par contre je n'ai pas compris ce que tu voulais dire par plusieur Entrée/sorties on ne fait rien?
je te joint le fichier et voici la private sub Clsa_Résultat
Par contre mon if Lcoua <>0 ne doit pas etre au bon endroit depuis la dernière fois.
J'ai également modifier mes Raz_C et Raz E afin de ne pas supprimer l'article selectionner est ce que ca te parrait cohérent ?
VB:
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 20)
   End If
End Sub
VB:
Private Sub GarnirArticle()
Me.TBxCPUHT.Text = TVLA(1, 17)
End Sub
VB:
Private Sub CBnRazA_Click()
CLsA.Nettoyer
End Sub
Private Sub CBnRazC_Click()
Dim RefArt As String
RefArt = CBxARéfArticle.Text
CLsC.Nettoyer
CBxARéfArticle.Text = RefArt
End Sub
Private Sub CBnRazE_Click()
Dim RefArt As String
RefArt = CBxARéfArticle.Text
CLsE.Nettoyer
CBxARéfArticle.Text = RefArt
End Sub
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
Bonjour.
Il faut toujours aussi une Sub CLsA_Change.
Les _Change et _Résultat vont toujours de paire. Si je n'en ai pas fais un évènement unique c'est seulement parce que je n'ai pas de liste de lignes à proposer quand il n'y a aucune correspondance, c'est à dire quand NbrLgn = 0. Aussi la _Résultat n'est-elle exécutée que si dans la _Change NbrLgn était > 0. Mais les deux procédures doivent être pensées en même temps.
Là si je regarde la CLsE_Change et la CLsE_Résultat je vois que si le nombre de ligne en correspondance, (c'est à dire NbrLgn dans la _Change et UBound(Lignes) dans la _Résultat) est à 1, d'accord on on garnit LCouE et TVLE, s'il est à 0 on présente une fiche vierge, s'il est > 1 on garnit une ListBox mais on laisse LCouE et TVLE à leurs dernières valeurs qui peuvent n'avoir aucun rapport avec les nouveaux choix effectués, ce qui ne me parait pas normal.
 

gbstyle

XLDnaute Impliqué
Bonjour dranreb peux tu si possible me surligné dans le code ou tu vois le dysfonctionnement, car si je te lis il me manquerait dans la Clse une redim non?
VB:
Private Sub CLsA_Change(ByVal Complet As Boolean, ByVal NbrLgn As Long)
If NbrLgn = 1 Then Exit Sub
If NbrLgn = 0 Then
LCouA = 0
ReDim TVLA(1 To 1, 1 To 20)
    GarnirArticle
End If
End Sub
 

Dranreb

XLDnaute Barbatruc
Bonjour. Tu me parle de CLsE mais tu montre une CLsA_Change ?
Mais là aussi, pourquoi ce test If NbrLgn = 0 Then ?
Aurais tu prévu d'autres initialisations dans la CLsA_Résultat quand UBound(Lignes) > 1 ?
A mon avis il faut le faire dans tous les cas où on ne peut pas fixer exactement une seule ligne existante. Donc 0 ou plusieurs, donc pas de test puisque quand c'est 1 on sort tout de suite pour que la CLsA_Résultat garnisse aussitôt cette ligne existante.
 
Dernière édition:

gbstyle

XLDnaute Impliqué
oui désolé je me suis mal exprimé c'était le code Clse_change ou tu me faisait une remarque sur le fait que Lcoue Tvle resté à leur dernière valeur.
Et le code que je t'ai ajouté c'était le Clsa_Change qui n'existait pas.
Ce sont 2 point différents dslé
Pour le Clsa_Change je ne dois pas faire de contrôle si aucune ligne est existante si je comprend bien donc mon code deviendrait plutôt de ce type :
VB:
Private Sub CLsA_Change(ByVal Complet As Boolean, ByVal NbrLgn As Long)
If NbrLgn = 1 Then Exit Sub
  GarnirArticle
End If
End Sub
 
Dernière édition:

gbstyle

XLDnaute Impliqué
Et bien écoute pour ce sujet de suivis mouvement entrée/ sortis tout roule, je pense que l'idée d'avoir rajouter l'idée de filtrer par article a était quelque chose de bien. et merci.

J'aimerai avoir ton avis sur comment devrais je faire pour suivre l'état des stock par emplacement :
- A aujourd'hui j'ai créer un tableau croisée dynamique mais qui correspond pas à mes attentes
- J'ai une table mouvement qui me recence mes entrée, sorties, retour sav, et mes emplacement.
- mon soucis c'est que mes entrée comme mes sorties sont des entier positif il me faut donc définir les critères pour calculer des stocks.

Je souhaiterai avoir l'état des stocks par emplacement et ou articles :
As tu une astuce qui m'éviterais des formules longue et sources d'énergie avec beaucoup de critères.
Je pense qu'il faut que je créer une nouvelle feuille, mais j'arrive pas encore à visualiser comment je devrais la compléter
Il faut que je puisse avoir quelque chose comme ceci je pense :
- sélection d'un article : résultat du stock des différent emplacement de l'article et
- sélection d'un emplacement : résultat du stock des différent articles sur cette emplacement

Je ne sais pas si ca va être jouable sans passer par des formule spécifique mais qui j'ai peur vont alourdir énormément la base.
 

Statistiques des forums

Discussions
311 725
Messages
2 081 944
Membres
101 849
dernier inscrit
florentMIG