Liste déroulante saisie intuitive

Bonjour, j'avais récupéré le fichier ci-joint de @steelson dans une discussion de 2018. J'ai réussi à l'utiliser de façon intéressante dans un tableau que j'ai monté pour créer un bon de commande en sélectionnant des articles dans une liste de prix. Et en bout de course, je me rends compte un peu tard que cette macro applique des arrondis au lieu de renvoyer la valeur exacte. Du coup, tous mes prix sont arrondis.

Concrètement, dans l'onglet "Liste", en D2, la valeur renvoyée est 19, au lieu de 19,9.

Est-ce que quelqu'un serait capable de me dire pourquoi? Et surtout, comment éviter cet arrondi?

Merci d'avance de votre aide

lisbox-selection-multiple-colonnes-multiples-2.xlsm

Bonsoir,

je pense que vis à vis des contributeurs un fichier anonymisé serait plus adéquate pour dépatouiller ton problème qu'un lien internet

Slts

Mince alors, mais j'avais inséré un fichier!

Mon fichier est totalement anonymisé. Il n'y a strictement aucune information personnelle à l'intérieur.

lisbox-selection-multiple-colonnes-multiples-1.xlsm

Bon, visiblement, il y a un truc que je n'ai pas dû comprendre sur la façon de joindre un fichier à ma demande. Du coup, je vous mets le script:

Private Sub UserForm_Initialize()
    With ListBox1
        .ColumnCount = 4
        .ColumnWidths = "80;100;50;50"
    End With
    Me.ListBox1.List = [evts].Value
End Sub

Private Sub TextBox1_Change()
    Me.ListBox1.Clear
    i = 0
    For Each c In Application.Index([evts], , 2)
        If UCase(c) Like "*" & UCase(Me.TextBox1) & "*" Then
            Me.ListBox1.AddItem
            Me.ListBox1.List(i, 0) = c.Offset(0, -1).Value
            Me.ListBox1.List(i, 1) = c.Offset(0, 0).Value
            Me.ListBox1.List(i, 2) = c.Offset(0, 1).Value
            Me.ListBox1.List(i, 3) = c.Offset(0, 2).Value
            i = i + 1
        End If
    Next c
End Sub

Private Sub CommandButton1_Click()

    flag = True
    For i = 0 To ListBox1.ListCount - 1
          If ListBox1.Selected(i) Then
              flag = False
          End If
    Next i
    If flag Then
        MsgBox "Choisir un article !"
        Exit Sub
    End If

    ligne = Range("A" & Application.Rows.Count).End(xlUp).Row + 1
    For i = 0 To ListBox1.ListCount - 1
        If ListBox1.Selected(i) = True Then
            Range("A" & ligne).Value = ListBox1.List(i, 0)
            Range("B" & ligne).Value = ListBox1.List(i, 1)
            Range("C" & ligne).Value = Val(ListBox1.List(i, 2))
            Range("D" & ligne).Value = Val(ListBox1.List(i, 3))
            ligne = ligne + 1
        End If
    Next i
    Me.Hide

End Sub

 

Mon problème se pose pour les cellules suivantes:

 Range("C" & ligne).Value = Val(ListBox1.List(i, 2))
 Range("D" & ligne).Value = Val(ListBox1.List(i, 3))

Bonsoir,

essayer de remplacer Val() par Cdbl()
mais il faudra peut-être gérer la différence entre le point et la virgule... A voir...

@ bientôt

LouReeD

Effectivement. Au premier abord, ça m'a l'air de fonctionner !

Je vais faire quelques tests avant de fermer le ticket. En revanche, je viens d'aller sur https://www.excel-pratique.com/fr/fonctions-vba pour essayer de comprendre la nuance entre val et cdbl... pas évident.

Pour cdbl, je ne comprends pas la notion de "conversion" dans la mesure ou on ne cherche ici qu'à copier un nombre à virgule existant pour le coller ailleurs.

Ensuite, si on ne spécifie rien, un nombre peut contenir des virgules. Du coup, je ne comprends pas la définition donnée pour val (Renvoie les nombres contenus dans une chaîne de caractères.)

Il va sans doute falloir que je retourne sur les bancs de l'école . Les maths ont dû sacrément changé depuis que j'ai fini mes études !!!

Val renvoi un nombre se trouvant dans une chaine Alphanumérique = Texte = TextBox !

Dans les TextBox vous n'avez pas de chiffre mais des caractères alphanumérique représentant des chiffres, c'est le piège ! Donc en jouant avec des chiffres dans les TextBox il faut aussi gérer le rapatriement en ayant en tête que cela peut être pris pour du texte pur et non pas des chiffres.

Pour chaque TextBox numérique il devrait y avoir une variable VBA qui est cette valeur :

MaValeurNum = 100

TextBox qui affiche cette valeur : TextBox1 = MaValeurNum
Si on fait des opérations, entre TextBox 1 et 2 alors on fait MaValeur1 + MaValeur2 et on affiche le résultat où l'on veut...

C'est fastidieux, heureusement qu'il y a des fonctions pour nous aider, mais parfois on s'y perd...

@ bientôt

LouReeD

Merci infiniment LouReeD. Explication parfaitement claire. je fais des macros à l'occasion, et plus j'en fais, plus je suis impressionné par les possibilités que cela offre. Tout ceci est affaire de patience et de curiosité!

Bonne soirée

Bonne soirée.

@ bientôt

LouReeD

Rechercher des sujets similaires à "liste deroulante saisie intuitive"