Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

aide sur multiplication

  • Initiateur de la discussion Initiateur de la discussion angoul
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

angoul

XLDnaute Impliqué
bonjours,
j'ai modifier grace a vos conseil, mon USERFORM

mais j'ai encore un petit soucis au niveau de multiplier des prix par des quantités. j'arrive a multiplier tous ce qui se trouve au dessus du chiffre 1, mais quand je rentre 0,20 par exemple, rien ce passe.
Pouvez vous m'aider
je met un morceau de mon code ici pour info :
Private Sub txtprix_AfterUpdate()
Dim wRange As Range
Dim wIdxTicket As Integer
Dim iRow As Integer

'Pas d'article saisi non renseigné
'L'article doit exister
If Len(LTrim(Me.CbxArticle.Value)) = 0 Or Not ArticleExist(Me.CbxArticle.Value) Then
Exit Sub
End If

'Pas de prix
If Len(LTrim(Me.txtprix.Text)) = 0 Then
Exit Sub
End If

'Pas d'article saisi
If Val(Me.txtprix.Text) = 0 Then
Exit Sub
End If

merci d'avance
 
Re : aide sur multiplication

Bonjour Angoul,

  1. Quand tu récupères la valeur contenue dans ta boîte de texte txtprix, utilise Val(Me.txtprix.Text) (ou bien CDec(Me.txtprix.Text), CDbl(Me.txtprix.Text), CVar(Me.txtprix.Text) ...).

  2. Vérifie que, selon les options régionales installées sur ton PC, le point décimal s'écrit avec un "." ou une ",". Si c'est avec un ".", la fonction Val("0,2"), renvoie la valeur 0)
@+

Edit :

Rectification : la fonction Val ne reconnait que le "." comme séparateur décimal. Cela ne dépend pas des paramètres régionaux. Ton problème pourrait provenir de là.
Par contre, les fonctions CDec, CDbl ... tiennent bien compte des paramètres régionaux.

Exemple de code alternatif :

Code:
'Pas de prix "numérique" saisi
If Not IsNumeric(Me.txtprix.Text) Then
    Exit Sub
End If

'Prix Nul saisi
'Remarque : attention, si [B]Me.txtprix.Text[/B] n'est pas reconnu comme un nombre, [B]CDec(Me.txtprix.Text)[/B] génère une erreur.
'Dans cet exemple, cette vérification est faite juste au dessus dans le code.
If CDec(Me.txtprix.Text) = 0 Then
    Exit Sub
End if
 
Dernière édition:
Re : aide sur multiplication

Bonjour le forum 🙂,
Une solution peut-être plus courte, remplacer la virgule à la volée par un point. Le test fait avec 1,2 et 1.2 en dessous me parrait concluant.
Code:
Dim Texte As String
Texte = InputBox("Test")
MsgBox (Val(Texte))
MsgBox (Val(Replace(Texte, ",", ".")))
Bonne journée 😎
 
Re : aide sur multiplication

Bonjour,

sans exemple dur dur, mais lorsque tu fais une multiplication as-tu pense à utiliser des variable de type Single ou Double pour gérer les décimales (Integer et long etant des entiers)

GIBI
 
Re : aide sur multiplication

bonsoir,
Je revient a vous pour ce petit probleme de multiplier mes quantités par un prix
voila ce qui devrait ce passer, je tape, une quantité 2,5 que je multiplie par mon prix 2,5
cela marche et alimente alors ma listbox avec le resultat
par contre quand je tape quantité 2,5 et que je rentre un prix de 0,20 par exemple, rien se passe.
je met a votre dispo mon fichier pour de l'aide que j'arrive pas a voir ou cela bloque.
Cijoint.fr - Service gratuit de dépôt de fichiers

merci d'avance
 
Re : aide sur multiplication

Bonjour Angoul,

La réponse à ta question est dans les posts précédents.

  1. La fonction Val ne reconnait pas la "," comme séparateur décimal, elle ne reconnait que le ".".
    Ce qui veut dire que Val("0,3") = 0, ou bien Val("2,3") = 2, mais que Val("0.3") = 0.3.

  2. Cette propriété cause deux problèmes dans ton code :
    1. Tu ne fais aucune action si Val(Me.txtprix.Text) = 0, donc par exemple, si Me.txtprix.Text = "0,3".
    2. Quand tu copies Val(Me.txtprix.Text) et Val(Me.Textquant.Text) dans les feuilles "Tickets" et "recap ticket", si txtprix ou Textquant sont des nombres comprenant une ",", tu perds tout ce qu'il y a après cette ",".

  3. Il y a au moins deux solutions possibles (voir posts précédents) :
    1. Tu remplaces tous tes Val(Texte) par CDec(Texte) en faisant bien attention que Texte représente un nombre au sens des paramètres régionaux (ce dont, d'aprés ce que j'ai vu dans ton code, tu t'assures déjà avec la fonction IsNumeric, dans tes procédures Txtprix_BeforeUpdate et Textquant_BeforeUpdate).
    2. Tu remplaces tous tes Val(Texte) par Val(Replace(Texte, ",", ".")).

  4. Deux dernières remarques :
    1. Je t'invite à revoir tous tes controls et toutes les cellules que tu affectes et à t'interroger sur le type de données que tu veux dans ces éléments (texte, date, monnaie, nombre décimal ...) et à vérifier que c'est bien ce que tu fais dans ton code.
    2. Sois également bien conscient des séparateurs définis dans les paramètres régionaux de Windows (Panneau de contrôle/Paramètres régionaux ...). Il y a deux types de séparateur pour le point décimal : le premier pour les nombres en général et le deuxième pour la monnaie. Ces paramètres affectent les fonctions CDec, CCur, ... de conversion de type (voir la documentation VBA).

@+
 
Dernière édition:
Re : aide sur multiplication

bonsoir,
je te remercie des tes conseils et informations que tu me donne ngogoisidore , j'ai bien fait la modification que tu me conseil c'est a dire remplacer Val(Texte) par CDec(Texte)
et cela fonctionne bien, mais j'ai une petite erreur qui maintenant apparait quand je clique sur le bouton "supprimer article" pourrait tu me dire ce que je doit modifier dans mon fichier pour ne plus avoir l'erreur :
Private Sub BnSupprimer_Click()
Dim wIdxTicket, ligticket, ligrecapticket As Integer, num As String
wIdxTicket = Me.LstTicket.ListIndex
If wIdxTicket >= 0 Then
num = LstTicket.List(wIdxTicket, 8)
cTotal = cTotal - CCur(LstTicket.List(wIdxTicket, 5))
Me.LstTicket.RemoveItem wIdxTicket
Me.LblTotal.Caption = " " & CStr(cTotal)
End If
With Sheets("Tickets")
.Activate
ligticket = .Columns("A").Find(what:=num).Row
.Rows(ligticket).Delete
End With
With Sheets("recap ticket")
.Activate
ligrecapticket = .Columns("A").Find(what:=num).Row
.Rows(ligrecapticket).Delete
End With
End Sub

merci d'avance
 
Re : aide sur multiplication

Bonjour Angoul,

Encore une fois, c'est une question de type ...

C'est pour éviter ce genre de problèmes que je t'ai écrit de vérifier le type de toutes les données que tu affectes à tes controls et tes cellules ...

Je sais que ça peut paraitre un peu fastidieux, mais c'est indispensable si tu veux coder proprement.

Tu peux utiliser le debuggeur pour t'aider, et d'ailleurs, il faut utiliser le debuggeur et les points d'arrêt pour vérifier ton code (je ne sais pas si tu le fais ?).

Dans ce cas particulier :

Code:
With Sheets("Tickets")
...
[B]ligticket = .Columns("A").Find(what:=num).Row[/B]
...

Les valeurs dans la colonne A de la feuille Tickets ont été enregistrées en type Date, car tu n'as pas forcé le type lorsque tu les as affectées.

Par contre num est une chaîne de caractères, donc bien que, sur la feuille Tickets, tu vois bien la date num apparaitre, la donnée dans la colonne A est stockée comme un nombre (une date). Donc, num et valeur dans colonne A ne peuvent pas être identiques.

Par conséquent, il y a un choix à faire :

Dans ton contrôle TextDate, qui est la source de toutes tes dates, tu n'as pas le choix, comme c'est une boîte de texte, le type de ta donnée sera un texte. Par contre, dans tes feuilles Tickets, et recap ticket, tu peux soit la stocker comme date, soit la stocker comme texte.

  1. Si tu choisis de la stocker comme texte, dans la procédure txtprix_AfterUpdate, change la ligne :

    Code:
    WrbCaisse.Worksheets("Tickets").Cells(iNbrArt + 2, 1) = LstTicket.List(iNbrArt, 8) 'date

    en

    Code:
    WrbCaisse.Worksheets("Tickets").Cells(iNbrArt + 2, 1) = TextDate 'date

    Car bien que LstTicket.List(iNbrArt, 8) contienne un Variant/String, par défaut, comme le type n'est pas forcé (le type est Variant, et ce Variant contient une String) Excel convertit automatiquement cette valeur en Date quand il l'affecte à ta colonne A. Par contre, TextDate est bien une String.

    Pour l'affectation, de la colonne A de ta feuille recap ticket, tu envoies déjà une String, avec la commande :

    Code:
    WrbCaisse.Worksheets("recap ticket").Cells(DerLig + 1, 1) = TextDate 'date

    Donc, pas de changement.

  2. Si tu choisis de la stocker comme date, dans la procédure txtprix_AfterUpdate, change les lignes :

    Code:
    WrbCaisse.Worksheets("Tickets").Cells(iNbrArt + 2, 1) = LstTicket.List(iNbrArt, 8) 'date
    ...
    WrbCaisse.Worksheets("recap ticket").Cells(DerLig + 1, 1) = TextDate 'date

    en

    Code:
    WrbCaisse.Worksheets("Tickets").Cells(iNbrArt + 2, 1) = CDate(TextDate) 'date
    ...
    WrbCaisse.Worksheets("recap ticket").Cells(DerLig + 1, 1) = CDate(TextDate) 'date

    Puis, dans la procédure BnSupprimer_Click, change les lignes :


    Code:
    With Sheets("Tickets")
    ...
    ligticket = .Columns("A").Find(what:=num).Row
    ...
    With Sheets("recap ticket")
    ...
    ligrecapticket = .Columns("A").Find(what:=num).Row

    en

    Code:
    With Sheets("Tickets")
    ...
    ligticket = .Columns("A").Find(what:=CDate(num)).Row
    ...
    With Sheets("recap ticket")
    ...
    ligrecapticket = .Columns("A").Find(what:=CDate(num)).Row

Evidemment la solution 1 est celle qui demande le moins de changement sur ton code actuel ...

Voilà.

Sinon, une dernière remarque :
Dans ton code (procédures Txtprix_BeforeUpdate et Textquant_BeforeUpdate), tu testes la validité des valeurs entrées dans tes boîtes de texte Txtprix et Textquant : c'est trés bien.
Mais si les valeurs ne sont pas valides, tu renvoies le message d'erreur :
"PERDU! REJOUE", là c'est moins bien 🙂. Non pas que je ne trouve pas ça drôle 😉, mais plutôt parce cela n'indique à l'utilisateur, ni la valeur erronnée, ni la raison de l'erreur. Un message du genre "Le Prix doît être un nombre : Entrée non Valide", me semble plus explicite et, donc, plus à propos 🙂 !.

@+
 
Dernière édition:
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

  • Question Question
Microsoft 365 Problème de date
Réponses
5
Affichages
367
  • Question Question
Microsoft 365 Erreur UBound
Réponses
4
Affichages
297
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…