TexxBox, Récupérer un format numérique

fif2208

XLDnaute Junior
Bonjour à tous,

J'ai un souci dans un formulaire pour récupérer un montant d'une TextBox avec un format numérique monétaire.

Dans mon formulaire, (voir fichier joint,) après avoir rechercher un numéro, via le bouton rechercher et que je modifie le montant de la TextBox en rentrant un nombre décimal, il n'y a pas de problème et dans mon tableau le montant est dans un format numérique monétaire.

Par contre, si je modifie simplement le vendeur et pas le montant ou bien si je change le montant avec un nombre entier non décimal, dans mon tableau le format est un format texte.

Comment modifier le code pour récupérer à chaque fois une valeur numérique monétaire ?

Je vous remercie de votre aide.

Cordialement.
 

Pièces jointes

  • Formulaires.xlsm
    27.6 KB · Affichages: 47

Dranreb

XLDnaute Barbatruc
Bonjour.
Ce n'est pas Format(txb_montant, "# ### ###.00 €") qu'il faut envoyer dans la cellule. Ca n'a pas de sens.
C'est CCur(txb_montant.Text).
Encore faudra-t-il faire ce qu'il faut pour vérifier que la conversion soit possible et corriger s'il y a lieu.
Normalement c'est la virgule qui est utilisée comme séparateur décimal.
Vous devriez remplacer votre Sub txb_montant_change par ça :
VB:
Private Sub txb_montant_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
If KeyAscii = Asc(".") Then KeyAscii = Asc(",")
End Sub
 
Dernière édition:

Paf

XLDnaute Barbatruc
bonjour fif2208,

Dans Private Sub btn_modifier_Click() de l'USF :

Cells(i, 4) = CDbl(txb_montant)

ou bien , qui permet de saisir indifféremment . ou , dans le montant:
Cells(i, 4) = CDbl(Replace(txb_montant, ".", ","))

A+

Edit : bonjour Dranreb
 

fif2208

XLDnaute Junior
Bonjour à tous,

Je reviens une nouvelle fois vers vous car j'ai un autre souci avec un code.

Vous avez réussi à me dépanner hier mais là mon problème porte sur un second formulaire que j'ai crée.

Il se présente sur le même modèle que le premier sauf que la recherche pour une modification se fait en cliquant sur la ListBox.

Donc, après avoir choisi un item dans la ListBox, j'aimerais que, quand je modifie le montant, et ou le vendeur, et ou la date,la correction se fasse dans le tableau.

Je suis débutant en VBA et j'ai recopié bêtement le code du premier formulaire en ajustant un peu mais force est de constater que cela ne fonctionne pas.

Comment corriger mon code pour que les modifications que je fais soient prises en compte ?

Je vous remercie de votre aide.

Cordialement.
 

Pièces jointes

  • Formulaires.xlsm
    30.8 KB · Affichages: 34

fif2208

XLDnaute Junior
Bonjour Dranreb,

Comme je vous l'ai dit, je suis débutant en VBA et la la syntaxe des codes m'est complètement inconnue.

Pourriez-vous, me dire ou intégrer i = Me.lsb_base.ListIndex come vous le suggerez et que dois-je modifier dans le code ci-dessous pour que cela fonctionne ?

Private Sub btn_remplacer_Click()
Dim i As Integer
Dim numero As Integer
numero = txb_numlsb
Application.ScreenUpdating = False
Sheets("Base").Activate
For i = 6 To 500
If Cells(i, 2) = numero Then
Cells(i, 3) = CDate(txb_date.Value)
Cells(i, 4) = CDbl(Replace(txb_montant, ".", ","))
Cells(i, 5) = cbb_vendeur
End If
Next i
End Sub

Je vous remercie de votre aide.

Cordialement.
 

Dranreb

XLDnaute Barbatruc
Déclarez une variable globale Private LCou As Long pour le numéro de ligne courant dans la base.
Et veillez à ce qu'elle contienne toujours le bon numéro de ligne dans la base en toute occasion. Et si une ListBox contient une partie des informations seulement, garder les numéros de lignes dans la base correspondant à ceux de la ListBox dans un Private TLgn() As Long. Personnellement c'est comme ça que je fais toujours. Et j'ai aussi en général une VLgn() As Variant pour conserver les valeurs de la ligne courante.
 
Dernière édition:

fif2208

XLDnaute Junior
Bonjour,

Comme je l'ai posté plus haut, je suis débutant en VBA et malheureusement les propositions que vous suggérez Dranreb, je suis incapable de les mettre en place. C'est vraiment trop compliqué pour moi.

Je vais laissé tomber, dommage !!!

Merci en tous cas pour vos réponses.

Cordialement.
 

Paf

XLDnaute Barbatruc
re,

les données de la feuille Base (plage B6:E14) sont insérées dans la listbox lsb_base.
L'index des données dans une listbox commence à 0.
La première ligne de données de la listBox aura pour index : 0
Cette première ligne de données correspond à la ligne 6 dans la feuille Base.
Donc, à partir de la listbox, pour retrouver la ligne de la feuille => index de la ligne listbox +6, soit:
lsb_base.ListIndex + 6

Dans Private Sub btn_remplacer_Click() de usf_remplacer, on aurait alors

Code:
Dim i As Integer
i = lsb_base.ListIndex + 6
Cells(i, 3) = CDate(txb_date.Value)
Cells(i, 4) = CDbl(Replace(txb_montant, ".", ","))
Cells(i, 5) = cbb_vendeur

A+

Edit :

A l'issue de cette correction, la mise à jour ne fonctionnait pas ! (avant non plus!!)

Après recherches, il s'avère que chaque écriture (Cells(i, 3) =..., Cells(i, 4) =..,...) provoquait le déclenchement de Private Sub lsb_base_Click() deux fois de suite !
Curieux !!!

En modifiant la façon de charger la listbox, tout est rentré dans l'ordre.

Dans Private Sub UserForm_Initialize() :

au lieu de : Me.lsb_base.RowSource = "tab_base"
écrire:
tablo = Range("tab_base")
lsb_base.List = tablo


Par ailleurs la ligne Me.lsb_base.TopIndex = Me.lsb_base.ListCount ne me semble pas utile.
 
Dernière édition:

fif2208

XLDnaute Junior
Bonjour Paf,

Je vous remercie de vous êtes penché sur mon souci. Le problème est maintenant résolu. Félicitations.

Le caractère CURIEUX, c'est surement parce que j'ai fait de la bidouille avec des codes que j'ai trouvés par ci par là.

En ce qui concerne la ligne Me.lsb_base.TopIndex = Me.lsb_base.ListCount, je l'ai placée dans le code car je préfère avoir les derniers enregistrements affichés. Sur cet exemple, c'est vrai que ce n'est pas très utile mais comme je vais utiliser ce code pour des centaines d'enregistrements cela sera plus pratique pour moi.

Encore une fois un grand merci.

Cordialement.
 

Discussions similaires

Réponses
17
Affichages
806

Statistiques des forums

Discussions
312 545
Messages
2 089 488
Membres
104 183
dernier inscrit
bast.coud