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 filtre multicritère avec variable / Syntaxe bonne / Fonction bien prise en compte / mais le résultat [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2015
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2015
    Messages : 7
    Par défaut Problème filtre multicritère avec variable / Syntaxe bonne / Fonction bien prise en compte / mais le résultat
    Bonjour à tous,

    Je vous écris car je suis coincé depuis deux heures sur un petit problème où je ne trouve pas de solution. J'espère que l'un de vous pourra m'aider

    Alors, voici le petit bout de programme où je bloque:

    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
    20
    21
    Sub calc_pente()
    Sheets("Mode 8").Activate
        
    Range("A1").Select
        
        x = ActiveSheet.UsedRange.Rows.Count
        Kx = "K" & x
        Ex = "E & x"
        Hx = "H" & x
            
    ActiveSheet.Range("A1", [Kx]).AutoFilter Field:=10, Criteria1:=">=237000", Operator:=xlAnd, Criteria2:="<238000"
        
    XCriterN1 = 6.8
    XCriterN2 = XCriterN1 + 0.2
        
    ActiveSheet.Range("A1", [Kx]).AutoFilter Field:=5, Criteria1:=">=" & XCriterN1, Operator:=xlAnd, Criteria2:="<" & XCriterN2   
    
     'Cette ligne ci-dessus ne fonctionne pas comme je le souhaite. Les deux critères sont bien rentrés. Lorsque je vais voir sous excel, toutes les données sont filtrées (feuille blanche à part la première ligne / ce n'est pas l'effet souhaité), je vais voir dans filtre personnalisé, mes paramètres sont présents. Il faut que par la suite j'appui sur ok et là mes données apparaissent.
     
        X1 = Application.WorksheetFunction.Subtotal(101, Range("E1", [Ex]))
        Y1 = Application.WorksheetFunction.Subtotal(101, Range("H1", [Hx]))
    Avez vous une solution à me proposer svp?

    En vous remerciant!

  2. #2
    Membre Expert
    Femme Profil pro
    Ingénieur
    Inscrit en
    Octobre 2016
    Messages
    1 703
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 30
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2016
    Messages : 1 703
    Par défaut
    Bonjour
    Pas sûre que ça va résoudre le problème, mais essaie déjà de déclarer toutes tes variables
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim XCriterN1 As Double
    'etc ...
    Ensuite, dans Excel, dans Données > Trier et filtrer, il y a un bouton "Réappliquer". Essaie de l'utiliser avec l'enregistreur de macro et voie ce que ça donne. D'ailleurs, as-tu utiliser l'enregistreur de macro pour écrire ton code? Si non, essaie de voir ce qu'il te donne avec les valeurs 6,8 et 7.
    Et pourquoi utilises-tu les variables XCriterN1 et XCriterN2, si tu leur donnes une valeur dans ton sub? Ne peux-tu pas écrire directement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ActiveSheet.Range("A1", [Kx]).AutoFilter Field:=5, Criteria1:=">="6,8", Operator:=xlAnd, Criteria2:="<7"
    , comme tu le fais avec ton filtre precedent?

  3. #3
    Expert éminent
    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
    Par défaut
    Bonjour !

    conformément aux règles du forum ‼


    Sinon désactiver les filtres, activer l'Enregistreur de macro puis opérer manuellement :
    une base de code est livrée sur un plateau !

    _________________________________________________________________________________________________________
    Je suis Paris, Istanbul, Berlin, Nice, Bruxelles, Charlie, …

  4. #4
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2015
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2015
    Messages : 7
    Par défaut
    Bonjour,

    Merci pour vos réponses rapides.

    @riaolle: J'ai déjà utilisé l'enregistreur de macro pour obtenir ces fonctions. Ensuite, j'ai juste rendu variable la plage avec Range("..", []) et criteria1,2 avec la création des variables XCriterN. Dans un sens, cela fonctionne où quand je vais ensuite sur ma fiche excel, dans les paramètres filtres personnalisés, c'est bien inscrit. J'ai juste à appuyer sur ok. J'ai essayé réappliquer cela ne fonctionne pas. XcriterN existe car par la suite je souhaite mettre cette fonction dans une boucle while en l'incrémentant.

    En mode enregistreur de macro, voici le code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Selection.AutoFilter
        ActiveSheet.Range("$A$1:$K$15493").AutoFilter Field:=10, Criteria1:= _
            ">=238000", Operator:=xlAnd, Criteria2:="<239000"
        ActiveSheet.Range("$A$1:$K$15493").AutoFilter Field:=5, Criteria1:=">=8", _
            Operator:=xlAnd, Criteria2:="<8,2"
    @Marc-L: Quelle est cette balise code/code svp? Je m'excuse de l'avoir oublié.

    En vous remerciant,

    Enjou

  5. #5
    Membre Expert
    Femme Profil pro
    Ingénieur
    Inscrit en
    Octobre 2016
    Messages
    1 703
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 30
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2016
    Messages : 1 703
    Par défaut
    Je ne sais pas si ça peut venir de là, mais parfois il y a des problèmes parce que les macros sont en version anglophone et du coup utilisent le "." comme séparateur décimal, alors que "notre" Excel est en français et utilise la ",".
    Du coup, tu peux faire un test en remplaçant 8.2 par 8,2 et 0.2 par 0,2.

    Si c'est fructueux, lorsque tu feras ta boucle et que tu auras des variables, il faudra utiliser la fonction Replace :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    val = Replace(val, ".", ",")
    En ce qui concerne les balises de code : il faut appuyer sur le bouton # lorsque tu écris ton message.

  6. #6
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2015
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2015
    Messages : 7
    Par défaut
    Ca ne marche pas...

  7. #7
    Membre Expert
    Inscrit en
    Octobre 2010
    Messages
    1 401
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 401
    Par défaut
    Citation Envoyé par riaolle Voir le message
    Je ne sais pas si ça peut venir de là, mais parfois il y a des problèmes parce que les macros sont en version anglophone et du coup utilisent le "." comme séparateur décimal, alors que "notre" Excel est en français et utilise la ",".
    Du coup, tu peux faire un test en remplaçant 8.2 par 8,2 et 0.2 par 0,2.

    Si c'est fructueux, lorsque tu feras ta boucle et que tu auras des variables, il faudra utiliser la fonction Replace :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    val = Replace(val, ".", ",")
    C'est le contraire avec Autofilter. Il ne reconnait que le format de nombre americain, c-a-d que le separateur decimal doit etre le point.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    If IsNumeric(what) Then
     
      what = Replace(CDbl(what), ",", ".")
     
     End If
     
    If IsDate(what) Then
     
     what = CDate(what)
     what = Replace(CDbl(what), ",", ".")
     
    End If

  8. #8
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2015
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2015
    Messages : 7
    Par défaut
    Bonsoir à tous,

    Je vous remercie pour votre temps. J'ai bien pris en compte vos remarques.

    Mon problème est que j'essaye de rendre variable les critères des filtres. Avec les critères fixes mon code fonctionne.

    Voici mon code avec la balise :

    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
    Sub calc_pente()
    Sheets("Mode 8").Activate
     
    Range("A1").Select
     
    x = ActiveSheet.UsedRange.Rows.Count
    Kx = "K" & x
    Ex = "E" & x
    Hx = "H" & x
     
    ActiveSheet.Range("A1", [Kx]).AutoFilter Field:=10, Criteria1:=">=237000", Operator:=xlAnd, Criteria2:="<238000"
     
    XCriterN1 = 6.8
    XCriterN2 = XCriterN1 + 0.2
     
    ActiveSheet.Range("A1", [Kx]).AutoFilter Field:=5, Criteria1:=">=" & XCriterN1, Operator:=xlAnd, Criteria2:="<" & XCriterN2
    Je me suis informé de cette syntaxe sur ce forum : Criteria2:="<" & XCriterN2

    XCriterN1 et XCriterN2 ont pour but d'être incrémenté par la suite dans une boucle While. Au premier regard la fonction me filtre toutes les données quand je retourne sur ma page excel. Néanmoins, elle a fonctionné dans le sens où dans les paramètres du filtre personnalisé dans ma page excel, les paramètres sont bien indiqué et je n'ai plus qu'à cliquer sur "OK" et ça fonctionne. Sauf, qu'en temps normal, sans les critères variables, cela fonctionne directement sans appuyer sur OK...

    Avez vous une idée? =)

    Bonne soirée et merci,

    Enjou

  9. #9
    Expert éminent
    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
    Par défaut
    Citation Envoyé par Enjou Voir le message
    En mode enregistreur de macro, voici le code:

    Selection.AutoFilter
    ActiveSheet.Range("$A$1:$K$15493").AutoFilter Field:=10, Criteria1:= _
    ">=238000", Operator:=xlAnd, Criteria2:="<239000"
    ActiveSheet.Range("$A$1:$K$15493").AutoFilter Field:=5, Criteria1:=">=8", _
    Operator:=xlAnd, Criteria2:="<8,2"

    @Marc-L: Quelle est cette balise code/code svp? Je m'excuse de l'avoir oublié.
    C'est soit la balise [Code] telle que pourtant écrite soit via l'icône dédié #
    et il y a même une démonstration dans les règles du forum pour les moins doués ! …

    D'après le post #4 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        With ActiveSheet.UsedRange
            .AutoFilter
            .AutoFilter Field:=10, Criteria1:=">=238000", Operator:=xlAnd, Criteria2:="<239000"
            .AutoFilter Field:=5, Criteria1:=">=8", Operator:=xlAnd, Criteria2:="<8,2"
        End With
    _________________________________________________________________________________________________________

    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion …

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

Discussions similaires

  1. Réponses: 8
    Dernier message: 15/02/2014, 15h10
  2. Problème itération avec variables temporaires en fonction d'une clé
    Par davtypo3 dans le forum Algorithmes et structures de données
    Réponses: 0
    Dernier message: 12/02/2014, 15h42
  3. [MySQL] Problème de syntaxe avec variable utilisée dans fonction PHP et MySQL
    Par redvivi dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 19/03/2008, 21h07
  4. Probléme de recordset avec variable
    Par crovette51101 dans le forum VBA Access
    Réponses: 3
    Dernier message: 11/05/2007, 09h40
  5. problème d'overflow avec variable type double
    Par ben83 dans le forum VB 6 et antérieur
    Réponses: 13
    Dernier message: 15/02/2007, 09h55

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