Alimenter une liste déroulante en cascade dans un formulaire Excel
Bonjour a tous
J'aurais aimé joindre mon fichier excell mais il est trop gros semble t il ( 1,76 MO)
Donc j'essaie de m'expliquer ici et je joins le code utilisé a ce jour
Mon fichier contient deux onglets: HOME et BD
Dans HOME ,un bouton de saisie permet la saisie des infos qui vont dans l'onglet BD
Ce bouton de saisie appelle un formulaire ou je peux sélectionner le compte dans lequel la transaction se fera
J'aimerais que sur selection du compte seulement certaines catégories s'affichent dans le menu CATEGORIES
J'ai listé ces spécifications ci dessous dans le tableau
A noter que lorsque je selectionne une catégorie, la sous categorie et le fournisseur sont contextuels a la selection de la categorie
C'est exactement ce que j'attends qui se passe lors de la selection du compte
J'ai l'Impression que c'est juste une ou deux lignes de codes a ajouter mais je ne trouve pas lesquelles
je joins une image en tableau des valeurs recherchées et une image du formulaire
Pour etre clair cela signifie que si je selectionne le compte CHEQUE par exemple a partir de la liste deroulante COMPTE , je voudrais que s'affiche dans la liste de CATEGORIES uniquement les valeurs suivantes :
| Alimentation |
| Animaux |
| Auto |
| Bordeaux |
| Divers |
| Entrée |
| Paiement des impôts |
| Paiement de dettes |
| Personnel |
| Virement |
| Projets |
| Santé |
Par la suite j'ai aucun probleme avec les sous categories et le founisseur qui s'affichent selon le choix de la categorie
Code utilisé
Sub Reset()
Dim iRow As Long
iRow = [Counta(Database!A:A)] ' idetifying the last row
With frmForm
.txtID.Value = Date
.optEntrée.Value = False
.optsortie.Value = False
.TxtMontant.Value = ""
.CmbCompte.Clear
.CmbCompte.AddItem "Visa"
.CmbCompte.AddItem "Chèque"
.CmbCompte.AddItem "Home dépôt"
.CmbCompte.AddItem "Hypothèque CIBC"
.CmbCompte.AddItem "Liquide"
.CmbCompte.AddItem "ES2"
.CmbCompte.AddItem "ET1"
.CmbCompte.AddItem "ET2HOP"
.CmbCompte.AddItem "ET3"
.CmbCompte.AddItem "ET4"
.CmbCompte.AddItem "ET5"
.CmbCompte.AddItem "ET6"
.CmbCompte.AddItem "ET7"
.CmbCompte.AddItem "Ind All"
.CmbCompte.AddItem "Budget"
.CmbCompte.AddItem "CPG CIBC"
.CmbCompte.AddItem "CELI CIBC"
.CmbCompte.AddItem "Épargne Stable"
.CmbCompte.AddItem "Compte conjoint"
.CmbCompte.AddItem "Jean Epicerie"
.cmbDepartment.Clear
.cmbDepartment.AddItem "Alimentation"
.cmbDepartment.AddItem "Animaux"
.cmbDepartment.AddItem "Auto"
.cmbDepartment.AddItem "Bordeaux"
.cmbDepartment.AddItem "Divers"
.cmbDepartment.AddItem "Épargne"
.cmbDepartment.AddItem "Paiement des impôts"
.cmbDepartment.AddItem "Personnel"
.cmbDepartment.AddItem "Santé"
.cmbDepartment.AddItem "Entrée"
.cmbDepartment.AddItem "Épargne impôts"
.cmbDepartment.AddItem "Paiement de dettes"
.cmbDepartment.AddItem "Virement"
.cmbDepartment.AddItem "Projets"
.cmbDepartment.AddItem "Credit Jean"
.cmbDepartment.AddItem "Crédit Robert"
.cmbDepartment.AddItem "Gain sur le marché"
.cmbDepartment.AddItem "Perte sur le marché"
.cmbDepartment.AddItem "Investissement"
.cmbDepartment.AddItem "Suivi déboursés"
.cmbDepartment.AddItem "Revenu locatif"
.cmbDepartment.AddItem "Autre revenu"
.cmbDepartment.AddItem "Paiement hypothèque CIBC"
.cmbDepartment.AddItem "Amélioration édifice"
.cmbDepartment.AddItem "Intérets payés"
.cmbDepartment.AddItem "Versement en capital"
.lstDatabase.ColumnCount = 9
.lstDatabase.ColumnHeads = True
.lstDatabase.ColumnWidths = "30;60;60;40;60;60;70;60;70"
If iRow > 1 Then
.lstDatabase.RowSource = "Database!A2:I" & iRow
Else
.lstDatabase.RowSource = "Database!A2:I2"
End If
.cmb_Sous_Cat.Clear
.cmb_Fournisseur.Clear
End With
End SubMerci en avance
Bonjour Robertpellan,
Pour cela ne pas mettre l'ensemble des données du tableau dans le cmbDépartement.
Il faut utiliser l'évènement CmbCompte_change() dans ton formulaire lorsque tu choisis un compte.
Suite,
Dans la ligne d'en-tête du tableau, tu recherches après la cellule Compte, la colonne ou se trouve le compte souhaité et ressorti de la combo compte.
Ainsi tu n'as plus qu'à lister par ligne tous les éléments de cette colonne afin de les affecter à la combo département. Ne pas oublier auparavant de faire un Clear pour ne pas ajouter ceux qui pourraient être déjà présents.
Merci de votre réppnse
n'étant pas un pro d excell je me demande si vous pourriez juste m'écrire la ligne de code svp
A nouveau,
Ci-dessous le code à adapter selon la la ligne ou se trouve réellement l'en-tête du tableau et le nombre de colonnes de celui-ci.
Private Sub UserForm_Initialize()
'Initialisation du combo Compte avec l'en-tête du tableau
'Ici l'en-tête est en ligne 10, les comptes vont de B à G
For I = 2 To 7
Textes = Textes & Cells(10, I) & ","
Next I
'Séparation des comptes
Comptes = Split(Textes, ",")
'Pour incorporation dans le combo
For J = 0 To UBound(Comptes)
CmbCompte.AddItem Comptes(J)
Next J
End Sub
Private Sub CmbCompte_Change()
'Boucle de recherche de la colonne du compte choisi
For C = 2 To 7
On Error Resume Next
Col = Cells(10, C).Find(CmbCompte.Text).Column
Next C
'Dernière ligne de la colonne
DerLig = Cells(Rows.Count, Col).End(xlUp).Row
'Incorporation des départements de la 11 ième ligne à la dernière
For L = 11 To DerLig
CmbDépartement.AddItem Cells(L, Col)
Next L
End SubBonjour Robertpellan,
Si je me réfère au Recherche_combo_tri il y a des variables définies par Dim.
En faire autant pour i, j, C, L, derlig. Ôte dans le Call Reset tout ce qui concerne l'alimentation des combo (additem) puisque cette macro par boucle prends en compte celle-ci.
De plus j'ai donné comme exemple la ligne 10 comme en-tête du tableau. Est ce réellement dans le fichier cette ligne ? Idem pour les colonnes.
Merci c'est réglé !
