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é
J'avais déjà essayer ca à mon avis il me manque quelque chose
VB:
      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 des montants de toutes les lignes de commande :
            TR(LR, 8) = TR(LR, 8) + Détail(12)
           
        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)
      
        End If: Next RefCmd
 

Dranreb

XLDnaute Barbatruc
Le End If n'est pas à sa place: il doit terminer le bloc If Détail(0) = 0 Then, pas le For Each RefCmd In.
Je ne t'ai jamais dit de déplacer le End If, il doit toujours rester juste avant le Next Détail.

À propos, peut être que ce serait plus clair pour toi, si, au lieu de
Rem. Cumul des montants de toutes les lignes de commande :
tu mettais :
Rem. Cumul en colonne 8 du montant de cette ligne de commande, que ce soit la première ou non :

J'avais mis 'toutes' pour souligner qu'elle était toutes concernées, y compris la première, et non pour laisser croire que cette instruction cumulait à elle seul l'ensemble des montant de toutes les lignes de commandes en une seule fois.
 
Dernière édition:

gbstyle

XLDnaute Impliqué
Voici la modif
VB:
          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(12)
       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
 

gbstyle

XLDnaute Impliqué
Bonjour Dranreb je te fais un rapide petit bilan : pour l'onglet suivi cmd factur après quelque test l'ensemble de la base fonctionne avec mise à jour de la Wshsuivifac des saisies de commandes.
Par contre je me suis rendu compte qu'avec la déclaration de combobox lié, je n'ai pas réussis à rendre la réf facturation disponible pour une saisie, j'ai essayé de regarder sur le principe développer dans le cadre de saisie de référence commande mais à part cette procédure je n'arrive pas à reproduire ce qu'on a fait
VB:
Private Sub CLsC_Change(ByVal Complet As Boolean, ByVal NbrLgn As Long)
If NbrLgn = 1 Then CBnValiderA.Caption = "Modifier": Exit Sub
If NbrLgn = 0 Then LBxC.Clear
LCouC = 0
ReDim TVLC(1 To 1, 1 To 11)

GarnirCommande
CBnValiderC.Caption = "Ajouter"
End Sub

J'ai également modifier le fameux sujet valeurTbx : ca me parait pas mal sauf que j'ai des doutes sur les valeur ou je ne met pas de format type ca risque de me générer des erreurs je pense :
j'ai essayé comme ceci et j'ai un soucis sur la Cbxmodedegestion est ce du aux faite que je fais appel à un Rowsources et dans ce cas pourquoi ca ne génère pas le soucis avec le code initial de type
TVLA(1, 14) = Me.CBxModedegestion.text
VB:
Private Sub CBnValiderA_Click()

TVLA(1, 6) = ValeurTBx(Me.TBxLongueurcolisage, vbDouble)
TVLA(1, 7) = ValeurTBx(Me.TBxLargeurcolisage, vbDouble)
TVLA(1, 8) = ValeurTBx(Me.TBxHauteurcolisage, vbDouble)
TVLA(1, 9) = ValeurTBx(Me.TBxACréele, vbDate)
TVLA(1, 10) = ValeurTBx(Me.TBxANotes)
TVLA(1, 11) = ValeurTBx(Me.TBxADelaislivraison)
TVLA(1, 12) = ValeurTBx(Me.TBxAFraistransport)
TVLA(1, 13) = ValeurTBx(Me.TBxAFacturation)
TVLA(1, 14) = ValeurTBx(Me.CBxModedegestion)
TVLA(1, 15) = ValeurTBx(Me.TBxInfosColisage, vbDouble)
TVLA(1, 16) = ValeurTBx(Me.TBxMinicommande)
TVLA(1, 17) = ValeurTBx(Me.TBxPrixUnitHT, vbCurrency)
TVLA(1, 18) = ValeurTBx(Me.TBxStockmini, vbDouble)
TVLA(1, 19) = ValeurTBx(Me.TBxDateSI, vbDate)
TVLA(1, 20) = ValeurTBx(Me.TBxSI)

If LCouA = 0 Then
    CLsA.ValeursVers TVLA
    CLsA.Lignes.Add.Range.Resize(, 20).Value = TVLA
    CLsA.Actualiser
    Me.LabNbArticle = CLsA.Lignes.Count
    Set DicA = DicoSujet(CLsA.Item(CBxRefArticle).SujetBdD)
Else
    'CLsA.Lignes(LCouA).Range.Value = TVLA 'pour rapatrier toute les valeur mais supprimes supprimes les formules des colonnes
    CLsA.Lignes(LCouA).Range.Resize(, 20).Value = TVLA '20=nombre de colonnes contenant des constantes
    End If

End Sub
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
Bonjour.
pour pouvoir saisir une réf facture sans que ça ne provoque de recherche il faut avoir stoppé le ComboBoxLiées.
Comme son nom l'indique ValeurTBx ne fonctionne qu'avec des TextBox, pas des ComboBox.
Une ComboBox non gérée par un ComboBoxLiée possède une valeur présente dans sa liste, c'est généralement un texte et on peut le plus souvent l'affecter directement comme valeur de cellule.
Rappel: quand le 2nd paramètre, TypeDon, n'est pas précisé, c'est vbDouble qui est assumé, non vbString. Mais ça ne change pas grand chose en fait: c'est bien pris comme String si ce n'est pas convertible en nombre.
 

gbstyle

XLDnaute Impliqué
donc je garde bien cette formule TVLA(1, 14) = Me.CBxModedegestion.text c'est ce que j'ai fait au moins j'ai compris pourquoi.
Par contre je vais regarder comment je dois faire pour stopper la réf facturation, on a du faire l'exercice en amont c'est sur maintenant faut que je comprenne comment, mais je pense que ce qui m'induit en erreur est du au faite que dans l'autre exercice ont utiliser des frame, je regarde ca
 

gbstyle

XLDnaute Impliqué
Déjà pour comprendre ne serait pas ce type de code pour stopper les cbxlié dans le cas des frame
If Not Me.ActiveControl Is FrmA Then CLsA.Stopper

Pour le bouton, je créer un bouton par exemple "nouveau" l'objectif et quand je clic dessus les infos restes alimenter et je peux garnir une réf facturation dans la cbxlié
 

Dranreb

XLDnaute Barbatruc
Oui, c'est bien simplement la méthode Stopper de l'objet qu'il faut invoquer.
Il faudra peut être aussi prévoir une réactivation ou une réactualisation lors de la validation.
L'objet a une propriété Actif en lecture seule permettant de savoir s'il est actif.
 

gbstyle

XLDnaute Impliqué
Bonjourci joint une ébauche a mon avis il manque encore quelque chose pour réactiver le tout
VB:
Private Sub CBnRefFact_Click()
If Not Me.ActiveControl Is CBxRefFacturation Then CLsF.Stopper


End If
End Sub


Etil possible de réactiver le tout lors d'un clic sur la CBnvalider avant enregistrement
Car la j'ai juste stoper
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
Voilà, c'est mieux.
Dans CBnValider_Click il faudra une instruction If Not CLsF.Actif Then CLsF.ValeursVers TVLF et, après enregistrement, une instruction If Not CLsF.Actif Then CLsF.Actualiser. Normalement l'actualisation redémarre l'objet d'office.

Edit: Non c'est faux. L'actualiser ne le redémarre pas, c'est Nettoyer qui le fait. Il faudra donc aussi une instruction CLsF.Réactiver
 
Dernière édition:

gbstyle

XLDnaute Impliqué
J'avais bien pris en compte le if ot clsf actif dans la cbnvalider par contre pour l'actualisation je ne sais pas si c'est positionner au bon endroit ?
VB:
Private Sub CBnValiderF_Click()

If Not CLsF.Actif Then CLsF.ValeursVers TVLF
TVLF(1, 2) = ValeurTBx(Me.TBxDate, vbDate)
TVLF(1, 3) = ValeurTBx(Me.TBxEnregistrepar)
TVLF(1, 5) = ValeurTBx(Me.TBxDelailivraison)
TVLF(1, 6) = ValeurTBx(Me.TBxFraistransport, vbCurrency)
TVLF(1, 7) = ValeurTBx(Me.TBxDatelivestime, vbDate)
TVLF(1, 8) = ValeurTBx(Me.TBxTotalHT, vbCurrency)
TVLF(1, 9) = ValeurTBx(Me.TBxBL)
TVLF(1, 10) = ValeurTBx(Me.TBxdatelivconfirme, vbDate)
TVLF(1, 11) = ValeurTBx(Me.TBxfraisdeport, vbCurrency)
TVLF(1, 13) = ValeurTBx(Me.TBxdatefacturation, vbDate)

If LCouF = 0 Then
    CLsF.ValeursVers TVLF
    CLsF.Lignes.Add.Range.Resize(, 14).Value = TVLF
    CLsF.Actualiser
    Me.LabNbRefFacturation = CLsF.Lignes.Count
 
Else
    CLsF.Lignes(LCouF).Range.Resize(, 14).Value = TVLF
    If Not CLsF.Actif Then CLsF.Actualiser ' après enregistrement ?
End If

End Sub
 

gbstyle

XLDnaute Impliqué
ci joint code fini peux tu juste me dire si mes commentaire sont correct, l'objectif et quand meme de me rapeler ce que nous réalisons. j'aimerais amplifier mes commentaire pour bien maitriser ce dont on aborde car avec tous ce qu'on a vus il y'a des choses que je devrais etre capable de dupliquer normalement;
VB:
Private Sub CBnValiderF_Click()

If Not CLsF.Actif Then CLsF.ValeursVers TVLF 'si CLSf n'est pas actif alors les valeur vont vers TVLf
TVLF(1, 2) = ValeurTBx(Me.TBxDate, vbDate)
TVLF(1, 3) = ValeurTBx(Me.TBxEnregistrepar)
TVLF(1, 5) = ValeurTBx(Me.TBxDelailivraison)
TVLF(1, 6) = ValeurTBx(Me.TBxFraistransport, vbCurrency)
TVLF(1, 7) = ValeurTBx(Me.TBxDatelivestime, vbDate)
TVLF(1, 8) = ValeurTBx(Me.TBxTotalHT, vbCurrency)
TVLF(1, 9) = ValeurTBx(Me.TBxBL)
TVLF(1, 10) = ValeurTBx(Me.TBxdatelivconfirme, vbDate)
TVLF(1, 11) = ValeurTBx(Me.TBxfraisdeport, vbCurrency)
TVLF(1, 13) = ValeurTBx(Me.TBxdatefacturation, vbDate)

If LCouF = 0 Then
    CLsF.ValeursVers TVLF
    CLsF.Lignes.Add.Range.Resize(, 14).Value = TVLF
    CLsF.Actualiser
    Me.LabNbRefFacturation = CLsF.Lignes.Count
 
Else
    CLsF.Lignes(LCouF).Range.Resize(, 14).Value = TVLF
    If Not CLsF.Actif Then CLsF.Actualiser: CLsF.Réactiver 'actualise et réactive le clsf
End If

End Sub

Par contre j'ai un petit soucis je n'ai plus d'affichage dans ma Listbox :/
 
Dernière édition:

Statistiques des forums

Discussions
312 197
Messages
2 086 104
Membres
103 118
dernier inscrit
mlaf4032