Filtrer données avec un ComboBox
Zanlepan
-
Zanlepan -
Zanlepan -
Bonjour,
J'ai créé un tableau ou j'ai mis en en-tête 1 comboBox dans chaque colonne pour filtrer le contenu des rangées. Je suis capables de remplir les combo box, mais pas d'appliquer le filtre. C'est-à-dire que quand je sélectionne une valeur du comboBox, elle s'affiche dedans mais le reste du tableau n'est pas changée. Aussi j'aimerais savoir comment faire pour afficher une valeur par défaut dans le combo box (je veux qu'il soit écrit "Select a port"). Voici mon code:
Merci !
J'ai créé un tableau ou j'ai mis en en-tête 1 comboBox dans chaque colonne pour filtrer le contenu des rangées. Je suis capables de remplir les combo box, mais pas d'appliquer le filtre. C'est-à-dire que quand je sélectionne une valeur du comboBox, elle s'affiche dedans mais le reste du tableau n'est pas changée. Aussi j'aimerais savoir comment faire pour afficher une valeur par défaut dans le combo box (je veux qu'il soit écrit "Select a port"). Voici mon code:
Sub CB_loadPort_Change()
With Sheets("calculs")
premierPort = .Range("AA1").Address
dernierPort = .Range(premierPort).End(xlDown).Address
ports = .Range(premierPort & ":" & dernierPort)
End With
With ActiveSheet.CB_loadPort
For Each portName In ports
.AddItem portName
Next portName
.Style = fmStyleDropDownList
.AutoSize = False
End With
End Sub
Merci !
A voir également:
- Filtrer données avec un ComboBox
- Fuite données maif - Guide
- Trier des données excel - Guide
- Supprimer les données de navigation - Guide
- Sauvegarde des données - Guide
- Données personnelles - Accueil - Windows
1 réponse
Bonjour,
Dans ton message, tu nous donnes un code.
Peux tu me dire à quoi servent, ce que font les lignes suivantes :
De plus, décrit nous ceci :
EDIT : complément d'information : ou et comment sont déclarées tes variables?
Avant, j'arrivais jamais à finir mes phrases... mais maintenant je
Dans ton message, tu nous donnes un code.
Peux tu me dire à quoi servent, ce que font les lignes suivantes :
With ActiveSheet.CB_loadPort
For Each portName In ports
.AddItem portName
Next portName
.Style = fmStyleDropDownList
.AutoSize = False
End With
De plus, décrit nous ceci :
Sub CB_loadPort_Change()
EDIT : complément d'information : ou et comment sont déclarées tes variables?
Avant, j'arrivais jamais à finir mes phrases... mais maintenant je
La première partie du code que tu as mis sert à prendre la liste qui se trouve sur la page vessels et de remplir mon comboBox avec (ce dernier est situé sur une autre feuille)
Mon comboBox s'appelle CB_loadPort, la sous-routine CB_loadPort_change() est appelée lorsqu'on clique sur un commandButton sur la feuille Template. Ce command button copie la feuille template, la renomme et rempli le comboBox qui est initialement vide sur cette feuille.
Le problème ici est que la procédure CB_loadPort_change() est une procédure événementielle qui se déclenche à chaque changement de valeur dans la combobox CB_loadPort. En gros, quand tu sélectionnes une valeur, ou que tu saisis, ne serait-ce qu'un caractère dans celle Combo, le code se déclenche et... remplit à nouveau ta Combobox.
1- le code du CommandButton, doit se trouver dans la procédure CommandButtonXX_Click (ou XX est le numéro du bouton).
2- En VBA, on type chaque variable, sauf s'il s'agit de Variant.
Tes variables :
3- le code de ta combobox, censé filtrer la feuille, devra non pas se trouver dans la procédure CB_loadPort_Change() mais CB_loadPort_Click(). C'est en effet cet événement qu'il convient d'utiliser pour faire en sorte qu'à chaque sélection d'une valeur dans la combo, la macro se déclenche.
4- tu as une Combobox par colonne. Le but ici sera de n'avoir qu'une seule procédure pour toutes tes combobox. cela te fera un code du style :
Sub Filtre(ByRef Col As Integer, ByRef Valeur_Combo As String) Dim DLig As Long, PremLig As Long, i As Long PremLig = 2 DLig = Columns(Col).Find("*", , , , xlByColumns, xlPrevious).Row For i = PremLig To DLig If Cells(i, Col) <> Valeur_Combo Then Rows(i).EntireRow.Hidden = True Next i End SubCode que tu appelleras grâce à :
Sub CB_loadPort_Click() If CB_loadPort <> "" And CB_loadPort <> "Select a port" Then Call Filtre(3, CB_loadPort.Value) 'ou 3 est le numéro "en dur" de la colonne ou se trouve ta combo End If End Sub5- comme tu filtres ta feuille, il te faut aussi une Sub pour tout afficher
6- pour donner une valeur par défaut à ta combobox :
CB_LoadPort.Text = "Select a port"
Je vais prendre le temps d'analyser tout ca, mais vraiment, merci mille fois !