Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Remplir une ListBox avec des données filtrées

4 réponses
Avatar
Xavier
Bonjour à tous,

Voilà mon problème.
- J’ai trois ListBox dans un Mutipage 3 pages : GroupeEntree,
GroupePlatPrincipal, GroupeDessert qui sont alimentées par les données d’une
seule feuille "Groupes", Colonne A = Entrée, Plat principal ou Dessert /
Colonne B = Mets
- la macro ci-dessous existe également pour le filtre plat principal et
filtre dessert, les seules données qui changent sont Criteria1 et le nom des
ListBox
- dans mon Userform j’ai la macro suivante :
Sub Userform_Initialize ()
filtre_groupe_entree00
filtre_groupe_platprincipal00
filtre_groupe_dessert
End Sub

ce qui alimente mes troix ListBox avec les données de la colonne B

- après chaque filtre, chaque ListBox respectives est alimentée en fonction
de chaque résultat de filtre pour chacun des trois critères (entrée, plat
principal et dessert).
- quand le resultat du filtre renvoi des données (lignes visibles) ou aucun
résultat, la macro marche à merveille

- le problème survient quand il n’y a qu’une seule ligne visible, ceci
occasionne que ma ListBox est alimentée par la donnée en question, ce qui est
normal mais suivi des 65000 lignes vides.

Comment faire pour que si le résultat du filtre = 1 ligne => qu’une seule
donnée soit répercutée dans le LisbBox et non pas la totalité de la colonne

Merci pour votre aide.


Sub filtre_groupe_entree00()
Dim i As Integer
Dim r As Range
Dim cell As Range
Dim temp() As String

With Worksheets("Groupes")
.Columns("A:A").AutoFilter Field:=1, Criteria1:="Entrée"
End With

If Application.Subtotal(3, Range("A2:A1000")) > 0 Then

Set r = Range("Groupes!B2:" &
Worksheets("Groupes").Range("B2").End(xlDown).Address)
Set r = r.SpecialCells(xlCellTypeVisible)

ReDim temp(100)
For Each cell In r
If IsError(Application.Match(cell, temp, 0)) Then
On Error Resume Next
temp(i) = cell
i = i + 1
End If
Next cell
ReDim Preserve temp(i - 1)
Groupes.GroupeEntrees.List = temp
Else
Exit Sub
End If
End Sub



Feuille:
Colonne A Colonne B
________ ________
Dessert Coupe Danemark
Dessert Sorbet vanille
Dessert Fruit frais
Entrée Consommé au Porto
Entrée Soupe paysanne
Entrée Potage aux légumes
Plat principal Cotelettes d'agneau
Plat principal Gratin de pommes de terre
etc..
etc..

4 réponses

Avatar
lSteph
Bonjour,

Dans ces circonstances, il semble qu'avec 1 entrée 1plat principal et un
dessert tes listbox soient bien alimentées. Toutefois, si je m'en tiens à
l'initialize il faudrait dire au serveur de ne pas tout apporter en même
temps et si j'ai bien compris utiliser le change de chaque listbox pour maj
de la suivante.
Pour l'instant , n'ayant vu ni domaine ni château, je te laisse réagir à
cette première proposition, car ayant en ce châleureux 14 Juillet le gosier
bien à sec , je ne puis poursuivre.

Cordialement.

lSteph
"Xavier" a écrit dans le message de news:

Bonjour à tous,

Voilà mon problème.
- J'ai trois ListBox dans un Mutipage 3 pages : GroupeEntree,
GroupePlatPrincipal, GroupeDessert qui sont alimentées par les données d'une
seule feuille "Groupes", Colonne A = Entrée, Plat principal ou Dessert /
Colonne B = Mets
- la macro ci-dessous existe également pour le filtre plat principal et
filtre dessert, les seules données qui changent sont Criteria1 et le nom
des
ListBox
- dans mon Userform j'ai la macro suivante :
Sub Userform_Initialize ()
filtre_groupe_entree00
filtre_groupe_platprincipal00
filtre_groupe_dessert
End Sub

ce qui alimente mes troix ListBox avec les données de la colonne B

- après chaque filtre, chaque ListBox respectives est alimentée en
fonction
de chaque résultat de filtre pour chacun des trois critères (entrée, plat
principal et dessert).
- quand le resultat du filtre renvoi des données (lignes visibles) ou
aucun
résultat, la macro marche à merveille

- le problème survient quand il n'y a qu'une seule ligne visible, ceci
occasionne que ma ListBox est alimentée par la donnée en question, ce qui
est
normal mais suivi des 65000 lignes vides.

Comment faire pour que si le résultat du filtre = 1 ligne => qu'une seule
donnée soit répercutée dans le LisbBox et non pas la totalité de la
colonne

Merci pour votre aide.


Sub filtre_groupe_entree00()
Dim i As Integer
Dim r As Range
Dim cell As Range
Dim temp() As String

With Worksheets("Groupes")
.Columns("A:A").AutoFilter Field:=1, Criteria1:="Entrée"
End With

If Application.Subtotal(3, Range("A2:A1000")) > 0 Then

Set r = Range("Groupes!B2:" &
Worksheets("Groupes").Range("B2").End(xlDown).Address)
Set r = r.SpecialCells(xlCellTypeVisible)

ReDim temp(100)
For Each cell In r
If IsError(Application.Match(cell, temp, 0)) Then
On Error Resume Next
temp(i) = cell
i = i + 1
End If
Next cell
ReDim Preserve temp(i - 1)
Groupes.GroupeEntrees.List = temp
Else
Exit Sub
End If
End Sub



Feuille:
Colonne A Colonne B
________ ________
Dessert Coupe Danemark
Dessert Sorbet vanille
Dessert Fruit frais
Entrée Consommé au Porto
Entrée Soupe paysanne
Entrée Potage aux légumes
Plat principal Cotelettes d'agneau
Plat principal Gratin de pommes de terre
etc..
etc..



Avatar
Youky
Ben....La carte des vins ...Elle est où..???
C'est primordial...
Je pense que Jps le confirmera...
Youky
"Xavier" a écrit dans le message de news:

Bonjour à tous,

Voilà mon problème.
- J'ai trois ListBox dans un Mutipage 3 pages : GroupeEntree,
GroupePlatPrincipal, GroupeDessert qui sont alimentées par les données d'
une

seule feuille "Groupes", Colonne A = Entrée, Plat principal ou Dessert /
Colonne B = Mets
- la macro ci-dessous existe également pour le filtre plat principal et
filtre dessert, les seules données qui changent sont Criteria1 et le nom
des

ListBox
- dans mon Userform j'ai la macro suivante :
Sub Userform_Initialize ()
filtre_groupe_entree00
filtre_groupe_platprincipal00
filtre_groupe_dessert
End Sub

ce qui alimente mes troix ListBox avec les données de la colonne B

- après chaque filtre, chaque ListBox respectives est alimentée en
fonction

de chaque résultat de filtre pour chacun des trois critères (entrée, plat
principal et dessert).
- quand le resultat du filtre renvoi des données (lignes visibles) ou
aucun

résultat, la macro marche à merveille

- le problème survient quand il n'y a qu'une seule ligne visible, ceci
occasionne que ma ListBox est alimentée par la donnée en question, ce qui
est

normal mais suivi des 65000 lignes vides.

Comment faire pour que si le résultat du filtre = 1 ligne => qu'une seule
donnée soit répercutée dans le LisbBox et non pas la totalité de la
colonne


Merci pour votre aide.


Sub filtre_groupe_entree00()
Dim i As Integer
Dim r As Range
Dim cell As Range
Dim temp() As String

With Worksheets("Groupes")
.Columns("A:A").AutoFilter Field:=1, Criteria1:="Entrée"
End With

If Application.Subtotal(3, Range("A2:A1000")) > 0 Then

Set r = Range("Groupes!B2:" &
Worksheets("Groupes").Range("B2").End(xlDown).Address)
Set r = r.SpecialCells(xlCellTypeVisible)

ReDim temp(100)
For Each cell In r
If IsError(Application.Match(cell, temp, 0)) Then
On Error Resume Next
temp(i) = cell
i = i + 1
End If
Next cell
ReDim Preserve temp(i - 1)
Groupes.GroupeEntrees.List = temp
Else
Exit Sub
End If
End Sub



Feuille:
Colonne A Colonne B
________ ________
Dessert Coupe Danemark
Dessert Sorbet vanille
Dessert Fruit frais
Entrée Consommé au Porto
Entrée Soupe paysanne
Entrée Potage aux légumes
Plat principal Cotelettes d'agneau
Plat principal Gratin de pommes de terre
etc..
etc..



Avatar
Youky
Re
Fait un essai avec ceci(sans filtre)cela alimente les 3 listbox
à mettre en initialize

ListBox1.Clear 'Entrée
ListBox2.Clear 'Plat principal
ListBox3.Clear 'Dessert
For k = 2 To Feuil1.[A65536].End(xlUp).Row
If Feuil1.Cells(k, 1) = "Entrée" Then ListBox1.AddItem Feuil1.Cells(k, 2)
If Feuil1.Cells(k, 1) = "Plat principal" Then ListBox2.AddItem
Feuil1.Cells(k, 2)
If Feuil1.Cells(k, 1) = "Dessert" Then ListBox3.AddItem Feuil1.Cells(k, 2)
Next

Youky

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

Bonjour à tous,

Voilà mon problème.
- J'ai trois ListBox dans un Mutipage 3 pages : GroupeEntree,
GroupePlatPrincipal, GroupeDessert qui sont alimentées par les données d'
une

seule feuille "Groupes", Colonne A = Entrée, Plat principal ou Dessert /
Colonne B = Mets
- la macro ci-dessous existe également pour le filtre plat principal et
filtre dessert, les seules données qui changent sont Criteria1 et le nom
des

ListBox
- dans mon Userform j'ai la macro suivante :
Sub Userform_Initialize ()
filtre_groupe_entree00
filtre_groupe_platprincipal00
filtre_groupe_dessert
End Sub

ce qui alimente mes troix ListBox avec les données de la colonne B

- après chaque filtre, chaque ListBox respectives est alimentée en
fonction

de chaque résultat de filtre pour chacun des trois critères (entrée, plat
principal et dessert).
- quand le resultat du filtre renvoi des données (lignes visibles) ou
aucun

résultat, la macro marche à merveille

- le problème survient quand il n'y a qu'une seule ligne visible, ceci
occasionne que ma ListBox est alimentée par la donnée en question, ce qui
est

normal mais suivi des 65000 lignes vides.

Comment faire pour que si le résultat du filtre = 1 ligne => qu'une seule
donnée soit répercutée dans le LisbBox et non pas la totalité de la
colonne


Merci pour votre aide.


Sub filtre_groupe_entree00()
Dim i As Integer
Dim r As Range
Dim cell As Range
Dim temp() As String

With Worksheets("Groupes")
.Columns("A:A").AutoFilter Field:=1, Criteria1:="Entrée"
End With

If Application.Subtotal(3, Range("A2:A1000")) > 0 Then

Set r = Range("Groupes!B2:" &
Worksheets("Groupes").Range("B2").End(xlDown).Address)
Set r = r.SpecialCells(xlCellTypeVisible)

ReDim temp(100)
For Each cell In r
If IsError(Application.Match(cell, temp, 0)) Then
On Error Resume Next
temp(i) = cell
i = i + 1
End If
Next cell
ReDim Preserve temp(i - 1)
Groupes.GroupeEntrees.List = temp
Else
Exit Sub
End If
End Sub



Feuille:
Colonne A Colonne B
________ ________
Dessert Coupe Danemark
Dessert Sorbet vanille
Dessert Fruit frais
Entrée Consommé au Porto
Entrée Soupe paysanne
Entrée Potage aux légumes
Plat principal Cotelettes d'agneau
Plat principal Gratin de pommes de terre
etc..
etc..



Avatar
lSteph
c'est bien ce que je dis!
"Youky" a écrit dans le message de news:
44b7bff1$0$858$
Ben....La carte des vins ...Elle est où..???
C'est primordial...
Je pense que Jps le confirmera...
Youky
"Xavier" a écrit dans le message de
news:

Bonjour à tous,

Voilà mon problème.
- J'ai trois ListBox dans un Mutipage 3 pages : GroupeEntree,
GroupePlatPrincipal, GroupeDessert qui sont alimentées par les données d'
une

seule feuille "Groupes", Colonne A = Entrée, Plat principal ou Dessert /
Colonne B = Mets
- la macro ci-dessous existe également pour le filtre plat principal et
filtre dessert, les seules données qui changent sont Criteria1 et le nom
des

ListBox
- dans mon Userform j'ai la macro suivante :
Sub Userform_Initialize ()
filtre_groupe_entree00
filtre_groupe_platprincipal00
filtre_groupe_dessert
End Sub

ce qui alimente mes troix ListBox avec les données de la colonne B

- après chaque filtre, chaque ListBox respectives est alimentée en
fonction

de chaque résultat de filtre pour chacun des trois critères (entrée, plat
principal et dessert).
- quand le resultat du filtre renvoi des données (lignes visibles) ou
aucun

résultat, la macro marche à merveille

- le problème survient quand il n'y a qu'une seule ligne visible, ceci
occasionne que ma ListBox est alimentée par la donnée en question, ce qui
est

normal mais suivi des 65000 lignes vides.

Comment faire pour que si le résultat du filtre = 1 ligne => qu'une seule
donnée soit répercutée dans le LisbBox et non pas la totalité de la
colonne


Merci pour votre aide.


Sub filtre_groupe_entree00()
Dim i As Integer
Dim r As Range
Dim cell As Range
Dim temp() As String

With Worksheets("Groupes")
.Columns("A:A").AutoFilter Field:=1, Criteria1:="Entrée"
End With

If Application.Subtotal(3, Range("A2:A1000")) > 0 Then

Set r = Range("Groupes!B2:" &
Worksheets("Groupes").Range("B2").End(xlDown).Address)
Set r = r.SpecialCells(xlCellTypeVisible)

ReDim temp(100)
For Each cell In r
If IsError(Application.Match(cell, temp, 0)) Then
On Error Resume Next
temp(i) = cell
i = i + 1
End If
Next cell
ReDim Preserve temp(i - 1)
Groupes.GroupeEntrees.List = temp
Else
Exit Sub
End If
End Sub



Feuille:
Colonne A Colonne B
________ ________
Dessert Coupe Danemark
Dessert Sorbet vanille
Dessert Fruit frais
Entrée Consommé au Porto
Entrée Soupe paysanne
Entrée Potage aux légumes
Plat principal Cotelettes d'agneau
Plat principal Gratin de pommes de terre
etc..
etc..