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é
Bonjour Dranreb petite question, nous avions développer ce code sur activation de la feuille facturation pour des calcul de manière automatique
VB:
Option Explicit

'*****************************************************************************************************
'Pose des questions si tu ne comprends pas.
' En gros:
' TableUnique mets, comme son nom l'indique, dans un tableau unique, l'un derrière l'autre, toutes les lignes de facturation préexistantes puis derrière toutes les lignes de commandes, en ajoutant devant une colonne 0 supplémentaire avec 0 pour les factures existantes et 1 pour les lignes de commandes.
' Gigogne réorganise tout ça en le classant, comme demandé à la fin lors de son appel, sur la colonne 1 qui est l'identification de la commande dans les 2 tableaux initiaux. Il renvoie ça dans une collection d'objets de type SsGr. Ceux ci ont une propriété Id qui est la valeur de ce critère de regroupement, donc la réf commande, et une propriété Co qui est à son tour une collection. Chaque membre de cette dernière collection est une table à une dimension de toutes les valeurs d'une ligne de détail. On a donc pour chaque réf commande d'abord l'ancienne ligne de facturation, si elle existait déjà, avec Détail(0) = 0, ensuite un certain nombre de lignes de commandes, toutes avec Détail(0) = 1, mais ça on n'a pas besoin de le tester: si ce n'est pas l'ancienne ligne de facture, c'est forcément une des lignes de commande. Est-ce que tu comprends mieux le processus d'exploration à deux niveaux de l'ensemble ?
' Dans le code joint au poste #382 tu utilise TR(LR, 8) alors qu'il n'est même plus calculé correctement vu que l'instruction qui calculait ce cumul tu l'as mise après, à un endroit complètement idiot, au lieu de la laisser dans la boucle de traitement de toutes les lignes détail des commandes, où elle était la seule à devoir y rester.
'Détail(12) est le montant de la ligne de commande. On doit additionner sur TR(LR, 8) les montants de toutes les lignes de commande associées à la réf. commande, donc celui de chacune d'elles en les parcourant toutes, l'une après l'autre. Mais c'est la seule chose à faire à chaque ligne de commande ! Tes infos des dernière colonnes, il ne faut les mettre qu'une fois, à la fin, pour la ligne de facture en cours d'élaboration, seulement quand on a fini de cumuler en TR(LR, 8) les montants de toutes les lignes de commande, et qu'on y a donc obtenu le montant total. C'est à dire après le End If et le Next Détail, mais avant le Next RefCmd. On ne peut donc plus garder le Next Détail, RefCmd, qui était une contraction de Next Détail suivi de Next RefCmd, parce qu'il y a ces instructions pour les colonnes de fin à mettre entre le Next Détail qui termine la petite boucle interne d'exploration de toutes les lignes de commande attachées au RefCmd et le Next RefCmd qui termine la grande boucle de chaque ligne de factur
'******************************************************************************************************

Private Sub Worksheet_Activate()
Dim Données As Collection, TR(), LR&, RefCmd As SsGr, Détail, PremièreLigne As Boolean
Dim DatTrv As Date
Set Données = Gigogne(TableUnique(Me.ListObjects(1), WshSuivCmd), 1)
'Set Données = Gigogne(TableUnique(Me, WshSuivCmd), 1)
ReDim TR(1 To Données.Count, 1 To 18)
For Each RefCmd In Données
    LR = LR + 1
    TR(LR, 1) = RefCmd.Id ' Identification de la commande
    PremièreLigne = True
    For Each Détail In RefCmd.Co
       If Détail(0) = 0 Then
    Rem. Report des infos manuelles de la ligne de facturation qui existait déjà.  TR(LR, col. fact) = Détail(col. fact)

        TR(LR, 9) = Détail(9)
        TR(LR, 10) = Détail(10)
        TR(LR, 11) = Détail(11)
        TR(LR, 12) = Détail(12)
        TR(LR, 13) = Détail(13)
        TR(LR, 14) = Détail(14)
        DatTrv = TR(LR, 13) + 31
        TR(LR, 15) = DateSerial(Year(DatTrv), Month(DatTrv) + 1, 0)
       
      Else
   
          If PremièreLigne Then
        Rem. Reproduction des informations de la commande.  TR(LR, col. fact) = Détail(col. commande)
            TR(LR, 2) = Détail(2)
            TR(LR, 3) = Détail(3)
            TR(LR, 4) = Détail(4)
            TR(LR, 5) = Détail(5)
            TR(LR, 6) = Détail(6)
            TR(LR, 7) = Détail(7)
           
            PremièreLigne = False: End If
        Rem. Cumul en colonne 8 du montant de cette ligne de commande, que ce soit la première ou non :

            TR(LR, 8) = TR(LR, 8) + Détail(14)
       End If: Next Détail
               
            TR(LR, 16) = TR(LR, 8) + TR(LR, 11)
            TR(LR, 17) = TR(LR, 16) * 20 / 100
            TR(LR, 18) = TR(LR, 16) + TR(LR, 17)
     
        Next RefCmd
        'End If: Next Détail, RefCmd
With Me.ListObjects("TblSuivisFacturation")
    If LR < .ListRows.Count Then .ListRows(LR + 1).Range _
       .Resize(.ListRows.Count - LR).Delete xlShiftUp
    '.DataBodyRange.Resize(LR).Value = TR'pour recalculer la feuille complète
    .DataBodyRange.Resize(LR, 18).Value = TR 'pour recalculer les 18première colonne
    End With
End Sub

Hors il est possible que j'y apporte des modifaction a partir de mon userform je m'explique j'ai un article qui est en HT à 3,33.
1574153553255.png

HT / Taxex / TTC
MAis sur ma facturation mon arrondis est à 12€.
Crois tu qu'il est possible de modifier lors de la saisie de mon userform c'est info car ajd elle sont figés :/
 

Dranreb

XLDnaute Barbatruc
Bonjour.
Je n'arrive pas du tout à suivre de quoi il s'agit, désolé.
Peut être ajouter des instructions qui réécrivent les TextBox non reproduites en sortie dans la CBnValiderF_Click alors qu'elles sont seulement lues dans la GarnirCommande, je ne sais pas.
 

Dranreb

XLDnaute Barbatruc
Vérifier les propriété de ces TextBox, mais chez moi pas de propriété Locked à True qui empêcherait de les modifier. Par contre elles ne sont pas réécrites en sortie, sur la ligne, par la Sub CBnValiderF_Click, au delà de la colonne 14 (la N, "Date de Règlement")
Ça ressemble à ce qui aurait été fait si les colonnes au delà avaient été des formules qu'il n'aurait pas fallu écraser.
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
Mais de toute façon ça ne sert à rien de le modifier puisque l'activation de la feuille va chaque fois tout détruire.
Il faudrait déjà qu'elle sache reconnaître une ligne modifiée pour qu'elle ne refasse pas le calcul.
Ou tout simplement corriger ce calcul pour qu'il soit toujours bon.
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
Bonjour.
Avec ça on aurait l'un des plus fin résultats simples possibles, et cela en Currency, qui ne puisse jamais valoir 11,99 :
VB:
TR(LR, 17) = CCur(Int(TR(LR, 16) * 10 + 0.5) * 0.02)
(calculé à 2 centimes près)
 
Dernière édition:

gbstyle

XLDnaute Impliqué
Salut Dranreb comment vas tu?
Juste pour te faire un retour après plusieur mois d'essais de ma base pour gérer les achats de mon association de sport, et la base fonctionne au top a 99% quelque petit bug constaté mais projet superbe a date. Encore merci

J'ai actuellement un projet de modifier quelque format de saisie dans la base, et j'ai une petite question :
- Sans perturber le fonctionnement j'aimerai affecté un masque de saisie dans l'usf de type :
- TVLF(1, 10) = Me.TBxTel.Text => 00 00 00 00 00
- TVLF(1, 11) = Me.TBxDatecontrat.Text => 00/00

Je ne voudrais pas planter la base en développant un code donc si tu as une astuce je suis preneur :/
Encore merci
 

Dranreb

XLDnaute Barbatruc
Bonjour.
Pour le numéro de téléphone, deux solutions: soit l'enregistrer sous forme de nombre avec CDbl(Me.TBxTel.Text) et mettre un format de cellule spécial Numéro de téléphone, soit l'enregistrer sous forme de texte et, si on tient à une standardisation quand même utiliser Format(Me.TBxTel.Text, "00 00 00 00 00"), mais ça interdirait des exceptions plus faciles à retenir telles que des groupes de 3 chiffres qui se répètent etc.
Pour une date je ne saurais trop conseiller de l'enregistrer sous forme de date en utilisant CDate("1/" & Me.TBxDatecontrat.Text) et mettre un format de cellule qui n'affiche que le mois et l'année.
Remarque il y a maintenant une ressource qui s'installe comme complément Excel. Elle propose un objet ComboBoxLiées mais aussi un objet un peu indépendant ControlsAssociés pour les autres contrôles associés de la ligne permettant d'éviter la programmation des détails des mouvements dans les deux sens.
 

Statistiques des forums

Discussions
312 211
Messages
2 086 296
Membres
103 171
dernier inscrit
clemm