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

Filtre dans une ListBox

25 réponses
Avatar
DAVID
Bonsoir

J'essai de faire apparaitre dans une ListBox le résultat d'un filtre.

Merci de m'aider une nouvelle fois !!

J'ai essayé avec ce bout de code mais bon ...erreur "impossible de définir
la propriété RowsSource"

Private Sub Filtrer_Click()
Dim a As Single
Dim b As Single
a = CDate(Text1)
b = CDate(Text2)

Dim Filtre As Integer
Dim Plage As Range
Liste1.RowSource = Sheets("Feuil1").Range("A65536").End(xlUp).Row
Liste1.ListIndex = -1
Set Plage = Sheets("Feuil1").Range("A1:J" & Liste1.RowSource)
Plage.AutoFilter Field:=1, Criteria1:=">=" & a, Operator:=xlAnd,
Criteria2:="<=" & b

End Sub

10 réponses

1 2 3
Avatar
Daniel.C
Apparemment, il manque l'userform avec le contrôle Calendar. Est-ce que
tu peux renvoyer le classeur ?
Merci.
Daniel

Voici. Merci de votre aide

http://www.cijoint.fr/cjlink.php?file=cj201001/cijkFLPV0f.xls


Avatar
DAVID
Désolé

Voici le fichier complet, au moins je suis sûre que tu a tout !!

http://www.cijoint.fr/cjlink.php?file=cj201001/cij0aeLHkA.xls
Avatar
michdenis
Un fichier exemple :

http://www.cijoint.fr/cjlink.php?file=cj201001/cijeq4rYXn.xls



"DAVID" a écrit dans le message de groupe de discussion :
eeorP$
Re à vous 2

Daniel, meme disposition. Cela fonctionne bien avec ton modèle alors je fais
un copier/coller vers mon projet et la rien ne fait, toujours la meme
erreur.

Michdenis, je comprend très bien que ca doit être dur à lire surtout avec le
temps que tu m'accorde ! mais je rame, malheureusement, completement dans
tes explications. J'ai passé l'aprés midi à essayer de relire toutes tes
explications, de faire à la lettre ce que tu me conseil ( idem sur le fil
"Erreur double Clic"). Rien y fait, je désespère à finir mon projet ! mais
bon, j'ai pas l'habitude de laisser tomber et j'aimerais comprendre.
J'attend le déclic qui fait !!!!
A mon avis, tout est dans la façon de charger le listbox. Comme tu m'as
expliqué, il faut faire autrement mais pas moyen de le faire. Allez je vais
replancher sur ce problème

Merci à vous deux
Avatar
Daniel.C
Voila :
http://www.cijoint.fr/cjlink.php?file=cj201001/cijXcqFI5e.xls
C'est le premier classeur, dans lequel j'ai importé l'userform
manquant.
Le plantage était dû au fait que [_filterdatabase] n'était pas sur la
feuille active :
Il fallait mettre :
Set Plage1 = Sheets("HISTOCARBU").[_filterdatabase].Offset(1)
au lieu de :
Set Plage1 = [_filterdatabase].Offset(1)
La différence avec mon classeur tient au fait que le bouton d'affichage
du userform est sur la feuille BD.
Daniel

Désolé

Voici le fichier complet, au moins je suis sûre que tu a tout !!

http://www.cijoint.fr/cjlink.php?file=cj201001/cij0aeLHkA.xls


Avatar
DAVID
Merci c'est super génial de ta part.

Un très bon fichier pour exemple et apprendre que je recommande aux novices
comme moi !!!

Je comprend mieux quand tu disais :

Pour déterminer ta plage nommée , tu utilises ce type de formule
Si tu supprimes la ligne A2, tu obtiens des #Ref et ta formule est foutue
!
=SOMME(DECALER($A$2;;;NBVAL(A:A)-1;NBVAL(1:1)))





En fait, si je comprend, c'est pas très bien de déterminer une plage avec
Insertion/Nom/Définir pour un ListBox

Encore merci
Bonne soirée
Avatar
DAVID
Merci beaucoup Daniel, maintenant je vais essayer d'adapter tout cela.

J'essai de comprendre et de prendre des modèles pour me perfectionner mais
il y a encore du très gros boulot !!!

Bonne soirée
Avatar
michdenis
Le même fichier + quelques légères correction.
http://www.cijoint.fr/cjlink.php?file=cj201001/cijxw6UI3X.xls

| En fait, si je comprend, c'est pas très bien de déterminer
| une plage avec Insertion/Nom/Définir pour un ListBox

Ce n'est pas ce que j'ai dit. Cela dépend de ton application.
Dans certains cas, un listbox peut seulement servir pour
l'affichage... mais si on doit supprimer des données dans
le tableau principale, il faut d'avance penser aux conséquences
que cela peut avoir quant à la manière utilisée pour définir son
Listbox ou combobox ! Il y a plusieurs façons de faire, il s'agit
de sélectionner celle qui convient le mieux à son application.




"DAVID" a écrit dans le message de groupe de discussion :

Merci c'est super génial de ta part.

Un très bon fichier pour exemple et apprendre que je recommande aux novices
comme moi !!!

Je comprend mieux quand tu disais :

Pour déterminer ta plage nommée , tu utilises ce type de formule
Si tu supprimes la ligne A2, tu obtiens des #Ref et ta formule est foutue
!
=SOMME(DECALER($A$2;;;NBVAL(A:A)-1;NBVAL(1:1)))





En fait, si je comprend, c'est pas très bien de déterminer une plage avec
Insertion/Nom/Définir pour un ListBox

Encore merci
Bonne soirée
Avatar
DAVID
Bonjour

Je bloque sur ce code en aplliquand au mieux ton fichier exemple.

Quand je supprime une fiche, cela fonctionne apparemment mais si je supprime
la dernière fiche alors message "impossible de définir la propriété liste
index" à la ligne : Me.LstListeVehicule.ListIndex = X - 1 mais dans la
feuille cela a supprimé la dernière ligne et 2 lignes au dessus
J'ai du mal à comprendre avec les -1, <> -1, +1, etc...

Merci de ton aide
Cordialement


Static X As Long
If Me.LstListeVehicule <> -1 Then
X = Me.LstListeVehicule.ListIndex + 1
Rg(X, 1).Resize(, Rg.Columns.Count).Delete xlUp
X = X - 1
With Sheets("BD")
.Cells(X, 1).Delete
.Cells(X, 2).Delete
.Cells(X, 3).Delete
.Cells(X, 4).Delete
.Cells(X, 5).Delete
.Cells(X, 6).Delete
.Cells(X, 7).Delete
.Cells(X, 8).Delete
.Cells(X, 9).Delete
End With
End If
Charger_ListBox
If X > -1 Then
Me.LstListeVehicule.ListIndex = X - 1
Else
Me.LstListeVehicule.ListIndex = -1
End If
Me.Label2 = X & " sur " & Rg.Rows.Count

UserForm_Initialize
Avatar
michdenis
J'ai supprimé toutes les entrées du listbox à partir
de la dernière vers la première et je n'ai pas
généré ce que tu observes. (je ne dis pas que tout est
parfait, cela se voulait qu'un petit exemple vite fait
illustrant un principe ...

If me.listbox.listindex <> -1 then
ce qui suit s'exécute seulement si un élément du listbox est sélectionné.

La première entrée d'un listbox à comme index 0
La première ligne d'une feuille de calcul est 1

En conséquence, listbox1.Listindex +1 , le +1 c'est pour retrouver
la ligne équivalent dans un objet "Range", Cet objet dans mon
exemple est Rg

quand Listbox.listindex =0 cela signifie que c'est la première ligne
de la plage Rg d'où Rg(1). Si tu utilises une variable, il va falloir
additionner 1 à la propriété Listindex pour retrouver la ligne de
la plage Rg.

Voilà




"DAVID" a écrit dans le message de groupe de discussion :

Bonjour

Je bloque sur ce code en aplliquand au mieux ton fichier exemple.

Quand je supprime une fiche, cela fonctionne apparemment mais si je supprime
la dernière fiche alors message "impossible de définir la propriété liste
index" à la ligne : Me.LstListeVehicule.ListIndex = X - 1 mais dans la
feuille cela a supprimé la dernière ligne et 2 lignes au dessus
J'ai du mal à comprendre avec les -1, <> -1, +1, etc...

Merci de ton aide
Cordialement


Static X As Long
If Me.LstListeVehicule <> -1 Then
X = Me.LstListeVehicule.ListIndex + 1
Rg(X, 1).Resize(, Rg.Columns.Count).Delete xlUp
X = X - 1
With Sheets("BD")
.Cells(X, 1).Delete
.Cells(X, 2).Delete
.Cells(X, 3).Delete
.Cells(X, 4).Delete
.Cells(X, 5).Delete
.Cells(X, 6).Delete
.Cells(X, 7).Delete
.Cells(X, 8).Delete
.Cells(X, 9).Delete
End With
End If
Charger_ListBox
If X > -1 Then
Me.LstListeVehicule.ListIndex = X - 1
Else
Me.LstListeVehicule.ListIndex = -1
End If
Me.Label2 = X & " sur " & Rg.Rows.Count

UserForm_Initialize
Avatar
DAVID
Re

Merci pour les explications.

Je vais essayer de revoir tout la procédure avec F8.

Pour l'instant : Exemple,
Sélection de l'entrée 10
Bouton supprimer
Suppression de l'entrée 10 et 8 !!!

Et si je supprime la première ou dernière entrée, erreur
1 2 3