VBA Combobox
Résolu
hglp
Messages postés
16
Statut
Membre
-
hglp Messages postés 16 Statut Membre -
hglp Messages postés 16 Statut Membre -
Bonjour, Je viens de commencer le vba et j'ai un petit problème que je n'arrive pas à résoudre au niveau d'un contrôle (combobox) dans un formulaire.
J'ai créé un formulaire de gestion de client où il est possible de voir les fiches clients (rentrées dans un excel) et d'ajouter, supprimer et modifier des clients. Je suis pour l'instant en train de faire l'ajout mais un détail m'empêche de finir ma procédure.
Comment empêcher l'utilisateur de rentrer deux fois un même code client (ma combobox nommée LstCode) ?
J'ai enlevé les doublons et trier ma liste par ordre alphabétique mais quand je rentre un code client qui existe déjà il s'insère tout de même dans l'excel et je voudrais empêcher ça.
Voilà j'espère que j'ai été clair !
Voilà ma pocédure (probablement à raccourcir mais je débute):
Private Sub NouveauClientB_Click()
Dim l As Integer
Dim i As Integer
Dim Cell As Range
Dim bool As Boolean
Set Ws = Worksheets("CLIENTS")
' En appuyant sur ajouter un nouveau client on pose cette question
If MsgBox(Prompt:="Confirmez-vous l'insertion d'un nouveau client ?", Buttons:=vbYesNo, Title:="Confirmation d'ajout") = vbYes Then
l = Ws.Range("a65536").End(xlUp).Row + 1
End If
For Each Cell In Ws.Range("A2:A" & Ws.Range("A65536").End(xlUp).Row)
If Me.Controls("LstCode") = Cell.Value Then
MsgBox "Ce Code est déjà réservé à un client, Veuillez rentrer un autre code."
End If
Next Cell
If Me.Controls("LstCode") <> "" And Me.Controls("TextBox1") <> "" And Me.Controls("TextBox2") <> "" And Me.Controls("TextBox3") <> "" And Me.Controls("TextBox4") <> "" And _
Me.Controls("TextBox5") <> "" And Me.Controls("TextBox6") <> "" And Me.Controls("TextBox7") <> "" And _
Me.Controls("TextBox8") <> "" And Me.Controls("TextBox9") <> "" Then
Range("A" & l).Value = LstCode
Range("B" & l).Value = TextBox1
Range("C" & l).Value = TextBox2
Range("D" & l).Value = TextBox3
Range("E" & l).Value = TextBox4
Range("F" & l).Value = TextBox5
Range("G" & l).Value = TextBox6
Range("H" & l).Value = TextBox7
Range("I" & l).Value = TextBox8
Range("J" & l).Value = TextBox9
MsgBox "Le nouveau Client a été ajouté à la feuille CLIENTS"
End If
If Me.Controls("LstCode") = "" Then
MsgBox " Merci de remplir le code client", vbExclamation
End If
If Me.Controls("TextBox1") = "" Then
MsgBox "Merci de remplir le champ SOCIETE", vbExclamation
End If
If Me.Controls("TextBox2") = "" Then
MsgBox "Merci de remplir le champ Contact", vbExclamation
End If
If Me.Controls("TextBox3") = "" Then
MsgBox "Merci de remplir le champ Fonction", vbExclamation
End If
If Me.Controls("TextBox4") = "" Then
MsgBox "Merci de remplir le champ Adresse", vbExclamation
End If
If Me.Controls("TextBox5") = "" Then
MsgBox "Merci de remplir le champ Ville", vbExclamation
End If
If Me.Controls("TextBox6") = "" Then
MsgBox "Merci de remplir le champ Code Postal", vbExclamation
End If
If Me.Controls("TextBox7") = "" Then
MsgBox "Merci de remplir le champ Pays", vbExclamation
End If
If Me.Controls("TextBox8") = "" Then
MsgBox "Merci de remplir le champ Téléphone", vbExclamation
End If
If Me.Controls("TextBox9") = "" Then
MsgBox "Merci de remplir le champ Email", vbExclamation
End If
End Sub
J'ai créé un formulaire de gestion de client où il est possible de voir les fiches clients (rentrées dans un excel) et d'ajouter, supprimer et modifier des clients. Je suis pour l'instant en train de faire l'ajout mais un détail m'empêche de finir ma procédure.
Comment empêcher l'utilisateur de rentrer deux fois un même code client (ma combobox nommée LstCode) ?
J'ai enlevé les doublons et trier ma liste par ordre alphabétique mais quand je rentre un code client qui existe déjà il s'insère tout de même dans l'excel et je voudrais empêcher ça.
Voilà j'espère que j'ai été clair !
Voilà ma pocédure (probablement à raccourcir mais je débute):
Private Sub NouveauClientB_Click()
Dim l As Integer
Dim i As Integer
Dim Cell As Range
Dim bool As Boolean
Set Ws = Worksheets("CLIENTS")
' En appuyant sur ajouter un nouveau client on pose cette question
If MsgBox(Prompt:="Confirmez-vous l'insertion d'un nouveau client ?", Buttons:=vbYesNo, Title:="Confirmation d'ajout") = vbYes Then
l = Ws.Range("a65536").End(xlUp).Row + 1
End If
For Each Cell In Ws.Range("A2:A" & Ws.Range("A65536").End(xlUp).Row)
If Me.Controls("LstCode") = Cell.Value Then
MsgBox "Ce Code est déjà réservé à un client, Veuillez rentrer un autre code."
End If
Next Cell
If Me.Controls("LstCode") <> "" And Me.Controls("TextBox1") <> "" And Me.Controls("TextBox2") <> "" And Me.Controls("TextBox3") <> "" And Me.Controls("TextBox4") <> "" And _
Me.Controls("TextBox5") <> "" And Me.Controls("TextBox6") <> "" And Me.Controls("TextBox7") <> "" And _
Me.Controls("TextBox8") <> "" And Me.Controls("TextBox9") <> "" Then
Range("A" & l).Value = LstCode
Range("B" & l).Value = TextBox1
Range("C" & l).Value = TextBox2
Range("D" & l).Value = TextBox3
Range("E" & l).Value = TextBox4
Range("F" & l).Value = TextBox5
Range("G" & l).Value = TextBox6
Range("H" & l).Value = TextBox7
Range("I" & l).Value = TextBox8
Range("J" & l).Value = TextBox9
MsgBox "Le nouveau Client a été ajouté à la feuille CLIENTS"
End If
If Me.Controls("LstCode") = "" Then
MsgBox " Merci de remplir le code client", vbExclamation
End If
If Me.Controls("TextBox1") = "" Then
MsgBox "Merci de remplir le champ SOCIETE", vbExclamation
End If
If Me.Controls("TextBox2") = "" Then
MsgBox "Merci de remplir le champ Contact", vbExclamation
End If
If Me.Controls("TextBox3") = "" Then
MsgBox "Merci de remplir le champ Fonction", vbExclamation
End If
If Me.Controls("TextBox4") = "" Then
MsgBox "Merci de remplir le champ Adresse", vbExclamation
End If
If Me.Controls("TextBox5") = "" Then
MsgBox "Merci de remplir le champ Ville", vbExclamation
End If
If Me.Controls("TextBox6") = "" Then
MsgBox "Merci de remplir le champ Code Postal", vbExclamation
End If
If Me.Controls("TextBox7") = "" Then
MsgBox "Merci de remplir le champ Pays", vbExclamation
End If
If Me.Controls("TextBox8") = "" Then
MsgBox "Merci de remplir le champ Téléphone", vbExclamation
End If
If Me.Controls("TextBox9") = "" Then
MsgBox "Merci de remplir le champ Email", vbExclamation
End If
End Sub
3 réponses
Bonjour,
Aussi, je ne suis pas trop sur de l'utilisation des IF.
IF question = oui then
on fait le code
else
on ne fait rien
end if
Tu met le code après le end if, donc il est toujours exécuté.
La solution est soit d'entrer le code à l'intérieur de ton IF, ou de rajouter un exit sub pour interrompre l'exécution de cette macro.
Aussi, je ne suis pas trop sur de l'utilisation des IF.
IF question = oui then
on fait le code
else
on ne fait rien
end if
Tu met le code après le end if, donc il est toujours exécuté.
La solution est soit d'entrer le code à l'intérieur de ton IF, ou de rajouter un exit sub pour interrompre l'exécution de cette macro.
If MsgBox(Prompt:="Confirmez-vous l'insertion d'un nouveau client ?", Buttons:=vbYesNo, Title:="Confirmation d'ajout") = vbYes Then l = Ws.Range("a65536").End(xlUp).Row + 1 Else exit sub 'exit sub va empêcher le reste de la macor de s'exécuter si on click non End If For Each Cell In Ws.Range("A2:A" & Ws.Range("A65536").End(xlUp).Row) If Me.Controls("LstCode") = Cell.Value Then MsgBox "Ce Code est déjà réservé à un client, Veuillez rentrer un autre code." exit sub 'Exit sub va empêcher le reste de la macro de s'exécuter. si le code est déja réservé End If Next Cell
Il ne me reste qu'un détail à régler pour finaliser mon application. Cela concerne la procédure pour supprimer un client. Je voudrais pouvoir supprimer un client (donc toute les informations de sa ligne dans l'excel) à partir de la sélection de son code client dans la combobox.
J'ai essayé ce code sans succès: Y a t-il un autre méthode ?
Private Sub CommandButton3_Click()
Dim Cell As Range
If MsgBox("Confirmez-vous ... Du client ?", vbYesNo) = vbYes Then
Set Cell = Plage.Find(LstCode.Value)
Cell.EntireRow.Delete
LstCode.RemoveItem LstCode.ListIndex
LstCode.Value= ""
Set Plage = Range ([A1], [A65536].End(x1Up))
End If
End Sub
J'ai essayé ce code sans succès: Y a t-il un autre méthode ?
Private Sub CommandButton3_Click()
Dim Cell As Range
If MsgBox("Confirmez-vous ... Du client ?", vbYesNo) = vbYes Then
Set Cell = Plage.Find(LstCode.Value)
Cell.EntireRow.Delete
LstCode.RemoveItem LstCode.ListIndex
LstCode.Value= ""
Set Plage = Range ([A1], [A65536].End(x1Up))
End If
End Sub
non ça ne l'était pas j'ai trouvé une autre solution qui fonctionne :
Ws.Rows(Columns(1).Find(Me.LstCode, Range("A1")).Row).Delete
Si j'ai bien compris : Dans la colonne 1 de la feuille (désignée pas Ws), on va rechercher le code choisi dans la combobox après la ligne 1 et on la supprime.
Avec Expression.Find(What; After, LookIn, ...)
Ws.Rows(Columns(1).Find(Me.LstCode, Range("A1")).Row).Delete
Si j'ai bien compris : Dans la colonne 1 de la feuille (désignée pas Ws), on va rechercher le code choisi dans la combobox après la ligne 1 et on la supprime.
Avec Expression.Find(What; After, LookIn, ...)