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
Oui, mais ce n'est pas un truc à incrémenter, c'est ce que tu veux, que tu sera capable de reconnaire par la suite comme étant un des contrôle pour lesquels tu veux faire l'opération, puisque j'ai cru comprendre qu'il y en avait plusieurs, n'est-ce pas. Dans la déclaration mets Withevents devant CA, il sera du coup dans la liste de gauche qui surmonte la fenêtre de code. Sélectionne le pour prendre en charge son évènement Change.
Dans la procédure tu pourra faire If CAM.Mode = CeTruc Then
et puis sans doute un Select Case CAM.Valeur etc. avec des CAM.Ctl.ForeColor etc.
(CAM ça veut dire Controle Associé Membre. C'est le pendant des CBM de l'autre objet)
 

gbstyle

XLDnaute Impliqué
Salut Dranreb, alors après quelque essais infructueux je n'arrive pas à effectuer une mise en forme sur un textbox précis.

En effet pour l'instant j'ai un Texbox précis qui est concerné par une mise en forme spécifique en fonction de sa valeur calculé.
Je dois avoué que je ne comprend pas la procédure à mettre en place avec Cam.mode.

Private WithEvents CL As ComboBoxLi?es, WithEvents CA As ControlsAssoci?s, TVL(), LCou As Long
Je ne comprend pas la sélection à faire dans la fenêtre de gauche :/

CA.Add TBxSRev, "Total Revenus", Format:="0 000.00 ?"
CA.Add TBxSChar, "Total Charges", Format:="0 000.00 ?"
CA.Add TBxSEnd, "Taux End Act", Format:="00 %" =>valeur qui doit etre rouge gras si >=33%
CA.Add TBxSMen, "Mensualit? possible", Format:="0 000.00 ?"
CA.Add TBxPTota, "Total Projet", Format:="0 000.00 ?"
CA.Add TBxFTota, "Total Financement", Format:="0 000.00 ?"

Peux tu m'aider, sachant qu'il est possible que j'ai a terme une autre texbox qui est une mise en forme spécifique à définir.
 

Dranreb

XLDnaute Barbatruc
Il ne faut jamais saisir les procédure évènements. Toujours seulement les installer à l'aide des deux larges listes déroulantes qui surmontent la fenêtre de code. Elles sont essentiellement faites pour ça.
VB:
CA.Add TBxSEnd, "Taux End Act", Format:="00 %", Mode:="RougeGras"
…
Private Sub CA_Change(ByVal CAM As CAsso)
   If CAM.Mode = "RougeGras" Then
      If Vartype(CAM.Valeur) = vbDouble Then
          Select Case CAM.Valeur
             Case Is > 0.33: CAM.Ctl.ForeColor = vbRed: CAM.Ctl.Font.Bold = True
             Case Else: CAM.Ctl.ForeColor = 0: CAM.Ctl.Font.Bold = False
             End Select
      End If
   End If
 
Dernière édition:

gbstyle

XLDnaute Impliqué
Ah oui en effet, je n'avais pas assimiler que par une selection dans la barre cela fonctionné comme ca. dslé
j'ai une erreur sur procédure suite à une saisie de modification dans la textbox de revenus pour tester la mise en forme du résultat. je ne sais pas si c'est lieux aux withevents rajouter en début de procédure

1585932470342.png
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
Quelle est cette erreur ?
Je suis très étonné. C'est vrai que toutes ces possibilités n'ont pas été testées à fond. C'est peu utilisé. Il va me falloir ton fichier pour tester.
Ou met un espion sur CAM et regarde toutes ses propriétés.
 
Dernière édition:

gbstyle

XLDnaute Impliqué
Ecoute j'ai fermé le fichier et redémarrer et a prioris ca ne plante plus :/ va savoir pourquoi
lorque que tu veux modifier dans la case salaire de l'emprunteur et que tu veux saisir un autre montant dans mon ex 1000 pour avoir un taux >0.33 le texte ne s'affiche pas en gras rouge
 

gbstyle

XLDnaute Impliqué
afin de bien assimiler l'analyse avec un espion c'est bien cela qu'il faut faire ?
1585938278005.png


Car il est vrai que quand on ne maitrise pas parfaitement le VBA le recours à d'eventuelle tuto pour maitriser certaine manipulation se font rare sur le net :/
 

Dranreb

XLDnaute Barbatruc
Ben il est hors contexte, alors …
C'est lors d'un plantage dans la procédure indiquée par le contexte que tu pourrais l'analyser.
Mais attend. Ce sont des formules ? Pourquoi ce sont des TextBox et pas des Label alors ?
Il faudrait refaire le calcul dans l'userForm quand c'est le montant qui change, non ?
Tu peux mettre dans la CA_Change des If CAM.Ctl Is Me.TBx… oh et puis c'est compliqué tout ça …
En tout cas la CA_Change permet seulement d'intervenir quand un contrôle change du fait de l'utilisateur, mais pas au chargement de la ligne par CA.ValeursDeuis TVL pour le faire aussi à ce moment là il faudrait derrière: For I = 1 To CA.Count: Set CAM = CA.Item(I): CA_Change CAM: Next I
Avec I As Long, CAm As CAsso
 

gbstyle

XLDnaute Impliqué
Tout simplement car je ne savais pas que l'on pouvait utiliser des label pour des formules :/
Donc d'après toi quel est la solution la plus simple.
En effet je dois avoir 6 Texbox qui sont des valeurs calculé en fonction des autre dans mon TBL
si tu as plus simple je suis preneur :/, mais il est important d'avoir un visuel rapide de mise en forme rouge, ca saute au yeux direct
 

Dranreb

XLDnaute Barbatruc
Bonjour.
On doit utiliser des Label pour afficher des informations résultantes. Les TextBox c'est seulement pour les informations modifiables.
Ce qu'il y a à mettre derrière dépend d'une chose: c'est quand on fait quoi que ça doit changer ?
Pour que ça se fasse au chargement d'une fiche existante il faut le faire après la TVL = CA.Ligne(LCou).Range.Value, puisque c'est à partir de là que TVL continent l'information numérique déterminant l'aspect du Label.
Pour que ça se fasse dès le changement d'un contrôle dont ça dépend, même avant enregistrement éventuel de la modification, il faut refaire le calcul dans l'UserForm au moment où il change, ce qui peut être détecter dans la CA_Change. Mais c'est ce ou ces contrôles là qu'il faut marquer d'un Mode particulier, pas le Label qui affiche le résultat.
 
Dernière édition:

gbstyle

XLDnaute Impliqué
Bonjour Dranreb me revoici de retour, après quelque jours de formation en elearning
je vais regarder si je peux réussir à convertir ce que tu me dis.
Par contre bien entendu les labels sont bien des résultat calculé dans mon tvl?
 

Statistiques des forums

Discussions
312 216
Messages
2 086 351
Membres
103 195
dernier inscrit
martel.jg