Excel 2007 - Filtre, macro et inputbox
Résolu
Beeloobop
Messages postés
63
Date d'inscription
Statut
Membre
Dernière intervention
-
Beeloobop Messages postés 63 Date d'inscription Statut Membre Dernière intervention -
Beeloobop Messages postés 63 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
Un petit souci technique me pousse à faire appel à vous après avoir cherché longuement une solution, en vain, sur internet.
J'ai une feuille excel de gestion d'un magasin qui se présente ainsi :
Colonne A Référence du produit (numérique)
Colonne B Désignation du produit
Colonne C Stock
Colonne D Fournisseur
(Ces 4 colonnes seront masquées par la suite... quand tout fonctionnera complètement!)
J'ai créé une macro (non sans mal et non sans aide ^^) qui me permet de faire apparaitre Une boîte de dialogue pour pouvoir entrer une désignation de produit et un chiffre de stock (Ex : tous les stocks de 0 avec une désignation de pelle).
Sub rech_stock_vide()
Dim Designation As String
Designation = InputBox("Saisissez la désignation du produit recherché. " & vbNewLine & vbNewLine & "Mettre le mot recherché entre astériques pour une recherche partielle. " & vbNewLine & "Ex : *Boîte*")
Dim Stock As String
Stock = InputBox("Saisissez la quantité en stock que vous voulez faire apparaître")
Dim Fournisseur As String
Stock = InputBox("Saisissez le fournisseur recherché")
With ActiveSheet
If Not .AutoFilterMode Then .Range("A1").AutoFilter
End With
Selection.AutoFilter Field:=2, Criteria1=Designation, Operator:=xlAnd
Selection.AutoFilter Field:=3, Criteria1:=Stock, Operator:=xlAnd
Selection.AutoFilter Field:=4, Criteria1:=Fournisseur, Operator:=xlAnd
Dim Lg%
Lg = Range("A65536").End(xlUp).Row
Range("a1:d" & Lg).Select
Range("a1:d" & Lg).Copy
Range("f10").Select
ActiveSheet.Paste
ActiveSheet.Range("$A$1:$C$481").AutoFilter Field:=1
ActiveSheet.Range("$A$1:$C$481").AutoFilter Field:=2
ActiveSheet.Range("$A$1:$C$481").AutoFilter Field:=3
ActiveSheet.Range("$A$1:$C$481").AutoFilter Field:=4
End Sub
Ma question :
Quel est le "code" à entrer dans la boîte de dialogue pour obtenir, par exemple, les désignations contenant le mot pelle (en mettant *pelle* ça je sais) quelque soit le stock et le fournisseur (ça je sais pas)? En gros, ne pas filtrer sur le stock et le fournisseur meme s'il me le demande dans la boîte de dialogue.
J'ai testé ** ou "" ou rien ou * *
Mais rien n'y fait je ne trouve pas, je suis obligée de lui donner une valeur pour que la macro fonctionne.
Si vous aviez une idée ça searit vraiment chouette!
Merci à ceux qui prendront le temps de me répondre!
Beeloobop
PS : un nouveau problème s'ajoute à celui-ci, quand je masque les 4 colonnes, la macro m'affiche le résultat de ces colonnes filtrées dans le désordre! Les intitulés de colonne sont dans le bon ordre mais les données en dessous ne correspondent pas! Une idée de la super mauvaise manip que j'ai fait?
Un petit souci technique me pousse à faire appel à vous après avoir cherché longuement une solution, en vain, sur internet.
J'ai une feuille excel de gestion d'un magasin qui se présente ainsi :
Colonne A Référence du produit (numérique)
Colonne B Désignation du produit
Colonne C Stock
Colonne D Fournisseur
(Ces 4 colonnes seront masquées par la suite... quand tout fonctionnera complètement!)
J'ai créé une macro (non sans mal et non sans aide ^^) qui me permet de faire apparaitre Une boîte de dialogue pour pouvoir entrer une désignation de produit et un chiffre de stock (Ex : tous les stocks de 0 avec une désignation de pelle).
Sub rech_stock_vide()
Dim Designation As String
Designation = InputBox("Saisissez la désignation du produit recherché. " & vbNewLine & vbNewLine & "Mettre le mot recherché entre astériques pour une recherche partielle. " & vbNewLine & "Ex : *Boîte*")
Dim Stock As String
Stock = InputBox("Saisissez la quantité en stock que vous voulez faire apparaître")
Dim Fournisseur As String
Stock = InputBox("Saisissez le fournisseur recherché")
With ActiveSheet
If Not .AutoFilterMode Then .Range("A1").AutoFilter
End With
Selection.AutoFilter Field:=2, Criteria1=Designation, Operator:=xlAnd
Selection.AutoFilter Field:=3, Criteria1:=Stock, Operator:=xlAnd
Selection.AutoFilter Field:=4, Criteria1:=Fournisseur, Operator:=xlAnd
Dim Lg%
Lg = Range("A65536").End(xlUp).Row
Range("a1:d" & Lg).Select
Range("a1:d" & Lg).Copy
Range("f10").Select
ActiveSheet.Paste
ActiveSheet.Range("$A$1:$C$481").AutoFilter Field:=1
ActiveSheet.Range("$A$1:$C$481").AutoFilter Field:=2
ActiveSheet.Range("$A$1:$C$481").AutoFilter Field:=3
ActiveSheet.Range("$A$1:$C$481").AutoFilter Field:=4
End Sub
Ma question :
Quel est le "code" à entrer dans la boîte de dialogue pour obtenir, par exemple, les désignations contenant le mot pelle (en mettant *pelle* ça je sais) quelque soit le stock et le fournisseur (ça je sais pas)? En gros, ne pas filtrer sur le stock et le fournisseur meme s'il me le demande dans la boîte de dialogue.
J'ai testé ** ou "" ou rien ou * *
Mais rien n'y fait je ne trouve pas, je suis obligée de lui donner une valeur pour que la macro fonctionne.
Si vous aviez une idée ça searit vraiment chouette!
Merci à ceux qui prendront le temps de me répondre!
Beeloobop
PS : un nouveau problème s'ajoute à celui-ci, quand je masque les 4 colonnes, la macro m'affiche le résultat de ces colonnes filtrées dans le désordre! Les intitulés de colonne sont dans le bon ordre mais les données en dessous ne correspondent pas! Une idée de la super mauvaise manip que j'ai fait?
A voir également:
- Excel 2007 - Filtre, macro et inputbox
- Telecharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Word et excel gratuit - Guide
- Save as pdf office 2007 - Télécharger - Bureautique
- Photo filtre 7 gratuit - Télécharger - Retouche d'image
- Liste déroulante excel - Guide
2 réponses
bonjour
Le plus simple est de changer ainsi ton code :
Ainsi, lorsque tu ne saisis pas de Stock et/ou pas de Fournisseur, ton code fonction selon ton souhait.
Toujours zen
Le plus simple est de changer ainsi ton code :
If Stock <> "" Then Selection.AutoFilter Field:=3, Criteria1:=Stock, Operator:=xlAnd End If If Fournisseur <> "" Then Selection.AutoFilter Field:=4, Criteria1:=Fournisseur, Operator:=xlAnd End If Dim Lg% Lg = Range("A65536").End(xlUp).Row Range("a1:d" & Lg).Copy Destination:=Range("f10")
Ainsi, lorsque tu ne saisis pas de Stock et/ou pas de Fournisseur, ton code fonction selon ton souhait.
Toujours zen
Je vais tester ça tout de suite!
Merci beaucoup!
ça marche nickel pour le stock, mais curieusement ça ne fonctionne pas pour le fournisseur (toutes les lignes ne sont pas encore remplie, ça expliquerait le problème?).
Par exemple si je met Désignation=Pelle et Stock="" et que dans le code j'ai mis les lignes concernant le fournisseur en texte, tout va bien, j'obtiens toutes les pelles quelque soit leur stock.
Mais si je remets les lignes de fournisseur dans le code, et que je mets Fournisseur = "" (avec les mêmes critères que précédement pour les 2 autres filtres) alors il me sort toute la liste du magasin!
C'est à n'y rien comprendre ce shmilblik... Encore une idée de génie?