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
Pas correct non plus. Détail(0) est une colonne supplémentaire mise devant les autres par TableUnique, qui identifie le tableau source de la ligne. Elle vaut certes 0 pour le 1er, mais mettez y donc plutôt la constante 0 monétaire qui se note 0@. Personnellement je n'aurais rien repris des colonnes 2 à 6 de la facture existante. Vous ne reconnaitriez pas au premier coup d’œil une ligne de facture dont toutes les lignes de commande auraient disparue.
Il ne peut y avoir qu'une seule procédure Worksheet_Activate dans un module d'objet Worksheet.
S'il y a d'autres choses à faire lors de l'activation de la feuille, elle doivent toutes être programmées dans la même procédure.
 
Dernière édition:

gbstyle

XLDnaute Impliqué
Tu attendrais donc plus cela :
Option Explicit

Private Sub Worksheet_Activate()
Dim Données As Collection, TR(), LR&, RefCmd As SsGr, Détail, PremièreLigne As Boolean
Set Données = Gigogne(TableUnique(Me, WshSuivCmd), 1)
ReDim TR(1 To Données.Count, 1 To 12)
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, 6) = Détail(0@)
TR(LR, 7) = Détail(7)
TR(LR, 8) = Détail(8)
TR(LR, 9) = Détail(9)
TR(LR, 10) = Détail(10)
TR(LR, 11) = Détail(11)
TR(LR, 12) = Détail(12)
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)
PremièreLigne = False: End If
Rem. Cumul des montants de toutes les lignes de commande :
TR(LR, 6) = TR(LR, 6) + Détail(12)
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
End With
End Sub
 

Dranreb

XLDnaute Barbatruc
Non. TR(LR, 6) = 0@
Ou pas d'instruction du tout, d'ailleurs. Ça vaut Empty au départ, et on peut cumuler dessus parce que c'est assimilé à 0.

(Utilise le bouton Insérer, Code, Langue VB pour montrer du code VBA dans une discussion)
 
Dernière édition:

gbstyle

XLDnaute Impliqué
Ci joint code de la feuille Wschsuivifact
J'ai le message d'erreur 438 qui apparait des que je clique sur l'onglet de la feuille j'ai encore du me louper
Losque que je clic sur débogage ma ligne
Set données = gigogne est surligné jaune

VB:
Option Explicit

Private Sub Worksheet_Activate()
Dim Données As Collection, TR(), LR&, RefCmd As SsGr, Détail, PremièreLigne As Boolean
Set Données = Gigogne(TableUnique(Me, WshSuivCmd), 1)
ReDim TR(1 To Données.Count, 1 To 12)
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, 7) = Détail(7)
          TR(LR, 8) = Détail(8)
          TR(LR, 9) = Détail(9)
          TR(LR, 10) = Détail(10)
          TR(LR, 11) = Détail(11)
          TR(LR, 12) = Détail(12)
      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)
            PremièreLigne = False: End If
       Rem. Cumul des montants de toutes les lignes de commande :
          TR(LR, 6) = TR(LR, 6) + Détail(12)
          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
    End With
End Sub
 

Dranreb

XLDnaute Barbatruc
On dirait qu'il y a un bogue dans l'interprétation du mot clé Me dans ce cas de figure.
Bien que TableUnique devrait l'assumer tout seul, essayez en précisant :
VB:
Set Données = Gigogne(TableUnique(Me.ListObjects(1), WshSuivCmd), 1)
 

gbstyle

XLDnaute Impliqué
A prioris en effet ça fonctionne c'est toujours un petit détail qui fait la différence c'est de la folie
c'est génial j'ai essayé de modifier une ancienne commande pour vérifier que tout est pris en compte et ca fonctionne du tonnerre de dieux
 

gbstyle

XLDnaute Impliqué
Bonjour Dranreb alors j'ai commencé quelque modif car j'ai des complément d'infos sur les fiches fournisseur et tout es ok dans le fonctionnement. j'ai rajouté une information que j'avais oublié sur les frais de transport.

Par contre pour effectuer le suivis et la mise à jour de la facturation, comment devrais-je procédé a ton avis :
- sachant que toute les infos seront réunis sous le même tableau normalement
 

gbstyle

XLDnaute Impliqué
En faite je souhaite réussir a reproduire approximativement la meme chose le seul hic est dans la déclaration des option ou je n'ai pas de comboxlié mais je souhaite déclarer un tableau de type " TVLCF"
Après j'aurai dupliqué la méthodologie pour ressortir les infos par la lecture des lignes de type LcouCF
Mais je n'arrive pas a faire ma déclaration explicit avec la comboboxliée vu que je n'en ai pas
VB:
Option Explicit
'Private WithEvents CLsCF As ComboBoxLiées, LCouCF As Long, TVLCF(), _

Private DicCF As Dictionary
t de base
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
Non, un ComboBoxLiées est normalement opérationnel dans son coin dès ce stade, même si on n'utilise pas son travail.
Pourquoi auras tu besoin d'un Dictionary des références de commandes ?
Simplifie les noms. C'est un autre UserForm si j'ai bien compris, non ? Supprime tous ces 'SF' qui ne servent à rien dans les noms.
 

Statistiques des forums

Discussions
312 338
Messages
2 087 397
Membres
103 535
dernier inscrit
moimeme1