Formater une listbox

Anonyme
2022-06-23T12:38:17+00:00

Bonjour,

Dans un formulaire, je dois faciliter la saisie de données qui doivent être numériques, comprises entre 0 et 2,5. Je pense que le mieux est de créer une listbox avec un RowSource qui renvoie à une liste dans la feuille. Jusque là pas de problème, mais je souhaite aussi que l'on puisse saisir directement dans la listbox une valeur, car quand il y a beaucoup de saisies c'est plus rapide.

J'ai donc mis dans le code d'évènement Change ou Exit (c'est le même résultat) :

"Echanges1.Value = Format(Echanges1, "Standard")"

et la saisie se transforme : par exemple si je saisis 1,2 cela devient 0,04...?

Ce serait bien aussi que la saisie soit obligatoirement un chiffre entre 0 et 2,5

Merci de votre aide, cordialement.

Microsoft 365 et Office | Excel | Autres | Windows

Question verrouillée. Cette question a été migrée à partir de la Communauté Support Microsoft. Vous pouvez voter pour indiquer si elle est utile, mais vous ne pouvez pas ajouter de commentaires ou de réponses ni suivre la question.

0 commentaires Aucun commentaire

13 réponses

  1. DanielCo 107.7K Points de réputation
    2022-06-24T15:53:53+00:00

    Alors, essaie :

    Private Sub Echanges1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    If Not IsNumeric(Echanges1) Then
    Echanges1 = ""
    End If
    'Echanges1 = Format(Echanges1, "0.00")
    If Echanges1 = "" Then Exit Sub
    'EchangesNote = Format(CDbl(Echanges1), "0.00")
    If Echanges1 > 2.5 Then
    'MsgBox ("Erreur")
    Echanges1 = ""
    Exit Sub
    End If
    If Echanges2 = "" Then
    EchangesNote = CDbl(Echanges1)
    Else
    EchangesNote = CDbl(Echanges1) + CDbl(Echanges2)
    End If
    If Not IsNumeric(Echanges1) Then
    MsgBox ("Erreur")
    End If
    'Echanges1.Value = Format(Echanges1, "0.00")
    End Sub

    Daniel

    Cette réponse a-t-elle été utile ?

    0 commentaires Aucun commentaire
  2. Anonyme
    2022-06-24T14:56:06+00:00

    Sur mon ordi 13 pouces, je n'ai pas de pavé numérique, donc en effet j'utilise la touche virgule à côté du N, et c'est une donnée dont je dois tenir compte car il est possible que d'autres utilisateurs soient dans mon cas.

    André

    PS: je ne suis plus dispo dans la soirée

    Cette réponse a-t-elle été utile ?

    0 commentaires Aucun commentaire
  3. DanielCo 107.7K Points de réputation
    2022-06-24T14:37:22+00:00

    J'utilise la "," comme symbole décimal. J'ai testé en saisissant ce séparateur avec le pavé numérique. Tu veux dire que l'utilisateur n'utilise pas le pavé numérique et qu'il utilise la touche "," ?

    Daniel

    Cette réponse a-t-elle été utile ?

    0 commentaires Aucun commentaire
  4. Anonyme
    2022-06-24T14:26:23+00:00

    Merci Daniel pour ton aide,

    Ta solution fonctionne mais elle ne permet pas la saisie directe de la virgule comme séparateur, elle remplace la saisie du point par la virgule. Si je laisse le séparateur à "," la saisie de ce caractère est impossible dans la listbox, comme la saisie du point est impossible si c'est le séparateur... peut-on expliquer cette bizarrerie ?

    Si cela fonctionne avec le point comme séparateur, c'est OK pour moi : je mets dans workbook_open un test pour voir le séparateur, le changer si c'est la virgule et la rétablir à la fermeture du classeur. Qu'en penses-tu ?

    Cordialement,

    André

    Cette réponse a-t-elle été utile ?

    0 commentaires Aucun commentaire
  5. DanielCo 107.7K Points de réputation
    2022-06-24T13:59:18+00:00

    Avec des virgules comme séparateur décimal. Essaie en supprimant :

    Private Sub Echanges1_Change

    Mets :

    Private Sub Echanges1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    Echanges1 = Replace(Echanges1, ".", ",")
    If Not IsNumeric(Echanges1) Then
    Echanges1 = ""
    End If
    'Echanges1 = Format(Echanges1, "0.00")
    If Echanges1 = "" Then Exit Sub
    'EchangesNote = Format(CDbl(Echanges1), "0.00")
    If Echanges1 > 2.5 Then
    'MsgBox ("Erreur")
    Echanges1 = ""
    Exit Sub
    End If
    If Echanges2 = "" Then
    EchangesNote = CDbl(Echanges1)
    Else
    EchangesNote = CDbl(Echanges1) + CDbl(Echanges2)
    End If
    If Not IsNumeric(Echanges1) Then
    MsgBox ("Erreur")
    End If
    'Echanges1.Value = Format(Echanges1, "0.00")
    End Sub

    Pareil pour l'autre combobox.

    Daniel

    Cette réponse a-t-elle été utile ?

    0 commentaires Aucun commentaire