VBA: ComboBox et changements au niveau des champs du tableau
Strawberrry
Messages postés
3
Date d'inscription
Statut
Membre
Dernière intervention
-
Strawberrry Messages postés 3 Date d'inscription Statut Membre Dernière intervention -
Strawberrry Messages postés 3 Date d'inscription Statut Membre Dernière intervention -
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:
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.
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:
- VBA: ComboBox et changements au niveau des champs du tableau
- Excel compter cellule couleur sans vba - Guide
- Incompatibilité de type vba ✓ - Forum VB / VBA
- Erreur 13 incompatibilité de type VBA excel ✓ - Forum Excel
- Mkdir vba ✓ - Forum VB / VBA
- Dépassement de capacité vba ✓ - Forum Excel
3 réponses
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
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
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 :
J'avais essayé de le remplir avec ceci et ça a marché:
Voici la capture d'écran:
[img]C:\Users\user\Desktop\feuille.png/img
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()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 :
Dim Tableau As Variant
Tableau = Range("B1:F1").Value
ComboBox2.Column() = Tableau
End Sub
Private Sub CommandButton1_Click()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;
' 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
Voici la capture d'écran:
[img]C:\Users\user\Desktop\feuille.png/img