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é
Oui c'est bien ce qu'il me semblait j'aurai forcement plus de ligne de mouvement que de ligne synthèse par emplacement. je vais garde le code sous le coude avec un petit commentaire et j'aviserai en temp voulu,
Par contre afin de pouvoir intégrer le résultat dans ma listbox de l'userform inventaire, dois je déclarer un nouveau ClsI en lien avec la réf et l'emplacement afin de pouvoir afficher par exemple lors de la selection d'un emplacement dans le Clse le résultat des stock de la plage du tableau que l'on vient de mettre à jour.
 

Dranreb

XLDnaute Barbatruc
Peut être. Personnellement j'aurais plutôt cherché à constituer des Dictionary de listes de numéros de lignes.
Il y a une fonction DicoGig qui transforme en Dictionary une Collection renvoyée par la fonction Gigogne.
 

gbstyle

XLDnaute Impliqué
Tu me parle de cette fonction :
VB:
Function DicoGig(ByVal Gigogne As Collection, Optional ByVal NivMax As Long = 256) As Dictionary
Dim SsGr As SsGr, TE(), TS(), L&, C&
Set SsGr = Gigogne(1)
Set DicoGig = New Dictionary
NivMax = NivMax - 1
If NivMax < 0 Then
   For Each SsGr In Gigogne: DicoGig.Add SsGr.Id, SsGr.Co: Next SsGr
ElseIf TypeOf SsGr.Co(1) Is SsGr Then
   For Each SsGr In Gigogne: DicoGig.Add SsGr.Id, DicoGig(SsGr.Co, NivMax): Next SsGr
Else
   TE = SsGr.Co(1)
   For Each SsGr In Gigogne: ReDim TS(1 To SsGr.Count, LBound(TE) To UBound(TE))
      For L = 1 To SsGr.Count: TE = SsGr.Co(L)
         For C = 1 To UBound(TS, 2): TS(L, C) = TE(C): Next C, L
      DicoGig.Add SsGr.Id, TS: Next SsGr: End If
End Function
Mais mon soucis c'est que dans l'userform inventaire à aucun moment je n'ai de lien avec la WshSuiviStock que l'on vient de créer, je dois donc avouer que ca me parait un peu complexe car pour à l'instant je ne me rappel pas avoir utilisé encore cette fonction :/, je ne vois donc pas à quel moment je dois l'intégrer dans la procédure de l'userform
 

gbstyle

XLDnaute Impliqué
En effet c'est pour cela que je te demandais si je ne devais pas déclarer un nouveau ClsI afin de définir un DicI car les deux sont lié si je me souviens bien.
Je pensais à quelque chose comme ceci initiallement :
VB:
Option Explicit
Private WithEvents CLsC As ComboBoxLiées, LCouC As Long, TVLC(), TLC() As Long, _
        WithEvents CLsE As ComboBoxLiées, LCouE As Long, TVLE(), TLE() As Long, _
        WithEvents CLsA As ComboBoxLiées, LCouA As Long, TVLA(), TLA() As Long, _
        WithEvents CLsI As ComboBoxLiées, LCouI As Long, TVLI(), TLI() As Long
Private DicA As Dictionary, DicI As Dictionary
     
Private Sub UserForm_Initialize()


Set CLsI = New ComboBoxLiées
CLsI.Plage [TblSuivStock]
CLsI.Add Me.CBxARéfArticle, 1, Croissant:=False
CLsI.Add Me.CBxEemplacement, 4
CLsI.CouleurSympa
CLsI.Actualiser
Set DicI = DicoSujet(CLsI.Item(CBxARéfArticle).SujetBdD)
End Sub
 

gbstyle

XLDnaute Impliqué
Mais je me demande comment je peux réussir a faire la liaison pour mise à jour de LbxI lors de la selection à la suite de ce code , dois je créer la propre CLsI Résultat et change afin de mettre à jour une nouvelle LBxI.
VB:
Private Sub CLsE_Résultat(Lignes() As Long)
Dim TDon(), TLBx(), Ldon As Long, LLBx As Long, C As Long
If UBound(Lignes) = 1 Then
   LCouE = Lignes(1)
   TVLE = CLsE.Lignes(LCouE).Range.Value
   GarnirEntree
Else
   TLE = Lignes
   TDon = CLsE.PlgTablo.Value
   ReDim TLBx(1 To UBound(TLE), 1 To 10)
   For LLBx = 1 To UBound(TLE)
      Ldon = TLE(LLBx)
      For C = 1 To 10: TLBx(LLBx, C) = TDon(Ldon, C): Next C, LLBx ' code pour affichage total listbox changer paramètre 1To8 nb colonne affiché dans la list box
      'For C = 1 To 7: TLBx(LLBx, C) = TDon(Ldon, Choose(C, 1, 2, 4, 5, 6, 8, 9)): Next C, LLBx  'choix des colonne à ressortir dans la listbox
   LBxM.List = TLBx: End If

End Sub

J'ai donc ajouté cette procédure :
Qui me donne mes résultat malgré parfois quelque source d'erreur qui me renvois sur un message d'erreur que nous avions déjà traiter je cherche encore l'origine :
VB:
Private Sub CBx_Change()
Parent.CBM_Change Me
End Sub
VB:
Private Sub CLsI_Résultat(Lignes() As Long)
Dim TDon(), TLBx(), Ldon As Long, LLBx As Long, C As Long
If UBound(Lignes) = 1 Then
   LCouI = Lignes(1)
   TVLI = CLsI.Lignes(LCouI).Range.Value
   Else
   TLI = Lignes
   TDon = CLsI.PlgTablo.Value
   ReDim TLBx(1 To UBound(TLI), 1 To 5)
   For LLBx = 1 To UBound(TLI)
      Ldon = TLI(LLBx)
      For C = 1 To 5: TLBx(LLBx, C) = TDon(Ldon, C): Next C, LLBx ' code pour affichage total listbox changer paramètre 1To8 nb colonne affiché dans la list box
     LBxI.List = TLBx: End If

End Sub

Je crois qu'il me manque une mise a jour de la feuille en WshSuivistock à partir de l'userform Inventaire après une saisie pour affichage dans la listbox :/, j'aimerai éviter de devoir quitter mon userform pour cliquer sur la feuille pour mise à jour

J'ai également ajouter un Cbnsupprimer saisie des mouvement au cas ou :
VB:
Private Sub CBnSupprimerE_Click()
If LCouE = 0 Then Exit Sub
If MsgBox("Etes-vous sûr de vouloir supprimer ce mouvement ?", _
   vbYesNo + vbExclamation, Me.Caption) = vbNo Then Exit Sub
CLsE.Lignes(LCouE).Delete
CLsE.Actualiser
End Sub
 
Dernière édition:

gbstyle

XLDnaute Impliqué
C'était pour avoir un visu de rapide de tout les emplacement d'une référence ou du contraire.
Sinon il était difficile d'avoir une recherche rapide en utilisant le meme userform.
J'ai vraiment besoin de ton aide car c'est mon dernier item avec la mise à jour de l'activate worksheet. et mon sujet était clos
De ce que j'ai fait ca fonctionne, j'ai juste mon problème de mise à jour de feuille en cliquant sur Btn enregistrer.
Tu te rendra compte si tu utilise la base l'importance du visu de l'état des stocks je t'assure,
 

gbstyle

XLDnaute Impliqué
Bonjour Dranreb, je suis désolé de revenir t'embeter mais je voulais savoir si tu avais quand meme jeter un rapide petit coup d'œil a ce que j'ai fait pour cloturer le sujet en espérant que ce soit bon, a prioris dans le fonctionnement moi tout est ok mais toi je suis sur que tu y vois des choses pas correct
Par contre j'ai essayer de chercher dans divers forum hier soir comment je pouvais intégrer une procédure "Worsheet activate " Suivis de stocks dans le Bouton enregistrer des mouvement pour mise à jour mais en vain. j'ai vraiment besoin de ton avis pour clôturer le sujet de développement car après ce ne sont que des extraction de feuilles.
Et je te remercie vraiment par avance de tout l'aide que tu m'as apporté.
 

Dranreb

XLDnaute Barbatruc
Bonjour.
Cette fonction devrait renvoyer un dictionnaire par références articles des images de ListBox des stock
VB:
Function DicALBxStock() As Dictionary
Dim TR(), RefArt As SsGr, DsgnArticle As String, Emplac As SsGr, LR As Long, TypMvt As SsGr, Détail
Set DicALBxStock = New Dictionary
For Each RefArt In Gigogne(WshSuivES, 1, 9, 5) 'Définition des colonnes de classement et regroupements (réf, emplacement, mouvement)
   ReDim TR(1 To RefArt.Count, 1 To 3)
   LR = 0
   For Each Emplac In RefArt.Co ' Pour chaque SsGr d'emplacement de l'article
      LR = LR + 1 ' Nouvelle ligne résultante (Incrémente le numéro de ligne du tableau dans lequel on écrit).
      TR(LR, 1) = Emplac.Id
      For Each TypMvt In Emplac.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, Emplac
   DicALBxStock.Add RefArt.Id, TR: Next RefArt
End Function
 

gbstyle

XLDnaute Impliqué
Re bonjour Dranreb et je te remercie sincèrement de ton retour
Si je comprend bien :
Je remplace la procédure Worksheet activate par cette fonction
J'annule toute mes création d'hier de clsi_résultat que j'ai créer dans l'userform inventaire.
 

Dranreb

XLDnaute Barbatruc
Non. La procédure ne doit pas être mise dans un module de feuille.
Soit dans l'UserForm, soit dans un module standard.
Elle est conçue pour l'affecter par un Set lors de l'UserForm_Initialize et après chaque changement dans WshSuiviES,
et à consulter à chaque changement de réf article par affectation directe de l'item, s'il existe, à une ListBox.List de 3 colonnes: Emplac, Qté, Remarque.
 

gbstyle

XLDnaute Impliqué
Je me suis perdu on est bien d'accord c'est ici à la suite de l'userform Initialize que tu la mettrais, par contre je me suis perdu dans la déclaration du Set.
Ne fais pas attention à l'historique de déclaration des Clsi je n'ai pas encore tout supprimer de ce que j'ai fait hier.
VB:
Option Explicit
Private WithEvents CLsC As ComboBoxLiées, LCouC As Long, TVLC(), TLC() As Long, _
        WithEvents CLsE As ComboBoxLiées, LCouE As Long, TVLE(), TLE() As Long, _
        WithEvents CLsA As ComboBoxLiées, LCouA As Long, TVLA(), TLA() As Long,
        'WithEvents CLsI As ComboBoxLiées, LCouI As Long, TVLI(), TLI() As Long
Private DicA As Dictionary, 'DicI As Dictionary

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

Function DicILBxStock() As Dictionary 'Dictionnaire pour listbox Suivis Stock
Dim TR(), RefArt As SsGr, DsgnArticle As String, Emplac As SsGr, LR As Long, TypMvt As SsGr, Détail
Set DicILBxStock = New Dictionary
For Each RefArt In Gigogne(WshSuivES, 1, 9, 5) 'Définition des colonnes de classement et regroupements (réf, emplacement, mouvement)
    ReDim TR(1 To RefArt.Count, 1 To 3)
    LR = 0
    For Each Emplac In RefArt.Co ' Pour chaque SsGr d'emplacement de l'article
       LR = LR + 1 ' Nouvelle ligne résultante (Incrémente le numéro de ligne du tableau dans lequel on écrit).
       TR(LR, 1) = Emplac.Id
       For Each TypMvt In Emplac.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, Emplac
    DicILBxStock.Add RefArt.Id, TR: Next RefArt
End Function
 

Statistiques des forums

Discussions
311 720
Messages
2 081 917
Membres
101 839
dernier inscrit
laurentEstrées