IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Problème sur les critères de filtre avec une variable dans Array [XL-2010]


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Février 2013
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Transports

    Informations forums :
    Inscription : Février 2013
    Messages : 11
    Points : 8
    Points
    8
    Par défaut Problème sur les critères de filtre avec une variable dans Array
    Bonjour,
    Je cherche désespérément à inscrire une variable dans la zone de critère d'un filtre Criteria1:=Array(MaVariable) mais cela ne fonctionne pas.
    En fait, j'ai des codes dans une colonne (un code par ligne). Je regroupe ces codes pour obtenir ma variable dans le même format que l'écriture du critère sans variable.
    Mon filtre fonctionne parfaitement avec les codes inscrit directement mais ne fonctionne pas avec ma variable.
    Voici l'extrait de mon code :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    For Each cel In Range("BA2:BA" & Range("BA65536").End(xlUp).Row)
    If MaPlage = "" Then
    MaPlage = """" & cel.Value & """, "
    Else
    MaPlage = MaPlage & """" & cel.Value & """, "
    End If
    Next cel
    MaPlage = Left(MaPlage, Len(MaPlage) - 3)
    MaPlage = Right(MaPlage, Len(MaPlage) - 1)
        ActiveSheet.Range("$A$32:$AI$703").AutoFilter field:=5, Criteria1:=Array(MaPlage), Operator:=xlFilterValues
    Quelqu'un pourrait-il m'aider ? J'ai longuement cherché sur le net et sur les forums mais je n'ai jamais obtenu de résultats.
    A l'aide, à l'aide

    Merci par avance

    Nadège

  2. #2
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 674
    Points
    18 674
    Par défaut




    Bonjour,

    faire l'opération manuellement en ayant déclenché préalablement le Générateur de macros puis comparer les codes …


  3. #3
    Futur Membre du Club
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Février 2013
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Transports

    Informations forums :
    Inscription : Février 2013
    Messages : 11
    Points : 8
    Points
    8
    Par défaut
    Bonjour,

    J'ai fait ça aussi. J'obtiens la réponse ci-dessous
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ActiveSheet.Range("$A$32:$AI$703").AutoFilter field:=5, Criteria1:=Array("100", "756", "757", "900"), Operator:=xlFilterValues
    ce qui correspond exactement à ma variable.

  4. #4
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Directement

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    Sub MonFiltre()
    Dim LastLig As Long
    Dim Tb
     
    With Worksheets("Feuil1")                        'à adapter (feuille contenant les codes)
        LastLig = .Cells(.Rows.Count, "BA").End(xlUp).Row
        If LastLig >= 2 Then
            Tb = Application.Transpose(.Range("BA2:BA" & LastLig))
     
            With Worksheets("Feuil2")                'à adapter (feuille à filtrer. si elle est identique à la feuille des code, supprimer ce With/End with)
                .Range("E32:E703").AutoFilter Field:=1, Criteria1:=Tb, Operator:=xlFilterValues
            End With
        End If
    End With
    End Sub

  5. #5
    Futur Membre du Club
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Février 2013
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Transports

    Informations forums :
    Inscription : Février 2013
    Messages : 11
    Points : 8
    Points
    8
    Par défaut
    Bonjour Mercatog,
    Je viens de tester et j'obtiens la même chose qu'avec mon code, c'est-à-dire que le filtre ne remonte aucune valeur alors que la colonne en contient.
    Je ne comprends pas pourquoi cela ne fonctionne pas avec une variable.

  6. #6
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Si tes valeurs sont numériques

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    Sub MonFiltre()
    Dim LastLig As Long, i As Long
    Dim Tb
     
    With Worksheets("Feuil1")                        'à adapter (feuille contenant les codes)
        LastLig = .Cells(.Rows.Count, "BA").End(xlUp).Row
        If LastLig > 2 Then
            Tb = Application.Transpose(.Range("BA2:BA" & LastLig))
     
            For i = 1 To LastLig - 1
                Tb(i) = CStr(Tb(i))
            Next i
     
            With Worksheets("Feuil2")                'à adapter (feuille à filtrer. si elle est identique à la feuille des code, supprimer ce With/End with)
                .Range("E32:E703").AutoFilter Field:=1, Criteria1:=Tb, Operator:=xlFilterValues
            End With
        End If
    End With
    End Sub

  7. #7
    Futur Membre du Club
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Février 2013
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Transports

    Informations forums :
    Inscription : Février 2013
    Messages : 11
    Points : 8
    Points
    8
    Par défaut
    Ca marche c'est fabuleux.Un énorme merci Mercatog.
    Mes données sont effectivement numériques, ça fonctionne parfaitement bien.
    Bonne fin de journée et bon week-end

    Nadège

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Filtre avec zone variable dans une macro
    Par encorejeune dans le forum OpenOffice & LibreOffice
    Réponses: 2
    Dernier message: 14/09/2014, 09h46
  2. [XL-2002] Utilisation d'un filtre avec une variable
    Par amerex dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 19/03/2010, 02h35
  3. Réponses: 3
    Dernier message: 10/09/2009, 11h08
  4. Réponses: 1
    Dernier message: 03/08/2007, 10h09
  5. Réponses: 3
    Dernier message: 06/05/2007, 20h11

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo