VBA: ComboBox et changements au niveau des champs du tableau

Fermé
Strawberrry Messages postés 3 Date d'inscription jeudi 24 juillet 2014 Statut Membre Dernière intervention 24 juillet 2014 - 24 juil. 2014 à 01:24
Strawberrry Messages postés 3 Date d'inscription jeudi 24 juillet 2014 Statut Membre Dernière intervention 24 juillet 2014 - 24 juil. 2014 à 16:29
Bonsoir tout le monde,

Au début, on m'avait demandé de créer des CheckBox qui correspondent aux champs de la feuille sur Excel, et une fois on sélectionne la CheckBox sur l'interface pour un numéro de dossier donner, le champ y correspondant se voit affecté d'une "*", voici le code et ceci marchait à merveille:

Private Sub CommandButton1_Click()
' Bouton Ajouter
Sheets("Feuil1").Select
Dim no_ligne As Integer 'no_ligne = N° de ligne de la dernière cellule non vide de la colonne +1
Dim I As Integer
If MsgBox("Confirmez-vous l'insertion de ce nouveau dossier ?", vbYesNo, "Demande de confirmation d'ajout") = vbYes Then
no_ligne = Range("A1048576").End(xlUp).Row + 1

If ComboBox1.Text = "" Then
MsgBox (" Entrer le code de dossier s'il vous plait ")
Exit Sub
Else
If ComboBox1.ListIndex = -1 Then
Cells(no_ligne, 1).Value = ComboBox1
For I = 1 To 5
If Me.Controls("CheckBox" & I) = True Then
Cells(no_ligne, I + 1).Value = "*"
Else
Cells(no_ligne, I + 1).Value = " "
End If
'cells(no_ligne, I + 1).Value = Me.Controls("CheckBox" & I)
Next
Else: MsgBox ("Dossier déja existant")
End If
End If
End If


Dim J As Long
With Me.ComboBox1
For J = 2 To Worksheets("Feuil1").Range("A" & Rows.Count).End(xlUp).Row
.AddItem Worksheets("Feuil1").Range("A" & J)
Next J
End With
Application.ScreenUpdating = True


Sauf que là, on m'a demandé de remplacer les 5 checkbox par une liste déroulante: ComboBox que j'ai implémentée à partir des champs de la table hormis le numéro de dossier, évidemment, et ensuite en cliquant sur un bouton de commande en ayant sélectionné un item de la combobox il se voit ajouté dans une ListBox(cela m'a été demandé également). Le problème qui se pose est: Comment je vais faire pour marquer les champs qui ont été sélectionné parmi les items du combobox et qui (figurent également dans la listbox)par des "*" ? Comme c'était le cas en manipulant les CheckBox?

--> Au lieu de cette ligne : If Me.Controls("CheckBox" & I) = True Then
J'avais mis: If Me.Controls("CheckBox" & I) = True Then
Mais ceci n'a pas marché vu que je ne m'y connais pas vraiment en VBA..


Je vous remercie infiniment pour votre attention et pour votre aide ! I really need it.
A voir également:

3 réponses

WeaponEDGE Messages postés 113 Date d'inscription vendredi 18 juillet 2014 Statut Membre Dernière intervention 21 novembre 2014 9
24 juil. 2014 à 10:28
Bonjour,

Les macros dans les formulaires, contrairement au macros dans les modules, se déclenche via des évènements.

Après les diférents objets qui composent un formulaire ne repondent pas aux même critères.
Un Chekbox va renvoyer une valeur True ou false (en fonction s'iil est coché ou non) alors qu'un combobox peux renvoyer une infinité de valeur suivant la manière dont il est alimenté.

Voici un fichier présentant 2 méthodes pour alimenter le "*" :
- La première l'effectuer à la sélection dans le ComboBox
- La seconde à la validation en fonction de la ListBox alimenté.

https://www.cjoint.com/?0GykCmkUGkq
0
Strawberrry Messages postés 3 Date d'inscription jeudi 24 juillet 2014 Statut Membre Dernière intervention 24 juillet 2014
24 juil. 2014 à 16:24
Bonjour,

Je vous remercie infiniment de m'avoir répondu, j'en suis très reconnaissante.
Je vais abuser, et je m'en excuse, sauf que, je remplis le combobox à partir des champs de la table qui sont présentés sur la capture d'écran, c'est-à-dire que je dois faire une boucle sur les colonnes et non les lignes comme il s'agit dans votre programme :
Nb_Ligne = Sheets(1).Cells(Rows.Count, 7).End(xlUp).Row

For i = 2 To Nb_Ligne
UserForm2.ComboBox1.AddItem Sheets(1).Cells(i, 7)
Next i


J'avais essayé de le remplir avec ceci et ça a marché:
Private Sub UserForm_Initialize()

Dim Tableau As Variant

Tableau = Range("B1:F1").Value
ComboBox2.Column() = Tableau

End Sub
Sauf que dans mon bouton de commande qui, une fois on fait entrer le code de dossier et on choisit les anomalies, càd ici :
Private Sub CommandButton1_Click()
' Bouton Ajouter
Sheets("Feuil1").Select
Dim no_ligne As Integer 'no_ligne = N° de ligne de la dernière cellule non vide de la colonne +1
Dim I As Integer
If MsgBox("Confirmez-vous l'insertion de ce nouveau dossier ?", vbYesNo, "Demande de confirmation d'ajout") = vbYes Then
no_ligne = Range("A1048576").End(xlUp).Row + 1

If ComboBox1.Text = "" Then
MsgBox (" Entrer le code de dossier s'il vous plait ")
Exit Sub
Else
If ComboBox1.ListIndex = -1 Then
Cells(no_ligne, 1).Value = ComboBox1
For I = 1 To 5
If Me.Controls("CheckBox" & I) = True Then
Cells(no_ligne, I + 1).Value = "*"
Else
Cells(no_ligne, I + 1).Value = " "
End If
'cells(no_ligne, I + 1).Value = Me.Controls("CheckBox" & I)
Next
Else: MsgBox ("Dossier déja existant")
End If
End If
End If
Je me suis dit que là encore il faudrait que j'utilise ta 2ème méthode pour introduire les "*", sauf qu'elle ne marche pas vu que je dois boucler sur les colonnes et non les lignes;

Voici la capture d'écran:
[img]C:\Users\user\Desktop\feuille.png/img
0
Strawberrry Messages postés 3 Date d'inscription jeudi 24 juillet 2014 Statut Membre Dernière intervention 24 juillet 2014
24 juil. 2014 à 16:29
Voilà la capture d'écran:
http://www.hostingpics.net/viewer.php?id=449384feuille.png

Merci énormément.
0