OVH Cloud OVH Cloud

Récupération des valeurs de listes de filtrage

12 réponses
Avatar
Herdet
Bonsoir à tous,
Je sais, un dimanche en plein pont du 11 novembre (en France), j'ai peu de
chance d'avoir une réponse, mais bon... essayons.
Exposé du propblème :
Après l'utilisation de filtre automatique, je cherche à récupérer en VBA
dans des Combobox les items qui sont visibles en cliquant dans les petites
flêches bleue de chaque colonne d'un tableau de données.

Pour mon exemple, j'ai 3 combo nommées CBX1, CBX2,CBX3 (en réalité j'en ai
11) disposées sur une feuille.
La feuille de données est nommée Sht_base et est masquée en utilisation (si
possible très masquée par Visible=xlSheetVeryHidden)

Si je fais une sélection dans la combo CBX1
Private Sub CBX1_Change()
Sht_base.Range("A3").AutoFilter field:=3,
Criteria1:=Sht_Rech.CBX1.Value, VisibleDropDown:=True
'-------- récupération dans CBX1 et CBX2 des valeurs des nouvelles
listes
' de la filtration automatique qui sont en principe plus réduites
' et c'est là que j'ai besoin de vos lumières (SOS)!

End Sub

Merci et à bientôt.
Robert Dezan

10 réponses

1 2
Avatar
michdenis
Bonsoir Robert,


Je n'ai pas tout compris ...

tu as 11 colonnes et chacune d'elles est contenu dans un combobox.

Si tu choisis une valeur dans le combobox1 représentant les valeurs de ta première colonne de ta table des données, tu
voudrais que suite à un filtre automatique que le même combobox affiche le résultat du filtre automatique. Est-ce que
j'ai bien compris ? Chaque colonne est indépendante des unes des autres lors de l'application des filtres ?



Salutations!



"Herdet" a écrit dans le message de news:
Bonsoir à tous,
Je sais, un dimanche en plein pont du 11 novembre (en France), j'ai peu de
chance d'avoir une réponse, mais bon... essayons.
Exposé du propblème :
Après l'utilisation de filtre automatique, je cherche à récupérer en VBA
dans des Combobox les items qui sont visibles en cliquant dans les petites
flêches bleue de chaque colonne d'un tableau de données.

Pour mon exemple, j'ai 3 combo nommées CBX1, CBX2,CBX3 (en réalité j'en ai
11) disposées sur une feuille.
La feuille de données est nommée Sht_base et est masquée en utilisation (si
possible très masquée par Visible=xlSheetVeryHidden)

Si je fais une sélection dans la combo CBX1
Private Sub CBX1_Change()
Sht_base.Range("A3").AutoFilter field:=3,
Criteria1:=Sht_Rech.CBX1.Value, VisibleDropDown:=True
'-------- récupération dans CBX1 et CBX2 des valeurs des nouvelles
listes
' de la filtration automatique qui sont en principe plus réduites
' et c'est là que j'ai besoin de vos lumières (SOS)!

End Sub

Merci et à bientôt.
Robert Dezan
Avatar
Herdet
Bonsoir Denis,
Bon, faisons au plus simple et j'adapterai la solution (si elle existe)
J'ai un tableau de données A1:A101 avec en A1 le nom de champ "Prix" puis
100 lignes de valeurs quelconques.
Je créé un Filtre automatique sur "Prix"
Je clique sur la petite flêche bleue qui déroule un certain nb de valeurs
sans doublon.
Comment récupérer ces valeurs sans doublon dans un tableau VBA nommé TAprix
?

Je pense que cela devrait être plus compréhensible.
A bientôt
Robert


"michdenis" a écrit dans le message de news:
#
Bonsoir Robert,


Je n'ai pas tout compris ...

tu as 11 colonnes et chacune d'elles est contenu dans un combobox.

Si tu choisis une valeur dans le combobox1 représentant les valeurs de ta
première colonne de ta table des données, tu

voudrais que suite à un filtre automatique que le même combobox affiche le
résultat du filtre automatique. Est-ce que

j'ai bien compris ? Chaque colonne est indépendante des unes des autres
lors de l'application des filtres ?




Salutations!



"Herdet" a écrit dans le message de
news:

Bonsoir à tous,
Je sais, un dimanche en plein pont du 11 novembre (en France), j'ai peu de
chance d'avoir une réponse, mais bon... essayons.
Exposé du propblème :
Après l'utilisation de filtre automatique, je cherche à récupérer en VBA
dans des Combobox les items qui sont visibles en cliquant dans les petites
flêches bleue de chaque colonne d'un tableau de données.

Pour mon exemple, j'ai 3 combo nommées CBX1, CBX2,CBX3 (en réalité j'en ai
11) disposées sur une feuille.
La feuille de données est nommée Sht_base et est masquée en utilisation
(si

possible très masquée par Visible=xlSheetVeryHidden)

Si je fais une sélection dans la combo CBX1
Private Sub CBX1_Change()
Sht_base.Range("A3").AutoFilter field:=3,
Criteria1:=Sht_Rech.CBX1.Value, VisibleDropDown:=True
'-------- récupération dans CBX1 et CBX2 des valeurs des nouvelles
listes
' de la filtration automatique qui sont en principe plus réduites
' et c'est là que j'ai besoin de vos lumières (SOS)!

End Sub

Merci et à bientôt.
Robert Dezan






Avatar
Jean-François Aubert
Salut Robert,

Pas sûr d'avoir compris ton problème.

(Et puis voilà qu'au moment ou je veux poster,
le problème est posé un peu différemment...

Tant pis, j'envoie...)

J'ai supposé:
- les CBx1 à 3 dans la feuille Sht_Rech
- des titres de colonne en A3:C3 de la feuille Sht_base
- des cellules renseignées en A4:Cx de la feuille Sht_base
- je n'ai pas réussi à faire autrement que le bidouillage
du If y = 4, si le résultat du filtre est la ligne 4

Cela remplit les les combo 2 et 3 de la valeur
des cellules des colonnes B et A de la feuille Sht_base
- si le résultat du filtre comporte plus d'une ligne, cela ne marche pas...
je ne sais de toute façon pas remplir des combo avec plusieurs items...

- m'étant bien amusé à faire ce truc, il y a au moins une personne satisfaite....

'*************************
Private Sub CBx1_Change()

With Sheets("Sht_base")
Sheets("Sht_base").Range("A3").AutoFilter Field:=3, Criteria1:=Sheets("Sht_Rech").CBx1.Value
y = Sheets("Sht_base").Range("c65536").End(xlUp)(1).Row
If y = 4 Then
Sheets("Sht_Rech").CBx2 = Sheets("Sht_base").[B4]
Sheets("Sht_Rech").CBx3 = Sheets("Sht_base").[A4]
Exit Sub
Else
Set rng = Sheets("Sht_base").Range("C4:C" & y)
End If
For Each cellule In rng.SpecialCells(xlCellTypeVisible)
Sheets("Sht_Rech").CBx2 = cellule.Offset(0, -1)
Sheets("Sht_Rech").CBx3 = cellule.Offset(0, -2)
Next cellule
End With
Set rng = Nothing

End Sub
'*************************
--
Amicalement

Jean-François Aubert
{Vaudois de la Côte Lémanique}


"Herdet" a écrit dans le message de news:
Bonsoir à tous,
Je sais, un dimanche en plein pont du 11 novembre (en France), j'ai peu de
chance d'avoir une réponse, mais bon... essayons.
Exposé du propblème :
Après l'utilisation de filtre automatique, je cherche à récupérer en VBA
dans des Combobox les items qui sont visibles en cliquant dans les petites
flêches bleue de chaque colonne d'un tableau de données.

Pour mon exemple, j'ai 3 combo nommées CBX1, CBX2,CBX3 (en réalité j'en ai
11) disposées sur une feuille.
La feuille de données est nommée Sht_base et est masquée en utilisation (si
possible très masquée par Visible=xlSheetVeryHidden)

Si je fais une sélection dans la combo CBX1
Private Sub CBX1_Change()
Sht_base.Range("A3").AutoFilter field:=3,
Criteria1:=Sht_Rech.CBX1.Value, VisibleDropDown:=True
'-------- récupération dans CBX1 et CBX2 des valeurs des nouvelles
listes
' de la filtration automatique qui sont en principe plus réduites
' et c'est là que j'ai besoin de vos lumières (SOS)!

End Sub

Merci et à bientôt.
Robert Dezan





Avatar
AV
Alimenter la combobox qui est sur feuill1 avec les valeurs uniques contenues en
A1:A101
C'est bien la question ?

Sub Uniq_Dans_Combo()
Dim Tbl As New Collection
Set Plage = Range("Feuil1!A2:A101")
On Error Resume Next
For Each C In Plage
Tbl.Add C.Value, CStr(C.Value)
Next C
With Sheets("Feuil1").ComboBox1
.Clear
For I = 1 To Tbl.Count
.AddItem Tbl(I)
Next I
.ListIndex = 0
End With
End Sub

AV
Avatar
Denis Michon
Bonsoir Robert,

Voici une procédure que tu peux lancer à l'ouverture du fichier, elle va initialer tous les combobox de ta feuille d'un
seul coup.

la plage de cellules IV25000 et plus est réservée à un filtre élaboré sans doublon pour récupérer les listes.

J'ai pris pour acquis que tu n'avais pas plus de 11 combobox dans la feuille , chacun attaché aux 11 colonnes de ta
plage de cellules.(et ce pour les fins de la boucle dans la procécure ... for each ... in ...)

Évidemment, les 11 colonnes doivent être adjacentes...

Tu n'as qu'à définir quelques variables selon la donne de ton projet.


'-----------------------------------------
Sub Initialer_Contenu_Des_Combobox()

Dim Rg As Range, DerLig As Long, Rg1 As Range
Dim Tblo As Variant, NomCombobox As String
Dim Sh As Worksheet, Shp As Shape

'********Variable à définir**********

NomCombobox = "Combobox" 'Sans l'index
Set Sh = Worksheets("Feuil1")

'Ne pas oublier aussi la plage de cellule
'exemple --> .Range("A:K")...

'************************************

With Sh
'Cellule de destintation où se fera
'un filtre élaboré sans doublons.
Set Rg1 = .Range("IV25000")
'détermine la dernière lignes de données
DerLig = .Range("A:K").Find("*", SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious).Row
Set Rg = .Range("A1:K" & DerLig)
End With
On Error Resume Next

For Each Shp In Sh.Shapes
'Cette ligne de code génère une erreur si le
'contrôle n'est pas un objet provenant de la barre
'outils contrôle --> raison du On error ...
If TypeName(Shp.OLEFormat.Object.Object) = "ComboBox" Then
If Err = 0 Then
A = A + 1
With Sh
.Range(Rg1, .Range(Rg1.Address).End(xlDown)).Clear
With Rg.Columns(A).SpecialCells(xlCellTypeConstants)
.AdvancedFilter xlFilterCopy, , Rg1, True
End With
Tblo = .Range(Rg1.Offset(1), .Range(Rg1.Address).End(xlDown))
.Shapes(NomCombobox & A).OLEFormat.Object.Object.List = Tblo
End With
Else
Err = 0
End If
End If
Next

Set Rg = Nothing: Set Rg1 = Nothing
Set Sh = Nothing: Set Shp = Nothing

End Sub
'-----------------------------------------


Salutations!






"Herdet" a écrit dans le message de news:
Bonsoir Denis,
Bon, faisons au plus simple et j'adapterai la solution (si elle existe)
J'ai un tableau de données A1:A101 avec en A1 le nom de champ "Prix" puis
100 lignes de valeurs quelconques.
Je créé un Filtre automatique sur "Prix"
Je clique sur la petite flêche bleue qui déroule un certain nb de valeurs
sans doublon.
Comment récupérer ces valeurs sans doublon dans un tableau VBA nommé TAprix
?

Je pense que cela devrait être plus compréhensible.
A bientôt
Robert


"michdenis" a écrit dans le message de news:
#
Bonsoir Robert,


Je n'ai pas tout compris ...

tu as 11 colonnes et chacune d'elles est contenu dans un combobox.

Si tu choisis une valeur dans le combobox1 représentant les valeurs de ta
première colonne de ta table des données, tu

voudrais que suite à un filtre automatique que le même combobox affiche le
résultat du filtre automatique. Est-ce que

j'ai bien compris ? Chaque colonne est indépendante des unes des autres
lors de l'application des filtres ?




Salutations!



"Herdet" a écrit dans le message de
news:

Bonsoir à tous,
Je sais, un dimanche en plein pont du 11 novembre (en France), j'ai peu de
chance d'avoir une réponse, mais bon... essayons.
Exposé du propblème :
Après l'utilisation de filtre automatique, je cherche à récupérer en VBA
dans des Combobox les items qui sont visibles en cliquant dans les petites
flêches bleue de chaque colonne d'un tableau de données.

Pour mon exemple, j'ai 3 combo nommées CBX1, CBX2,CBX3 (en réalité j'en ai
11) disposées sur une feuille.
La feuille de données est nommée Sht_base et est masquée en utilisation
(si

possible très masquée par Visible=xlSheetVeryHidden)

Si je fais une sélection dans la combo CBX1
Private Sub CBX1_Change()
Sht_base.Range("A3").AutoFilter field:=3,
Criteria1:=Sht_Rech.CBX1.Value, VisibleDropDown:=True
'-------- récupération dans CBX1 et CBX2 des valeurs des nouvelles
listes
' de la filtration automatique qui sont en principe plus réduites
' et c'est là que j'ai besoin de vos lumières (SOS)!

End Sub

Merci et à bientôt.
Robert Dezan






Avatar
Herdet
Bonjour (ou bonsoir) Denis,
Si je reprend ta réponse :
<<J'ai pris pour acquis que tu n'avais pas plus de 11 combobox dans la
feuille ,
chacun attaché aux 11 colonnes de ta plage de cellules.(et ce pour les fins
de la boucle dans la procécure ... for each ... in ...)
Évidemment, les 11 colonnes doivent être adjacentes...>>

Manque de chance, les 11 combo utilisent 11 champs non adjacents parmi les
40 de la base.
Je vais étudier de près ta solution et voir si je peux l'adapter.
Merci en tout cas d'avoir passé un peu de ton temps sur ce problème.
Salutations
Robert

"Denis Michon" a écrit dans le message de news:
cyGrb.26507$
Bonsoir Robert,

Voici une procédure que tu peux lancer à l'ouverture du fichier, elle va
initialer tous les combobox de ta feuille d'un

seul coup.

la plage de cellules IV25000 et plus est réservée à un filtre élaboré sans
doublon pour récupérer les listes.


J'ai pris pour acquis que tu n'avais pas plus de 11 combobox dans la
feuille , chacun attaché aux 11 colonnes de ta

plage de cellules.(et ce pour les fins de la boucle dans la procécure ...
for each ... in ...)


Évidemment, les 11 colonnes doivent être adjacentes...

Tu n'as qu'à définir quelques variables selon la donne de ton projet.


'-----------------------------------------
Sub Initialer_Contenu_Des_Combobox()

Dim Rg As Range, DerLig As Long, Rg1 As Range
Dim Tblo As Variant, NomCombobox As String
Dim Sh As Worksheet, Shp As Shape

'********Variable à définir**********

NomCombobox = "Combobox" 'Sans l'index
Set Sh = Worksheets("Feuil1")

'Ne pas oublier aussi la plage de cellule
'exemple --> .Range("A:K")...

'************************************

With Sh
'Cellule de destintation où se fera
'un filtre élaboré sans doublons.
Set Rg1 = .Range("IV25000")
'détermine la dernière lignes de données
DerLig = .Range("A:K").Find("*", SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious).Row
Set Rg = .Range("A1:K" & DerLig)
End With
On Error Resume Next

For Each Shp In Sh.Shapes
'Cette ligne de code génère une erreur si le
'contrôle n'est pas un objet provenant de la barre
'outils contrôle --> raison du On error ...
If TypeName(Shp.OLEFormat.Object.Object) = "ComboBox" Then
If Err = 0 Then
A = A + 1
With Sh
.Range(Rg1, .Range(Rg1.Address).End(xlDown)).Clear
With Rg.Columns(A).SpecialCells(xlCellTypeConstants)
.AdvancedFilter xlFilterCopy, , Rg1, True
End With
Tblo = .Range(Rg1.Offset(1),
.Range(Rg1.Address).End(xlDown))

.Shapes(NomCombobox & A).OLEFormat.Object.Object.List Tblo
End With
Else
Err = 0
End If
End If
Next

Set Rg = Nothing: Set Rg1 = Nothing
Set Sh = Nothing: Set Shp = Nothing

End Sub
'-----------------------------------------


Salutations!






"Herdet" a écrit dans le message de
news:

Bonsoir Denis,
Bon, faisons au plus simple et j'adapterai la solution (si elle existe)
J'ai un tableau de données A1:A101 avec en A1 le nom de champ "Prix" puis
100 lignes de valeurs quelconques.
Je créé un Filtre automatique sur "Prix"
Je clique sur la petite flêche bleue qui déroule un certain nb de valeurs
sans doublon.
Comment récupérer ces valeurs sans doublon dans un tableau VBA nommé
TAprix

?

Je pense que cela devrait être plus compréhensible.
A bientôt
Robert


"michdenis" a écrit dans le message de news:
#
Bonsoir Robert,


Je n'ai pas tout compris ...

tu as 11 colonnes et chacune d'elles est contenu dans un combobox.

Si tu choisis une valeur dans le combobox1 représentant les valeurs de
ta


première colonne de ta table des données, tu
voudrais que suite à un filtre automatique que le même combobox affiche
le


résultat du filtre automatique. Est-ce que
j'ai bien compris ? Chaque colonne est indépendante des unes des autres
lors de l'application des filtres ?




Salutations!



"Herdet" a écrit dans le message de
news:

Bonsoir à tous,
Je sais, un dimanche en plein pont du 11 novembre (en France), j'ai peu
de


chance d'avoir une réponse, mais bon... essayons.
Exposé du propblème :
Après l'utilisation de filtre automatique, je cherche à récupérer en VBA
dans des Combobox les items qui sont visibles en cliquant dans les
petites


flêches bleue de chaque colonne d'un tableau de données.

Pour mon exemple, j'ai 3 combo nommées CBX1, CBX2,CBX3 (en réalité j'en
ai


11) disposées sur une feuille.
La feuille de données est nommée Sht_base et est masquée en utilisation
(si

possible très masquée par Visible=xlSheetVeryHidden)

Si je fais une sélection dans la combo CBX1
Private Sub CBX1_Change()
Sht_base.Range("A3").AutoFilter field:=3,
Criteria1:=Sht_Rech.CBX1.Value, VisibleDropDown:=True
'-------- récupération dans CBX1 et CBX2 des valeurs des nouvelles
listes
' de la filtration automatique qui sont en principe plus
réduites


' et c'est là que j'ai besoin de vos lumières (SOS)!

End Sub

Merci et à bientôt.
Robert Dezan











Avatar
Herdet
Bonjour Alain,
Ta solution est excellente mais elle sera parfaite avec une ligne vide de
moins à la fin
<<For I = 1 To Tbl.Count-1 >> et avec les valeurs recupérées triées en ordre
croissant.
J'ai ajouté une proc de tri mais qui ne semble pas très rapide et donc si tu
en trouve une assez véloce, je suis preneur.

Merci pour ton aide
Robert

"AV" a écrit dans le message de news:

Alimenter la combobox qui est sur feuill1 avec les valeurs uniques
contenues en

A1:A101
C'est bien la question ?

Sub Uniq_Dans_Combo()
Dim Tbl As New Collection
Set Plage = Range("Feuil1!A2:A101")
On Error Resume Next
For Each C In Plage
Tbl.Add C.Value, CStr(C.Value)
Next C
With Sheets("Feuil1").ComboBox1
.Clear
For I = 1 To Tbl.Count
.AddItem Tbl(I)
Next I
.ListIndex = 0
End With
End Sub

AV




Avatar
Herdet
Bonjour Alain,
Mon message est part un peu trop vite.
Pour la ligne vide à la fin, laisse tomber, ma Plage intégrait le nom du
champ.
J'ai ajouté la proc de tri ci-dessous mais qui ne semble pas très rapide et
donc si tu en trouve une plus véloce, je suis preneur.
La ligne vide d'en haut après le tri servira à écrire "Tous" comme dans le
filtre.
Merci pour ton aide
Robert
--------------------------------------------------------
' -------- tri des données
For i = 1 To Tbl.Count
For j = i + 1 To Tbl.Count
If Tbl(i) > Tbl(j) Then
Swap1 = Tbl(i)
Swap2 = Tbl(j)
Tbl.Add Swap1, before:=j
Tbl.Add Swap2, before:=i
Tbl.Remove i + 1
Tbl.Remove j + 1
End If
Next j
Next i
---------------------------------------------------
"AV" a écrit dans le message de news:

Alimenter la combobox qui est sur feuill1 avec les valeurs uniques
contenues en

A1:A101
C'est bien la question ?

Sub Uniq_Dans_Combo()
Dim Tbl As New Collection
Set Plage = Range("Feuil1!A2:A101")
On Error Resume Next
For Each C In Plage
Tbl.Add C.Value, CStr(C.Value)
Next C
With Sheets("Feuil1").ComboBox1
.Clear
For I = 1 To Tbl.Count
.AddItem Tbl(I)
Next I
.ListIndex = 0
End With
End Sub

AV





"AV" a écrit dans le message de news:

Alimenter la combobox qui est sur feuill1 avec les valeurs uniques
contenues en

A1:A101
C'est bien la question ?

Sub Uniq_Dans_Combo()
Dim Tbl As New Collection
Set Plage = Range("Feuil1!A2:A101")
On Error Resume Next
For Each C In Plage
Tbl.Add C.Value, CStr(C.Value)
Next C
With Sheets("Feuil1").ComboBox1
.Clear
For I = 1 To Tbl.Count
.AddItem Tbl(I)
Next I
.ListIndex = 0
End With
End Sub

AV




Avatar
Herdet
Bonjour Jean-François,
Merci pour ton aide mais ma 1ere question n'était manifestement pas claire
du tout.
La solution d'Alain à ma 2ème question fonctionne très bien (comme
d'habitude)
A noter que, en l'adaptant, cela peut être une bonne solution pour récupérer
les valeurs sans doublon d'une colonne d'un tableau.
Salutations cordiales.
Robert
Avatar
Denis Michon
Bonjour Robert,

La même procédure avec un ajout d'une variable de type "array" que tu dois définir avec une liste des numéros de colonne
"RELATIF" à la plage que tu as défini.

J'ai ajouté aussi une ligne de code, qui met en ordre croissant le contenu des combobox.

Variables à définir :
1 ) Nom de la feuille
2 ) Nom des combobox (sans l'index)
3 ) liste des colonnes dans "Array"
4 ) Plage globale de ton tableau de cellules


'----------------------------------------
Sub Initialer_Contenu_Des_Combobox()

Dim Rg As Range, DerLig As Long, Rg1 As Range
Dim Tblo As Variant, NomCombobox As String
Dim Sh As Worksheet, Shp As Shape, Arr(), A As Integer

'********Variable à définir**********

NomCombobox = "Combobox" 'Sans l'index
Set Sh = Worksheets("Feuil1")
Arr = Array(1, 3, 5) 'à déterminer

'Ne pas oublier aussi la plage de cellule
'exemple --> .Range("A:K")...

'************************************

With Sh
'Cellule de destintation où se fera
'un filtre élaboré sans doublons.
Set Rg1 = .Range("IV25000")
'détermine la dernière lignes de données
DerLig = .Range("A:K").Find("*", SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious).Row
Set Rg = .Range("A1:K" & DerLig)
End With
'On Error Resume Next

For Each Shp In Sh.Shapes
'Cette ligne de code génère une erreur si le
'contrôle n'est pas un objet provenant de la barre
'outils contrôle --> raison du On error ...
If TypeName(Shp.OLEFormat.Object.Object) = "ComboBox" Then
If Err = 0 Then
A = A + 1
With Sh
.Range(Rg1, .Range(Rg1.Address).End(xlDown)).Clear
With Rg.Columns(Application.Index(Arr, A)). _
SpecialCells(xlCellTypeConstants)
.AdvancedFilter xlFilterCopy, , Rg1, True
End With
With .Range(Rg1.Offset(1), .Range(Rg1.Address).End(xlDown))
.Sort Key1:=Rg1.Offset(1), order1:=xlAscending
Tblo = .Value
End With
.Shapes(NomCombobox & A).OLEFormat.Object.Object.List = Tblo
End With
Else
Err = 0
End If
End If
Next

Set Rg = Nothing: Set Rg1 = Nothing
Set Sh = Nothing: Set Shp = Nothing

End Sub
'----------------------------------------


Salutations!



"Herdet" a écrit dans le message de news:
Bonjour (ou bonsoir) Denis,
Si je reprend ta réponse :
<<J'ai pris pour acquis que tu n'avais pas plus de 11 combobox dans la
feuille ,
chacun attaché aux 11 colonnes de ta plage de cellules.(et ce pour les fins
de la boucle dans la procécure ... for each ... in ...)
Évidemment, les 11 colonnes doivent être adjacentes...>>

Manque de chance, les 11 combo utilisent 11 champs non adjacents parmi les
40 de la base.
Je vais étudier de près ta solution et voir si je peux l'adapter.
Merci en tout cas d'avoir passé un peu de ton temps sur ce problème.
Salutations
Robert

"Denis Michon" a écrit dans le message de news:
cyGrb.26507$
Bonsoir Robert,

Voici une procédure que tu peux lancer à l'ouverture du fichier, elle va
initialer tous les combobox de ta feuille d'un

seul coup.

la plage de cellules IV25000 et plus est réservée à un filtre élaboré sans
doublon pour récupérer les listes.


J'ai pris pour acquis que tu n'avais pas plus de 11 combobox dans la
feuille , chacun attaché aux 11 colonnes de ta

plage de cellules.(et ce pour les fins de la boucle dans la procécure ...
for each ... in ...)


Évidemment, les 11 colonnes doivent être adjacentes...

Tu n'as qu'à définir quelques variables selon la donne de ton projet.


'-----------------------------------------
Sub Initialer_Contenu_Des_Combobox()

Dim Rg As Range, DerLig As Long, Rg1 As Range
Dim Tblo As Variant, NomCombobox As String
Dim Sh As Worksheet, Shp As Shape

'********Variable à définir**********

NomCombobox = "Combobox" 'Sans l'index
Set Sh = Worksheets("Feuil1")

'Ne pas oublier aussi la plage de cellule
'exemple --> .Range("A:K")...

'************************************

With Sh
'Cellule de destintation où se fera
'un filtre élaboré sans doublons.
Set Rg1 = .Range("IV25000")
'détermine la dernière lignes de données
DerLig = .Range("A:K").Find("*", SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious).Row
Set Rg = .Range("A1:K" & DerLig)
End With
On Error Resume Next

For Each Shp In Sh.Shapes
'Cette ligne de code génère une erreur si le
'contrôle n'est pas un objet provenant de la barre
'outils contrôle --> raison du On error ...
If TypeName(Shp.OLEFormat.Object.Object) = "ComboBox" Then
If Err = 0 Then
A = A + 1
With Sh
.Range(Rg1, .Range(Rg1.Address).End(xlDown)).Clear
With Rg.Columns(A).SpecialCells(xlCellTypeConstants)
.AdvancedFilter xlFilterCopy, , Rg1, True
End With
Tblo = .Range(Rg1.Offset(1),
.Range(Rg1.Address).End(xlDown))

.Shapes(NomCombobox & A).OLEFormat.Object.Object.List Tblo
End With
Else
Err = 0
End If
End If
Next

Set Rg = Nothing: Set Rg1 = Nothing
Set Sh = Nothing: Set Shp = Nothing

End Sub
'-----------------------------------------


Salutations!






"Herdet" a écrit dans le message de
news:

Bonsoir Denis,
Bon, faisons au plus simple et j'adapterai la solution (si elle existe)
J'ai un tableau de données A1:A101 avec en A1 le nom de champ "Prix" puis
100 lignes de valeurs quelconques.
Je créé un Filtre automatique sur "Prix"
Je clique sur la petite flêche bleue qui déroule un certain nb de valeurs
sans doublon.
Comment récupérer ces valeurs sans doublon dans un tableau VBA nommé
TAprix

?

Je pense que cela devrait être plus compréhensible.
A bientôt
Robert


"michdenis" a écrit dans le message de news:
#
Bonsoir Robert,


Je n'ai pas tout compris ...

tu as 11 colonnes et chacune d'elles est contenu dans un combobox.

Si tu choisis une valeur dans le combobox1 représentant les valeurs de
ta


première colonne de ta table des données, tu
voudrais que suite à un filtre automatique que le même combobox affiche
le


résultat du filtre automatique. Est-ce que
j'ai bien compris ? Chaque colonne est indépendante des unes des autres
lors de l'application des filtres ?




Salutations!



"Herdet" a écrit dans le message de
news:

Bonsoir à tous,
Je sais, un dimanche en plein pont du 11 novembre (en France), j'ai peu
de


chance d'avoir une réponse, mais bon... essayons.
Exposé du propblème :
Après l'utilisation de filtre automatique, je cherche à récupérer en VBA
dans des Combobox les items qui sont visibles en cliquant dans les
petites


flêches bleue de chaque colonne d'un tableau de données.

Pour mon exemple, j'ai 3 combo nommées CBX1, CBX2,CBX3 (en réalité j'en
ai


11) disposées sur une feuille.
La feuille de données est nommée Sht_base et est masquée en utilisation
(si

possible très masquée par Visible=xlSheetVeryHidden)

Si je fais une sélection dans la combo CBX1
Private Sub CBX1_Change()
Sht_base.Range("A3").AutoFilter field:=3,
Criteria1:=Sht_Rech.CBX1.Value, VisibleDropDown:=True
'-------- récupération dans CBX1 et CBX2 des valeurs des nouvelles
listes
' de la filtration automatique qui sont en principe plus
réduites


' et c'est là que j'ai besoin de vos lumières (SOS)!

End Sub

Merci et à bientôt.
Robert Dezan











1 2