Listbox avec msgbox d'avertissement d'entrée non listée

Bonjour le forum,

J'ai crée un userform pour remplir un tableau de donnée.

Certaines données sont listées, j'ai donc crée des listbox sur ces données.

Dans mon code j'aimerais autoriser l'utilisateur à entrer une donnée non listée, l'avertir qu'elle n'existe pas et lui demander confirmation de son choix.

(Un peu comme les options de liste de choix dans les validations des données)

Ci joint mon excel (simplifié à une liste)

15listbox.xlsm (26.00 Ko)

Connaissez vous une fonction ou le code capable de cela?

Merci d'avance poru votre aide

Bonjour Seb276,

J’espère avoir bien cerné votre demande :

Private Sub Valider_Click()

    Dim Process As String
    Dim ligne As Long
    Dim texte As String

    Process = Text_process.Value

        If Len(Me.Text_process) = 0 Then
            MsgBox "Le champs 'process' est obligatoires."
        End If

        If Me.Text_process = "Autre (à preciser)" Then
            texte = InputBox("Nouvelle commande : ")
            MsgBox ("Confirmation de la nouvelle entrée ?")
            ligne = Sheets("LISTES").Range("A" & Rows.Count).End(xlUp).Row
            Range("A" & ligne).Insert Shift:=xlDown
            Range("A" & ligne) = texte
            ActiveSheet.Range("A1") = Process
        Else
            ActiveSheet.Range("A1") = Process
        End If
End Sub

Cordialement,

Merci Ironboule,

C'est presque ça

Je n'avais pas travaillé sur le choix "autres" mais je prend quand même merci

En fait certains utilisateurs vont écrire les données directement dans la listbox car certaines listes sont très longues et il est plus rapide d'écrire que de la chercher dans la liste. (surtout pour les plus récurrentes)

Mais en l’écrivant il peut soit :

  • entrer la donnée correctement, dans ce cas tout est ok
  • entrer une donnée erronée
  • entrer une nouvelle donnée

Dans les 2 derniers cas il faut l'avertir que donnée n'existe pas et lui demander la confirmer pour "oui" (nouvelle donnée) ou "non" (donnée erronée)

Je vais pousser ma demande en ajoutant un code permettant d’insérer la nouvelle donnée dans la liste de choix.

Cela est-il possible?

Bonjour,

Une piste :

Private Sub Valider_Click()

    Dim Tbl As ListObject
    Dim Cel As Range

    If Text_process.Text = "" Then Exit Sub

    Set Tbl = Worksheets("LISTES").ListObjects("Tableau2")
    Set Cel = Tbl.DataBodyRange.Columns(1).Find(Text_process.Text, , xlValues, xlWhole)

    If Cel Is Nothing Then

        If MsgBox("La valeur ne se trouve pas dans la liste, si elle n'est pas éronnée, voulez-vous l'ajouter ?", vbYesNo) = vbNo Then Exit Sub

        Set Cel = Tbl.DataBodyRange(Tbl.DataBodyRange.Rows.Count, 1)

        Cel.Insert

        Cel.Offset(-1).Value = Text_process.Text
        Text_process.RowSource = Process

    End If

End Sub

Bonjour Theze,

Content de te revoir

Ton code est exactement ce que je cherche

Décidément tu es mon ange VBA

J'ai adapté le code en insérant la partie d'Ironboule

Ca donne ça, je pense que c'est pas mal

Private Sub Valider_Click()
    Dim Process As String
    Dim Tbl As ListObject
    Dim Cel As Range
    Dim ligne As Long
    Dim texte As String

      Process = Text_process.Value

        If Len(Me.Text_process) = 0 Then
         MsgBox "Le champs 'process' est obligatoires."
         Exit Sub
         End If
    Set Tbl = Worksheets("LISTES").ListObjects("Tableau2")
    Set Cel = Tbl.DataBodyRange.Columns(1).Find(Text_process.Text, , xlValues, xlWhole)

    If Cel Is Nothing Then

        If MsgBox("La valeur ne se trouve pas dans la liste, si elle n'est pas éronnée, voulez-vous l'ajouter ?", vbYesNo) = vbNo Then Exit Sub

        Set Cel = Tbl.DataBodyRange(Tbl.DataBodyRange.Rows.Count, 1)

        Cel.Insert

        Cel.Offset(-1).Value = Text_process.Text
     '  Text_process.RowSource = Process
     ActiveSheet.Range("A1") = Process
    Else
        If Me.Text_process = "Autre (à preciser)" Then
            texte = InputBox("Entrer le nouveau processus : ")
           MsgBox ("Confirmation de la nouvelle entrée ?")
           ligne = Sheets("LISTES").Range("A" & Rows.Count).End(xlUp).Row
            Range("A" & ligne).Insert Shift:=xlDown
            Range("A" & ligne) = texte
            ActiveSheet.Range("A1") = Process
        Else

    End If
    End If
    Unload Nouvelle_commande

End Sub

Juste une question, peux tu expliquer le rôle de la ligne ' Text_process.RowSource = Process

elle m'engendre un arrêt depuis que j'ai fait les ajustements et le code fonctionne très bien sans

Cette ligne recharge la liste avec la nouvelle valeur dans le ComboBox, chez moi ça fonctionne !

Ça marche!

Merci beaucoup pour ton aide

Mon fichier est bien abouti maintenant

@+

Rechercher des sujets similaires à "listbox msgbox avertissement entree listee"