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)
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 SubCordialement,
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 SubBonjour 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 SubJuste 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
@+