VBA Combobox

Résolu/Fermé
hglp Messages postés 14 Date d'inscription vendredi 26 juin 2015 Statut Membre Dernière intervention 4 septembre 2015 - 26 juin 2015 à 18:31
hglp Messages postés 14 Date d'inscription vendredi 26 juin 2015 Statut Membre Dernière intervention 4 septembre 2015 - 30 juin 2015 à 08:30
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

3 réponses

hglp Messages postés 14 Date d'inscription vendredi 26 juin 2015 Statut Membre Dernière intervention 4 septembre 2015
26 juin 2015 à 18:37
Voici une image de mon excel

0
PlacageGranby Messages postés 393 Date d'inscription mercredi 26 mars 2014 Statut Membre Dernière intervention 7 mars 2019 26
Modifié par PlacageGranby le 26/06/2015 à 19:10
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.

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 
0
hglp Messages postés 14 Date d'inscription vendredi 26 juin 2015 Statut Membre Dernière intervention 4 septembre 2015
29 juin 2015 à 08:27
En effet ! Ca marche nickel désormais, Merci de m'avoir débloqué je n'y avais pas pensé !
0
hglp Messages postés 14 Date d'inscription vendredi 26 juin 2015 Statut Membre Dernière intervention 4 septembre 2015
29 juin 2015 à 11:28
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
0
PlacageGranby Messages postés 393 Date d'inscription mercredi 26 mars 2014 Statut Membre Dernière intervention 7 mars 2019 26
29 juin 2015 à 16:36
Bonjour,
A première vue, êtes-vous sur que Plage est défini au moment ou vous affectez Cell avec find ?
0
hglp Messages postés 14 Date d'inscription vendredi 26 juin 2015 Statut Membre Dernière intervention 4 septembre 2015
30 juin 2015 à 08:30
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, ...)
0