begin process at 2013 05 23 15:10:00
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Visual Basic 6

 > 

Langages dérivés

 > 

VBA

 > 

[Déplace]VBA EXCEL : macro pour filtrer avec plusieurs choix:


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

[Déplace]VBA EXCEL : macro pour filtrer avec plusieurs choix:

jeudi 16 août 2012 à 11:33:48 | [Déplace]VBA EXCEL : macro pour filtrer avec plusieurs choix:

guiguigui69008

Bonjour, et j'espère que je ne me suis pas trompé de section pour mon post:

Voila mon problème :

je suis débutant en programmation, et je créé des macro a partir de long fichiers excel, afin de créer des documents de synthèse exploitable par mes collègues.

Explication:

J'ai une liste de pièces dans mon stock, chaque pièce a une référence.
dans cette liste, je souhaite extraire une liste de certaine pièce seulement. Ces pièces sont définit.
Mes colonnes sont triées.
Mon objectif est donc de créer un formulaire, ou je coche les pièces dont je veux voir apparaitre la synthèse des stock. jusque la, pas de problème.

ma méthode était la suivante : a chaque nom de pièce dans le formulaire correspond plusieurs variable auquel j'ai attribué mes références de pièces.
Donc selon le nombre de case que je coche, je veux filtré mon tableau pour ne voir apparaitre que les pièce qui m'intéresse ( je coche la case, qui active des variable, ces variables sont des numéro qui correspondent a mes référence de pièce, ensuite je filtre avec ces références dans ma colonne référence)
J'ai trouvé la méthode "Array" quand j'ai enregistrer une macro et que j'ai fait cocher mes cases dans le menu de tri mais quand je le fais a la souris, il affiche tous les choix, et quand je le fait par la macro avec les variable, il ne me fait pas la même chose ( au mieux, il les fait défiler et s'effacer après...
J'ai un petit doute aussi sur le fait de mettre les variable a 0 quand je ne coche pas la case...

4jours que je suis la dessus, et je commence a devenir fou.

Merci d'avance pour votre aide.

Voila mon bout de code de ma checkbox, je voulais poser le fichier, mais je n'ai pas trouvé comment insérer une pièce joint...

Code Visual Basic :
Option Explicit
Public a1 As Integer
Public a2 As Integer
Public b1 As Integer
Public b2 As Integer
Public b3 As Integer
Public c1 As Integer
Public c2 As Integer
Public d1 As Integer
Public d2 As Integer
Public d3 As Integer
Public e1 As Integer
Public e2 As Integer

Private Sub CheckBox1_Click()
    If CheckBox1.Value = True Then
        a1 = 22
        a2 = 47
    Else
        a1 = 0
        a2 = 0
    End If
                   
End Sub

Private Sub CheckBox2_Click()
    If CheckBox2.Value = True Then
        b1 = 143
        b2 = 163
        b3 = 301
    Else
        b1 = 0
        b2 = 0
        b3 = 0
    End If
End Sub

Private Sub CheckBox3_Click()
    If CheckBox3.Value = True Then
        c1 = 401
        c2 = 402
    Else
        c1 = 0
        c2 = 0
    End If
End Sub

Private Sub CheckBox4_Click()
    If CheckBox4.Value = True Then
        d1 = 407
        d2 = 426
        d3 = 462
    Else
        d1 = 0
        d2 = 0
        d3 = 0
    End If
End Sub

Private Sub CheckBox5_Click()
    If CheckBox5.Value = True Then
        e1 = 223
        e2 = 314
    Else
        e1 = 0
        e2 = 0
    End If
End Sub

Sub CommandButtonok_Click()

    'affichage des pîèces souhaité
        ActiveSheet.Range("$A$5:$P$1043").AutoFilter Field:=1, Criteria1:=Array(a1, a2, b1, b2, b3, c1, c2, d1, d2, d3, e1, e2)
        
    Unload UserForm1
    
End Sub

jeudi 16 août 2012 à 22:26:56 | Re : [Déplace]VBA EXCEL : macro pour filtrer avec plusieurs choix:

jack

Administrateur CodeS-SourceS
Réponse acceptée !
Salut Guillaume

Très abstrait, tout ça et parfois incompréhensible, faute de phrase trop longue ou de manque de ponctuation :

J'ai trouvé la méthode "Array" quand j'ai enregistrer une macro et que j'ai fait cocher mes cases dans le menu de tri"
Tu veux dire dans le menu qui se déroule lorsque tu cliques sur le triangle placé à droite du nom de la colonne et qui te propose "(Sélectionner tout)" ou les cases à cocher de chaque item ?
On va supposer que c'est bien ça (Excel 2007 et supérieur)

mais quand je le fais a la souris, il affiche tous les choix
Euh, à la souris ... comment les as-tu cochées avant ?
au canif ?
Parles-tu encore de ce même menu de sélection dont je viens de parler ?

et quand je le fait par la macro avec les variable, il ne me fait pas la même chose ..."
Que valent tes variables au moment de l'exécution de la ligne du filtre ? Ont-elles les valeurs correctes ?
Où as-tu trouvé cette syntaxe
Criteria1:=Array(a1, ...
Es-tu sûr qu'elle soit légale ?
Dans l'aide il est bien dit que :
- les critères doivent être des chaîne de caractères, précédés par un symbole de comparaison.
- chaque critère doit être séparé du suivant par une contrainte définissant le type de filtre (Ou, Et, 10 premiers ...)

Je ne vois pas tout ça dans ta syntaxe, d'où l'interrogation sur la véracité de cette syntaxe à base de Array

(3'30 plus tard)
Par curiosité, j'ai tapé cette chaine dans Bing :
Criteria1:=Array
et je suis tombé sur plusieurs blogs où la syntaxe est clairement différente.
Celle-ci devrait fonctionner :
# Les critères doivent en effet être des textes précédés du comparateur. Il te faut donc corriger ta syntaxe.
- Au lieu d'utiliser des variables numériques Integer, il faut déclarer ces variables "As String".
- Au lieu de rentrer, par exemple,
b1 = 143
il faut utiliser la bonne syntaxe :
b1 = "=143"

# Il te manque l'opérateur de comparaison en dernier paramètre :
..., e1, e2), Operator:=xlFilterValues

Un peu de curiosité t'aurait épargné 4 jours de besogne ...
Par contre, passe un peu plus de temps à te relire et à te mettre dans la peau de qqun qui ne connait rien à ton problème.
Fais de courtes phrases,
passe à la ligne,
utilise les artifices d'apparence (gras, italique, couleur, taille ...)
utilise la ponctuation - elle a son importance,
enlève les mots superflus qui encombrent,
optionnellement, corrige les fautes.
Et surtout, relis toi, 2 fois; ça prend 1 minute.
Si toi tu as du mal à te relire, à te comprendre, nul doute que les autres aussi.

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés
Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
jeudi 16 août 2012 à 22:31:22 | Re : [Déplace]VBA EXCEL : macro pour filtrer avec plusieurs choix:

jack

Administrateur CodeS-SourceS
Réponse acceptée !
PS : Je viens de faire l'essai et la syntaxe de type chaine peut se passer du signe =
Tu peux mettre tes chiffres seuls, mais dans une variable chaine, sinon Array ne fonctionnera pas.
vendredi 17 août 2012 à 09:40:30 | Re : [Déplace]VBA EXCEL : macro pour filtrer avec plusieurs choix:

guiguigui69008

Merci, je vais essayer tout de suite,

Encore désolé pour les phrases incompréhensibles, j'ai pas encore l'habitude de poster des messages sur des forums comme celui-ci, d'habitude, je tape mon problème sur google et je me contente de trouver les réponses sur les forums quand les gens ont eu presque le même soucis que moi!!

(Pour la curiosité, c'est pas faute d'avoir essayer, j'ai tout essayé comme recherche sur Google, mais c'est vrai que "Array", ça me serait jamais venu à l'esprit!)

On m'a aussi donné une autre méthode, J'essaye tout ça, et je reviens pour vous donner ma solution finale, et clôturer la discussion!!!

Merci!
vendredi 17 août 2012 à 10:38:36 | Re : [Déplace]VBA EXCEL : macro pour filtrer avec plusieurs choix:

guiguigui69008

Donc! encore merci a toi Jack.
Pour résoudre mon problème, j'ai donc écouter les conseils de jack :

-Déclarer mes variables en chaines de caractères.
-Mis des guillemets quand j'attribue une valeur à mes variables
-Ajouter un opérateur xlFilterValues à la fin de ma méthode "Array"

Je vous met le code pour ceux que ça pourrait intéresser:

Code Visual Basic :
Option Explicit
Public a1 As String
Public a2 As String
Public b1 As String
Public b2 As String
Public c1 As String
Public c2 As String
Public c3 As String
Public c4 As String
Public d1 As String
Public d2 As String
Public e1 As String
Public e2 As String
Public f1 As String
Public f2 As String
Public f3 As String
Public g1 As String
Public g2 As String
Public h1 As String
Public i1 As String
Public i2 As String
Public i3 As String
Public i4 As String
Public j1 As String
Public j2 As String
Public j3 As String

Sub CheckBoxbielle_Click()

        
        If CheckBoxbielle.Value = True Then
            f1 = "4495"
            f2 = "2370"
            f3 = "4781"
        Else
            f1 = 0
            f2 = 0
            f3 = 0
        End If
End Sub

Sub CheckBoxcremcde_Click()

        
        If CheckBoxcremcde.Value = True Then
            g1 = "5001"
            g2 = "3158"
        Else
            g1 = 0
            g2 = 0
        End If
End Sub

Sub CheckBoxcremcomb_Click()

        If CheckBoxcremcomb.Value = True Then
            a1 = "3067"
            a2 = "4558"
        Else
            a1 = 0
            a2 = 0
        End If
    
End Sub

Sub CheckBoxpistcde_Click()

    
        If CheckBoxpistcde.Value = True Then
            h1 = "4521"
        Else
            h1 = 0
        End If
End Sub

Sub CheckBoxpistcomb_Click()
        
        If CheckBoxpistcomb.Value = True Then
            b1 = "5289"
            b2 = "4514"
        Else
            b1 = 0
            b2 = 0
        End If

End Sub

Sub CheckBoxplatine_Click()
        
        If CheckBoxplatine.Value = True Then
            c1 = "2333"
            c2 = "5082"
            c3 = "1253"
            c4 = "4961"
        Else
            c1 = 0
            c2 = 0
            c3 = 0
            c4 = 0
        End If
End Sub

Sub CheckBoxrotule_Click()

        If CheckBoxrotule.Value = True Then
            j1 = "1122"
            j2 = "4698"
            j3 = "4813"
        Else
            j1 = 0
            j2 = 0
            j3 = 0
        End If
            
End Sub

Sub CheckBoxroue_Click()
        
        If CheckBoxroue.Value = True Then
            e1 = "4565"
            e2 = "4586"
        Else
            e1 = 0
            e2 = 0
        End If
End Sub

Sub CheckBoxrouleau_Click()
    
        If CheckBoxrouleau.Value = True Then
            d1 = "4970"
            d2 = "2231"
        Else
            d1 = 0
            d2 = 0
        End If
End Sub



Sub CheckBoxvp_Click()

        
        If CheckBoxvp.Value = True Then
            i1 = "323013"
            i2 = "323019"
            i3 = "320004"
            i4 = "323017"
        Else
            i1 = 0
            i2 = 0
            i3 = 0
            i4 = 0
        End If
End Sub

Sub CommandButtonok_Click()

    'affichage des pîèces souhaité
        ActiveSheet.Range("$A$5:$P$1043").AutoFilter Field:=1, Criteria1:=Array(a1, a2, b1, b2, c1, c2, c3, c4, d1, d2, _
        e1, e2, f1, f2, f3, g1, g2, h1, i1, i2, i3, i4, j1, j2, j3), Operator:=xlFilterValues
        
        
  
    Unload UserForm2
    
    Range("D5").Select
    ActiveWorkbook.Worksheets("synthese des stocks").AutoFilter.Sort.SortFields. _
        Clear
    ActiveWorkbook.Worksheets("synthese des stocks").AutoFilter.Sort.SortFields. _
        Add Key:=Range("D5:D1043"), SortOn:=xlSortOnValues, Order:=xlAscending, _
        DataOption:=xlSortNormal
    With ActiveWorkbook.Worksheets("synthese des stocks").AutoFilter.Sort
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
    

End Sub



Merci encore de l'aide!
vendredi 17 août 2012 à 10:46:20 | Re : [Déplace]VBA EXCEL : macro pour filtrer avec plusieurs choix:

jack

Administrateur CodeS-SourceS
Même les 0 devraient être des chaines "0".
Essaye de ne mettre qu'une chaine vide "" à la place. Si cela fonctionne, tu peux supprimer tous les Else
vendredi 17 août 2012 à 10:48:57 | Re : [Déplace]VBA EXCEL : macro pour filtrer avec plusieurs choix:

jack

Administrateur CodeS-SourceS
PS : Attention aux noms des variables.
E1 ou E2 pourraient être interprétés comme des exposants de 10 dans la notation de chiffres. Ce qui donnerait des erreurs pas toujours faciles à comprendre.
vendredi 17 août 2012 à 10:51:45 | Re : [Déplace]VBA EXCEL : macro pour filtrer avec plusieurs choix:

guiguigui69008

Exact, ça marche!


Cette discussion est classée dans : pièce, public, end, integer, if


Répondre à ce message

Sujets en rapport avec ce message

Problème de boucle dans un module Sub_main() [ par elpingouin ] Bonjour à tous !c'est la première fois que je poste ici et je remercie tous les organisateurs de ce site bien bien utile .. Figurez vous que je me sui Collision [ par tinux ] Bonjour, j'ai deux billes dans deux rectangles    '***************** LE PACMAN ****************'    Public PacMan_X As Integer' variable public [ par damdam2801 ] Bonjour a tous voilà j' ai parcourus le forum, les tutos et le site de long en marge et en travers sans réussir a résoudre mon problème...je voudrais problème de procédure vb.net [ par DarGuA ] humm bon voialà ,j'ai une premiere procédure qui effectue un certain traitement et qui après un certain résultat une seconde procédure doit effectuer Explication de code Crypt [ par nounuo74 ] je vous demande de m'aider sur le code suivant avec un Explication aisse *************************************le code*** Option Explicit Private Cons [VB2008] Afficher ce que j'écoute dans MSN [ par Vince300 ] Bonjour Voilà, j'essaye de faire afficher "Ce que j'écoute" dans msn messenger (juste en dessous du message perso). J'utilise ce code : [code=vb] Imp Récupérer la taille d'un Merge sous Excell VBA ? [ par cobra2008 ] Bonjour, pour une application j'ai besoin de savoir si certaine cellules sont mergées en ligne et de savoir la taille du merge. J'ai réussi à savoi différents forms [ par kobeymane ] bonjour, dans mon programme j'ai créé différents radiobuttons. l'état de ces radiobuttons je l'ai caractérisé par une variable booléene (1 s'il est co Comment faire une fenêtre Aero sans bugs [ par LycanOSX ] Bonjour tout le monde, J'ai fait une fenêtre avec le style Aero grace à un code trouve sur internet, mais le rendu est immonde, les textes sont transp


Nos sponsors


Sondage...

CalendriCode

Mai 2013
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 4,914 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales