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
 

gbstyle

XLDnaute Impliqué
Si je comprend bien,
Il faut maintenant que j'appel le DicI à chaque changement d'article pour affichage dans la LbxStock
Comment dois-je penser:
1- j'intégré la mise à jour de la listBox dans ma Clse_Résultat qui met déjà à jour mon historique de mouvement et donc redéclarer une 2ème LbxSTock et la compléter par un appel du DicI
 
Dernière édition:

gbstyle

XLDnaute Impliqué
Bonjour Dranreb, j'ai donc placé un Set DicI dans le CbnEnregistrerES je pense que c'est à cette endroit qu'il devrait se situer par contre je n'arrive pas a faire la modif sur la ClsA_Résultat.
VB:
Private Sub CBnEValider_Click()

TVLE(1, 3) = ValeurTBx(Me.TBxCPUHT, vbCurrency)
TVLE(1, 7) = ValeurTBx(Me.TBxERéfBL)
TVLE(1, 8) = ValeurTBx(Me.TBxEQte, vbDouble)
TVLE(1, 9) = Me.CBxEemplacement.Text
TVLE(1, 10) = ValeurTBx(Me.TBxERemarque)


If LCouE = 0 Then
    CLsE.ValeursVers TVLE
    CLsE.Lignes.Add.Range.Resize(, 10).Value = TVLE
    CLsE.Actualiser
    Set DicI = DicILBxStock()
Else
   
    CLsE.Lignes(LCouE).Range.Resize(, 10).Value = TVLE '10=nombre de colonnes contenant des constantes
    End If
End Sub
 

Dranreb

XLDnaute Barbatruc
Bonjour.
Il a aussi été mis dans la UserForm_Initialize j'espère ?
Qu'est ce qui coince en essayant comme j'ai dit If DicI.Exists(TVLA(LCouA, 1)) Then LBxStock.List = DicI(TVLA(LcouA, 1)) Else LBxStock.Clear ?
Édition: N'importe quoi j'ai dit :oops:
If DicI.Exists(TVLA(1, 1)) Then LBxStock.List = DicI(TVLA(1, 1)) Else LBxStock.Clear
 
Dernière édition:

gbstyle

XLDnaute Impliqué
Oui comme je te l'avais mis hier, tu m'avais répondu de garder la déclaration du DicI dans l'option explicit
VB:
Private Sub UserForm_Initialize()
Set CLsA = New ComboBoxLiées
CLsA.Plage [TblBaseArticles]
CLsA.Add Me.CBxARéfArticle, 1, Croissant:=False
CLsA.Add Me.CBxADesArticle, 4
CLsA.CouleurSympa
CLsA.Actualiser
Set DicA = DicoSujet(CLsA.Item(CBxARéfArticle).SujetBdD)
If Not Me.ActiveControl Is FrmA Then CLsA.Stopper

Set CLsC = New ComboBoxLiées
CLsC.Plage [TblSuiviscommande]
CLsC.Add Me.CBxCRechecheRéfcommande, 1, Croissant:=False
CLsC.Add Me.CBxARéfArticle, 8
CLsC.Add Me.CBxADesArticle, 9
CLsC.CouleurSympa
CLsC.Actualiser
If Not Me.ActiveControl Is FrmC Then CLsC.Stopper

Set CLsE = New ComboBoxLiées
CLsE.Plage [TblSuivisEntreeSortis]
CLsE.Add Me.CBxARéfArticle, 1, Croissant:=False
CLsE.Add Me.CBxADesArticle, 2
CLsE.Add Me.CBxCRechecheRéfcommande, 4
CLsE.Add Me.CBxType, 5
CLsE.Add Me.CBxEDate, 6
CLsE.Add Me.CBxEemplacement, 9
CLsE.CouleurSympa
CLsE.Actualiser
If Not Me.ActiveControl Is FrmE Then CLsE.Stopper

Set DicI = DicILBxStock()

End Sub
 

gbstyle

XLDnaute Impliqué
Je n'étais pas partis sur ce type de code, j'intègre donc ce code ici, je pense qu'il me manque un end if dans l'architecture non?
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)
   'LLBx = DicI
   'For C = 1 To 5: TLBx(LLBx, C) = TDon(Ldon, C): Next C, LLBx
   'LBxStock.List = DicI
  
   If DicI.Exists(TVLA(1, 1)) Then LBxStock.List = DicI(TVLA(1, 1)) Else LBxStock.Clear
   End If
 
End Sub
 

Dranreb

XLDnaute Barbatruc
Il y a des tas de choses en trop là dedans.
À commencer par l'instruction Dim toute entière et toutes les instructions qui utilisaient ces variables.
Il vaudrait mieux je crois au début If UBound(Lignes) > 1 The Exit Sub, et plus d'autre test ensuite.
Là tu le faisais précisément quand il N'y avait PAS un article unique sélectionné.
 

gbstyle

XLDnaute Impliqué
Quel type de test dois-je envisager, et il sont a faire juste avant le garnir article ?
VB:
Private Sub CLsA_Résultat(Lignes() As Long)
If UBound(Lignes) > 1 Then 'Exit Sub
   LCouA = Lignes(1)
   TVLA = CLsA.Lignes(LCouA).Range.Value
   GarnirArticle
Else
   TLA = Lignes
   ReDim TLBx(1 To UBound(TLA), 1 To 20)
   Set DicI = DicILBxStock()
   If DicI.Exists(TVLA(1, 1)) Then LBxStock.List = DicI(TVLA(1, 1)) Else LBxStock.Clear
   End If
  
End Sub
 

Dranreb

XLDnaute Barbatruc
Non d'une pipe ! Simplement comme ça :
VB:
Private Sub CLsA_Résultat(Lignes() As Long)
If UBound(Lignes) > 1 Then Exit Sub ' On sort tout de suite s'il y a plusieurs lignes
LCouA = Lignes(1)
TVLA = CLsA.Lignes(LCouA).Range.Value
GarnirArticle
If DicI.Exists(TVLA(1, 1)) Then LBxStock.List = DicI(TVLA(1, 1)) Else LBxStock.Clear
End Sub
 

gbstyle

XLDnaute Impliqué
Bonjour Dranreb
j'y était presque au même résultat.
En tout cas j'ai un résultat satisfaisant, je pense qu'il me manque une infos, ma list box me sort bien mes infos en fonction de l'article choisis, cependant je voulais avoir la possibilité de consulter tout mes articles présent sur un meme emplacement, l'objectif était de pouvoir réaliser a terme une extraction.
 

Dranreb

XLDnaute Barbatruc
Bonjour.
Si c'est également par compilation des mouvements, faire aussi un Dictionary par emplacements, mais le consulter pour garnir une ListBox au CLsE_Change en prenant pour clé la valeur de la ComboBox, parce qu'on n'a pas d'autre CLs spécifique à l'emplacement.
 
Dernière édition:

gbstyle

XLDnaute Impliqué
Bonjour Dranreb,
alors après quelque jour de vacance, ou j'ai était un peu déconnecté du monde en famille me revoici pour finaliser donc mon besoin.
J'ai donc créer une listbox LbxStockE pour y affecter les recherches par emplacement

Je suis partis sur le même type de déclaration puisque les données d'entrée sont prélevé du même endroits, a mon avis il y a un petit manque ...
Par contre si j'ai bien compris il faut que j'appel le DicE dans le Clse_Change
ci joint la déclaration :
VB:
Function DicELBxStockE() As Dictionary 'Dictionnaire pour listbox Suivis emplacement
Dim TR(), RefArt As SsGr, DsgnArticle As String, Emplac As SsGr, LR As Long, TypMvt As SsGr, Détail
Set DicELBxStockE = New Dictionary
For Each Emplac In Gigogne(WshSuivES, 1, 9, 5) 'Définition des colonnes de classement et regroupements (réf, emplacement, mouvement)
    ReDim TR(1 To Emplac.Count, 1 To 3)
    LR = 0
    For Each RefArt In Emplac.Co ' Pour chaque SsGr d'article de l'emplacement
       LR = LR + 1 ' Nouvelle ligne résultante (Incrémente le numéro de ligne du tableau dans lequel on écrit).
       TR(LR, 1) = RefArt.Id
       For Each TypMvt In RefArt.Co 'Pour chaque type de mouvement de cet emplacement
          Select Case TypMvt.Id 'Selon cas du type de mouvement
             Case "Entrée": TR(LR, 2) = TR(LR, 2) + TypMvt.Somme(8) 'Cas mouvement entrée: ajout somme des quantités des lignes détail
             Case "Réservé": TR(LR, 2) = TR(LR, 2) + TypMvt.Somme(8) 'Cas mouvement réservé: ajout somme des quantités des lignes détail
             Case "Sortie": TR(LR, 2) = TR(LR, 2) - TypMvt.Somme(8) 'Cas mouvement sortie: retrait somme des quantités des lignes détail
             End Select 'Fin de bloc selon cas.
          For Each Détail In TypMvt.Co 'Pour chaque ligne détail contenue dans ce type de mouvement
             If Not IsEmpty(Détail(10)) Then TR(LR, 3) = Détail(10) 'Si la remarque n'est pas vide elle est placée en colonne 5
             Next Détail, TypMvt, RefArt
    DicELBxStockE.Add Emplac.Id, TR: Next Emplac
End Function
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
Bonjour.
L'ordre des colonne de regroupement spécifié suivant ne me semble pas bon d'après mes souvenirs.
Gigogne(WshSuivES, 1, 9, 5). Est ce que ce ne serait pas plutôt :
Gigogne(WshSuivES, 9, 1, 5) ?

Exceptionnellement on pourrait écrire une CBxEmplacement_Change pour garnir la ListBox, bien que je n'aime pas en écrire pour des CBx gérées par un ComboBoxLiées. Mais comme c'est assez étranger à tout le reste…
 
Dernière édition:

Statistiques des forums

Discussions
312 078
Messages
2 085 120
Membres
102 783
dernier inscrit
Basoje