OVH Cloud OVH Cloud

Comment créer un userform ce tri sélectif?

45 réponses
Avatar
gloub
Bonjour,
Je suis en train de ranger mon grenier et voudrait retrouver mes
affaires plus rapidement que par le passé. J’ai pensé enregistrer tous
mes objets, leur attribuer un numéro et les mettre dans des bas de
rangement numérotés.
Pour l’instant ma base de données fonctionne grâce au filtre automatique
, mais pourriez vous m’aider à l’utiliser de façon plus conviviale ?
Je travaille sur 4 colonnes
A1=ordre d’enregistrement ; B1= Descriptif de mes articles ; C1= n° de
référence ; d1= n° de bac de rangement
J’aimerais bien créer un userform avec un champ dans lequel je taperais
un élément d’une ligne à chercher et un autre champ qui récupérerait
toute les lignes contenant cet élément.

Par exemple pour chercher un tournevis avec le filtre automatique, je
choisis l’option personnalisé et je tape « tour* » et toutes les lignes
contenant l’élément « tour » s’affichent. J’obtiens bien la liste de
tous mes tournevis.

En utilisant l’enregistreur j’ai récupéré la macro suivante qui
correspond à cette recherche
Sub Macro1()
'
Selection.AutoFilter Field:=2, Criteria1:="=tour*", Operator:=xlAnd
End Sub

Comment intégrer cette macro dans un userform et surtout comment faire
fonctionner l’userform de façà à ce que j'ai un champ dans lequel je
tape ma recherche et un aure champ dans lequel s'affichent les toutes
les lignes correspondant à cette recherche?

Merci pour votre aide.

10 réponses

1 2 3 4 5
Avatar
FFO
Rebonjour à toi
Si tu inhibe la ligne que ce passe t'il ????
Tu pourrais peut être demander à une de tes connaissances qui possèdent une
version d'Excel plus récente la possibilité de tester ma proposition pour
constater ou non son bon fonctionnement
Celà permettrait de lever le doute sur la version quant à l'origine du
problème
Il est possible d'obtenir un résultat équivalent sans utiliser les filtres
automatiques qui posent soucis
Je te propose cette option sur cette nouvelle proposition
Fais des essais et dis moi !!!!

http://www.cijoint.fr/cjlink.php?file=cj200812/cijZoRhcX0.xls
Avatar
gloub
Rebonjour,

A l'occasion je testerai un version plus récente d'excel.
Pour ce qui est du fichier cijzorhcx0.xls, il ne réagit pas du tout sous
execel 97.
Sinon, j'ai réussi à faire "fonctionner" le précédent en rajoutant
Cells.Select
avant la ligne
Selection.Autofilter
Il y a encore des petite smodification à apporter, mais l'essentiel y est.
Bon week end à toi


FFO a écrit :
Rebonjour à toi
Si tu inhibe la ligne que ce passe t'il ????
Tu pourrais peut être demander à une de tes connaissances qui possèdent une
version d'Excel plus récente la possibilité de tester ma proposition pour
constater ou non son bon fonctionnement
Celà permettrait de lever le doute sur la version quant à l'origine du
problème
Il est possible d'obtenir un résultat équivalent sans utiliser les filtres
automatiques qui posent soucis
Je te propose cette option sur cette nouvelle proposition
Fais des essais et dis moi !!!!

http://www.cijoint.fr/cjlink.php?file=cj200812/cijZoRhcX0.xls



Avatar
FFO
Rebonjour à toi
Particulièrement content que tu sois enfin arrivé à tirer profit de ma
proposition
Toute la difficulté a résidé sur le fait que nous soyons sur 2 version
d'Excel différentes
Je peux difficilement résoudre des problèmes que tu rencontres avec ta
version si ces manifestations ne se produisent pas chez moi avec ma version
Malgré tout pour les petites améliorations que tu souhaites apporter je suis
à ta disposition pour une aide éventuelle

Fais moi signe !!!!
Avatar
LSteph
Option Explicit

Private Sub ComboBox1_Change()
Dim i As Long, myarray(600, 6), j As Long, x As Long
TextBox1 = ""
ListBox1.Clear
ListBox1.Visible = ComboBox1.ListIndex > -1
x = 0
For i = 2 To [B65536].End(xlUp).Row
If [b:B].Cells(i) = ComboBox1 Then
For j = 0 To 5
myarray(x, j) = Cells(i, j + 1)
Next j
x = x + 1
End If
Next i
ListBox1.List() = myarray
End Sub

Private Sub CommandButton1_Click()
Unload Me
End Sub


Private Sub TextBox1_Change()
Dim i As Long, myarray(600, 6), j As Long, x As Long
ListBox1.Clear
ListBox1.Visible = True
ComboBox1.ListIndex = -1
x = 0
For i = 2 To [c65536].End(xlUp).Row
If [c:c].Cells(i) Like "*" & TextBox1 & "*" Then
For j = 0 To 5
myarray(x, j) = Cells(i, j + 1)
Next j
x = x + 1
End If
Next i
ListBox1.List() = myarray
End Sub


Private Sub UserForm_Initialize()
Dim i As Long, myC As New Collection
Do While myC.Count > 0
myC.Remove 1
Loop
On Error Resume Next
For i = 2 To [B65536].End(xlUp).Row
myC.Add Cells(i, 2), CStr(Cells(i, 2))
Next i
ListBox1.Visible = False
ListBox1.ColumnCount = 6
For i = 0 To myC.Count
ComboBox1.AddItem myC(i)
Next

End Sub


gloub a écrit :
Re,

Ca y est, tout fonctionne. J'ai pu rajouter la cinquième colonne.
Encore un grand merci.
Encore une bonne prise de tête positive sous un casque à pointe bien
astiqué.

Bon week-end



lSteph a écrit :
Bonjour,

Désolé, si, si oui j'ai très bien compris mais je te confirme ma
réponse cela fait uniquement ce que l'on demande et pas autre chose
donc si on veut un clou on a un clou et pas un clou de girofle,
si on demande clou de girofle on a pas les autres clous, il faut juste
savoir ce que l'on veut!

Ce n'est pas un pb excel, le souci se situerait plutôt entre la chaise
et le micro , donc si on raisonne par libellé d'article c'est lui qui
remonte dans la liste. Ce que tu voudrais toi c'est raisonner par
nature d'article,. Dans ce cas en B tu gardes effectivement une nature
et nonpas le nom complet de l'article que tu peux en revanche préciser
en colonne adjacente.
Pour le code qui en découle il te faudra donc adapter l'incrément de
boucle de 0 à 4 de remplissage de myarray puisqu'on aura ainsi 5
éléments et de même avec le reste qui en découle notamment le
columncount appliqué à la liste dans l'initialize à passer de 4 à 5

Ainsi tu aurais par exemple en B clou, clou, clou et en C clou en
fer, clou du spectacle, clou de girofle.

A toi de jouer!

--
lSteph

On 5 déc, 06:23, gloub wrote:
Re,
Ok,
... mais si je rajoute clou de girofle au premier "clou" de ta liste, je
n'obtiens plus la liste complète des autres clous de la liste. C'est là
le hic.

Par contre si les éléments de la liste se limitent à un seul mot, toutes
les lignes s'affichent.

Kapiert?

LSteph a écrit :

.. je viens de tester, si j'ajoute "de girofle" derrière un clou
j'obtiens bien, à la fois clou et clou de girofle dans le premier choix
puis selon celui que je sélectionne j'obtiens convenablement ce qui
correspond et pas l'autre, dans la liste!
gloub a écrit :
Re,
Je viens de faire joujou avec ton code.
Ca marche bien quand la ligne de désignation de l'article ne contient
qu'un mot, mais si par exemple à la place de clou, je mets clou de
girofle, les autres "clou ne s'affichent pas.
En apprenti sorcier, j'ai essayé de rajouté une colonne pour indiquer
la "quantité" d'objets, mais ça ne s'affiche pas.
Faut dire que j'ai seulement mis un 5 à la place du 4 dans ton code,
pour qu'il balaye un peu plus large, mais il ne veut rien chiquer , il
ne veut pas m'afficher un cinquième colonne.
Voilà ce que j'ai fait:
Dans combox1_change:
Dim i As Long, myarray(600, 5), j As Long, x As Long
Dans userform_initialise:
ListBox1.ColumnCount = 5
Bonne soirée à toi
Michel
lSteph a écrit :
Re,
S'il faut un exemple http://cjoint.com/?meqpht5Stv
pour ce qui restera heureusement j'ai mis le code plus haut!
__
lSteph
On 4 déc, 14:10, gloub wrote:
Bonjour,
Je suis en train de ranger mon grenier et voudrait retrouver mes
affaires plus rapidement que par le passé. J’ai pensé enregistrer
tous
mes objets, leur attribuer un numéro et les mettre dans des bas de
rangement numérotés.
Pour l’instant ma base de données fonctionne grâce au filtre
automatique
, mais pourriez vous m’aider à l’utiliser de façon plus conviviale ?
Je travaille sur 4 colonnes
A1=ordre d’enregistrement ; B1= Descriptif de mes articles ; C1=
n° de
référence ; d1= n° de bac de rangement
J’aimerais bien créer un userform avec un champ dans lequel je
taperais
un élément d’une ligne à chercher et un autre champ qui
récupérerait
toute les lignes contenant cet élément.
Par exemple pour chercher un tournevis avec le filtre
automatique, je
choisis l’option personnalisé et je tape « tour* » et toutes les
lignes
contenant l’élément « tour » s’affichent. J’obtiens bien la liste de
tous mes tournevis.
En utilisant l’enregistreur j’ai récupéré la macro suivante qui
correspond à cette recherche
Sub Macro1()
'
Selection.AutoFilter Field:=2, Criteria1:="=tour*",
Operator:=xlAnd
End Sub
Comment intégrer cette macro dans un userform et surtout comment
faire
fonctionner l’userform de façà à ce que j'ai un champ dans lequel je
tape ma recherche et un aure champ dans lequel s'affichent les
toutes
les lignes correspondant à cette recherche?
Merci pour votre aide.















Avatar
gloub
Rebonjour,
Encore merci pour ton aide. Je vais remercier aussi de ce pas "Lesteph",
grand fidèle qui m'a déjà beaucoup aidé par le passé et comprends
maintant mes questions, je l'avoue toujours assez mal formulées.


FFO a écrit :
Rebonjour à toi
Particulièrement content que tu sois enfin arrivé à tirer profit de ma
proposition
Toute la difficulté a résidé sur le fait que nous soyons sur 2 version
d'Excel différentes
Je peux difficilement résoudre des problèmes que tu rencontres avec ta
version si ces manifestations ne se produisent pas chez moi avec ma version
Malgré tout pour les petites améliorations que tu souhaites apporter je suis
à ta disposition pour une aide éventuelle

Fais moi signe !!!!



Avatar
gloub
Re,

T'es génial. Un grand merci.

Le casque à pointe

LSteph a écrit :
Option Explicit

Private Sub ComboBox1_Change()
Dim i As Long, myarray(600, 6), j As Long, x As Long
TextBox1 = ""
ListBox1.Clear
ListBox1.Visible = ComboBox1.ListIndex > -1
x = 0
For i = 2 To [B65536].End(xlUp).Row
If [b:B].Cells(i) = ComboBox1 Then
For j = 0 To 5
myarray(x, j) = Cells(i, j + 1)
Next j
x = x + 1
End If
Next i
ListBox1.List() = myarray
End Sub

Private Sub CommandButton1_Click()
Unload Me
End Sub


Private Sub TextBox1_Change()
Dim i As Long, myarray(600, 6), j As Long, x As Long
ListBox1.Clear
ListBox1.Visible = True
ComboBox1.ListIndex = -1
x = 0
For i = 2 To [c65536].End(xlUp).Row
If [c:c].Cells(i) Like "*" & TextBox1 & "*" Then
For j = 0 To 5
myarray(x, j) = Cells(i, j + 1)
Next j
x = x + 1
End If
Next i
ListBox1.List() = myarray
End Sub


Private Sub UserForm_Initialize()
Dim i As Long, myC As New Collection
Do While myC.Count > 0
myC.Remove 1
Loop
On Error Resume Next
For i = 2 To [B65536].End(xlUp).Row
myC.Add Cells(i, 2), CStr(Cells(i, 2))
Next i
ListBox1.Visible = False
ListBox1.ColumnCount = 6
For i = 0 To myC.Count
ComboBox1.AddItem myC(i)
Next

End Sub


gloub a écrit :
Re,

Ca y est, tout fonctionne. J'ai pu rajouter la cinquième colonne.
Encore un grand merci.
Encore une bonne prise de tête positive sous un casque à pointe bien
astiqué.

Bon week-end



lSteph a écrit :
Bonjour,

Désolé, si, si oui j'ai très bien compris mais je te confirme ma
réponse cela fait uniquement ce que l'on demande et pas autre chose
donc si on veut un clou on a un clou et pas un clou de girofle,
si on demande clou de girofle on a pas les autres clous, il faut juste
savoir ce que l'on veut!

Ce n'est pas un pb excel, le souci se situerait plutôt entre la chaise
et le micro , donc si on raisonne par libellé d'article c'est lui qui
remonte dans la liste. Ce que tu voudrais toi c'est raisonner par
nature d'article,. Dans ce cas en B tu gardes effectivement une nature
et nonpas le nom complet de l'article que tu peux en revanche préciser
en colonne adjacente.
Pour le code qui en découle il te faudra donc adapter l'incrément de
boucle de 0 à 4 de remplissage de myarray puisqu'on aura ainsi 5
éléments et de même avec le reste qui en découle notamment le
columncount appliqué à la liste dans l'initialize à passer de 4 à 5

Ainsi tu aurais par exemple en B clou, clou, clou et en C clou en
fer, clou du spectacle, clou de girofle.

A toi de jouer!

--
lSteph

On 5 déc, 06:23, gloub wrote:
Re,
Ok,
... mais si je rajoute clou de girofle au premier "clou" de ta
liste, je
n'obtiens plus la liste complète des autres clous de la liste. C'est là
le hic.

Par contre si les éléments de la liste se limitent à un seul mot,
toutes
les lignes s'affichent.

Kapiert?

LSteph a écrit :

.. je viens de tester, si j'ajoute "de girofle" derrière un clou
j'obtiens bien, à la fois clou et clou de girofle dans le premier
choix
puis selon celui que je sélectionne j'obtiens convenablement ce qui
correspond et pas l'autre, dans la liste!
gloub a écrit :
Re,
Je viens de faire joujou avec ton code.
Ca marche bien quand la ligne de désignation de l'article ne contient
qu'un mot, mais si par exemple à la place de clou, je mets clou de
girofle, les autres "clou ne s'affichent pas.
En apprenti sorcier, j'ai essayé de rajouté une colonne pour indiquer
la "quantité" d'objets, mais ça ne s'affiche pas.
Faut dire que j'ai seulement mis un 5 à la place du 4 dans ton code,
pour qu'il balaye un peu plus large, mais il ne veut rien chiquer
, il
ne veut pas m'afficher un cinquième colonne.
Voilà ce que j'ai fait:
Dans combox1_change:
Dim i As Long, myarray(600, 5), j As Long, x As Long
Dans userform_initialise:
ListBox1.ColumnCount = 5
Bonne soirée à toi
Michel
lSteph a écrit :
Re,
S'il faut un exemple http://cjoint.com/?meqpht5Stv
pour ce qui restera heureusement j'ai mis le code plus haut!
__
lSteph
On 4 déc, 14:10, gloub wrote:
Bonjour,
Je suis en train de ranger mon grenier et voudrait retrouver mes
affaires plus rapidement que par le passé. J’ai pensé
enregistrer tous
mes objets, leur attribuer un numéro et les mettre dans des bas de
rangement numérotés.
Pour l’instant ma base de données fonctionne grâce au filtre
automatique
, mais pourriez vous m’aider à l’utiliser de façon plus
conviviale ?
Je travaille sur 4 colonnes
A1=ordre d’enregistrement ; B1= Descriptif de mes articles ; C1=
n° de
référence ; d1= n° de bac de rangement
J’aimerais bien créer un userform avec un champ dans lequel je
taperais
un élément d’une ligne à chercher et un autre champ qui
récupérerait
toute les lignes contenant cet élément.
Par exemple pour chercher un tournevis avec le filtre
automatique, je
choisis l’option personnalisé et je tape « tour* » et toutes les
lignes
contenant l’élément « tour » s’affichent. J’obtiens bien la
liste de
tous mes tournevis.
En utilisant l’enregistreur j’ai récupéré la macro suivante qui
correspond à cette recherche
Sub Macro1()
'
Selection.AutoFilter Field:=2, Criteria1:="=tour*",
Operator:=xlAnd
End Sub
Comment intégrer cette macro dans un userform et surtout
comment faire
fonctionner l’userform de façà à ce que j'ai un champ dans
lequel je
tape ma recherche et un aure champ dans lequel s'affichent les
toutes
les lignes correspondant à cette recherche?
Merci pour votre aide.

















Avatar
gloub
Rebonjour,
Comme convenu je reprends contact après avoir essayé ta version
originale e sous excel 2003.
L'affichage s'est bien réalisé sans problème.
Comme tu me proposes de faire évoluer le code pour y apporter une
amélioration supplémentaire, j'aimerais bien obtenir que les résultats
soient affichés sous les en-tête comme ci-dessous pour que celui qui
cherche s'y retrouve d'un seul coup d'oeil.


ordre descriptif référence bac
5 kit1 445 14
6 kit2 446 15
7 kit3 447 16
8 kit4 448 17
9 kit5 449 18
10 kit6 450 19
11 kit7 451 20

D'avance merci!

FFO a écrit :
Rebonjour à toi
Particulièrement content que tu sois enfin arrivé à tirer profit de ma
proposition
Toute la difficulté a résidé sur le fait que nous soyons sur 2 version
d'Excel différentes
Je peux difficilement résoudre des problèmes que tu rencontres avec ta
version si ces manifestations ne se produisent pas chez moi avec ma version
Malgré tout pour les petites améliorations que tu souhaites apporter je suis
à ta disposition pour une aide éventuelle

Fais moi signe !!!!



Avatar
FFO
Rebonjour à toi

Je te propose 2 versions
L'une qui travaille avec les filtres (V2) l'autre avec la recherche (V3)

Fais des essais et dis moi !!!!

V2 :
http://www.cijoint.fr/cjlink.php?file=cj200812/cijcmpUdl3.xls
V3:
http://www.cijoint.fr/cjlink.php?file=cj200812/cijjGOt5h8.xls
Avatar
gloub
FFO a écrit :
Rebonjour à toi

Je te propose 2 versions
L'une qui travaille avec les filtres (V2) l'autre avec la recherche (V3)

Fais des essais et dis moi !!!!

V2 :
http://www.cijoint.fr/cjlink.php?file=cj200812/cijcmpUdl3.xls
V3:
http://www.cijoint.fr/cjlink.php?file=cj200812/cijjGOt5h8.xls



Rebonjour,

Je crois que je suis maudit: Aucune de ces deux versions ne modidient la
version précédente à l'affichage et pourtant j'utilise excel 2003!

Pas grave!
Avatar
Guy72
Bonjour FFO
Moi aussi
--
Cordialement
Guy

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

Rebonjour à toi

Je te propose 2 versions
L'une qui travaille avec les filtres (V2) l'autre avec la recherche (V3)

Fais des essais et dis moi !!!!

V2 :
http://www.cijoint.fr/cjlink.php?file=cj200812/cijcmpUdl3.xls
V3:
http://www.cijoint.fr/cjlink.php?file=cj200812/cijjGOt5h8.xls



1 2 3 4 5