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 :

Filtrer une colonne de nombres entiers particuliers [XL-2010]


Sujet :

Macros et VBA Excel

  1. #1
    Membre régulier
    Homme Profil pro
    Finance d'entreprise
    Inscrit en
    Juin 2016
    Messages
    174
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Finance d'entreprise
    Secteur : Bâtiment

    Informations forums :
    Inscription : Juin 2016
    Messages : 174
    Points : 84
    Points
    84
    Par défaut Filtrer une colonne de nombres entiers particuliers
    Bonjour,

    Dans une zone filtrée, j'ai une colonne de nombres entiers que je souhaite filtrer selon une liste.

    Problème: ces nombres ne se suivent pas selon une logique particulière, si bien que les critères usuels (>, <, etc.) ne sont d'aucune utilité.

    J'ai pensé convertir ces nombres en texte pour pouvoir utiliser un filtre textuel:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MonRange.AutoFilter 1, Str, xlFilterValues
    avec Str = "435, 467, 535, 768, etc." par exemple.

    Mais même formatée en texte, la colonne n'accepte qu'un filtre numérique... sans doute parce que la colonne ne contient que des nombres...

    Est-ce qu'il y a une solution?

    Merci d'avance

  2. #2
    Expert éminent sénior

    Profil pro
    Conseil, Formation, Développement - Indépendant
    Inscrit en
    Février 2010
    Messages
    8 405
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Conseil, Formation, Développement - Indépendant

    Informations forums :
    Inscription : Février 2010
    Messages : 8 405
    Points : 16 245
    Points
    16 245
    Par défaut
    Bonjour

    C'est un peu flou mais a priori cela relève du filtre avancé et non du filtre auto

    https://philippetulliez.developpez.c...dvancedfilter/
    Chris
    PowerQuery existe depuis plus de 13 ans, est totalement intégré à Excel 2016 &+. Utilisez-le !

    Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson.
    Confucius

    ----------------------------------------------------------------------------------------------
    En cas de résolution, n'hésitez pas cliquer sur c'est toujours apprécié...

  3. #3
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 955
    Points
    55 955
    Billets dans le blog
    131
    Par défaut
    Salut.

    Peut-être ajouter une colonne supplémentaire formulée. Avec les nombres particuliers dans une table annexe, un simple NB.SI.ENS(...)=1 renverrait VRAI pour les nombres choisis et tu pourrais filtrer sur cette colonne.

    C'est une solution Excel, mais exploitable en VBA si besoin.
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  4. #4
    Membre régulier
    Homme Profil pro
    Finance d'entreprise
    Inscrit en
    Juin 2016
    Messages
    174
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Finance d'entreprise
    Secteur : Bâtiment

    Informations forums :
    Inscription : Juin 2016
    Messages : 174
    Points : 84
    Points
    84
    Par défaut
    Citation Envoyé par 78chris Voir le message
    Bonjour

    C'est un peu flou mais a priori cela relève du filtre avancé et non du filtre auto

    https://philippetulliez.developpez.c...dvancedfilter/
    Merci. J'avais exploré les filtres avancés, mais n'y avais pas trouvé de réponse.

    Citation Envoyé par Pierre Fauconnier Voir le message
    Salut.

    Peut-être ajouter une colonne supplémentaire formulée. Avec les nombres particuliers dans une table annexe, un simple NB.SI.ENS(...)=1 renverrait VRAI pour les nombres choisis et tu pourrais filtrer sur cette colonne.

    C'est une solution Excel, mais exploitable en VBA si besoin.
    Hello,

    C'est bon ça !

    Entre temps, j'ai trouvé une solution en testant chaque cellule de la colonne avec Like, puis en cachant la ligne si le nombre n'y est pas.
    C'est très assez lent, même avec Application.ScreenUpdating = False.

    Je vais explorer ta solution, qui a le mérite d'être rapide, quitte à supprimer la colonne quand je n'en ai plus besoin.

    Merci et bonne soirée

  5. #5
    Expert éminent sénior

    Profil pro
    Conseil, Formation, Développement - Indépendant
    Inscrit en
    Février 2010
    Messages
    8 405
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Conseil, Formation, Développement - Indépendant

    Informations forums :
    Inscription : Février 2010
    Messages : 8 405
    Points : 16 245
    Points
    16 245
    Par défaut
    Re

    Si le filtre avancé marcherait et serait très rapide surtout par rapport à une boucle de masquage ou même une colonne de NB.SI surtout si le nombre de ligne est important.

    la liste de critères peut être créée en début de macro et effacée à la fin...
    Chris
    PowerQuery existe depuis plus de 13 ans, est totalement intégré à Excel 2016 &+. Utilisez-le !

    Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson.
    Confucius

    ----------------------------------------------------------------------------------------------
    En cas de résolution, n'hésitez pas cliquer sur c'est toujours apprécié...

  6. #6
    Membre expérimenté Avatar de Transitoire
    Homme Profil pro
    Auditeur informatique
    Inscrit en
    Décembre 2017
    Messages
    724
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Auditeur informatique

    Informations forums :
    Inscription : Décembre 2017
    Messages : 724
    Points : 1 454
    Points
    1 454
    Par défaut
    Bonjour, c'est pas clair pour moi. Voyons donc si j'ai tout bien compris?
    Vous voudriez filtrer dans une liste une série de nombre entier sans aucune logique de filtrage autre que des chiffres entrés d'une manière ou d'une autre.
    En ce qui me concerne, je pencherais pour une extraction de données d'après un filtre élaboré suivant la série de critères que vous avez déterminé avec une fonction OU
    Voir document ci-joint extrait du tutorom de Philippe Tulliez
    Nom : Capture d’écran 2019-08-31 à 08.57.03.png
Affichages : 980
Taille : 108,7 Ko

    Le principe consistant pour une fonction OU a mettre les chiffres l'un au dessous de l'autre dans la colonne du critère considéré. dans l'exemple colonne G. attention, dans l'exemple ayant aussi un critère Et la colonne B etC n'ont pas de raisons d'être dans votre cas. A moins que vous ne nous ayez pas tout raconté?

    Cordialement
    On a deux vies, la deuxième commence quand on se rend compte qu'on n'en a qu'une.
    Confucius

  7. #7
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 073
    Points
    12 073
    Billets dans le blog
    8
    Par défaut re
    bonjour
    l'autofilter accepte les array avec item en string (guillemets)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Sub test()
        Dim arr
        arr = Array("435", "467", "535", "768")
    ActiveSheet.Range("B3:B20").AutoFilter Field:=1, Criteria1:=arr2, Operator:=xlFilterValues
    end sub
    un seul petit problème les items sont en string (guillemet!!!!)
    second problème l'array est hardcodé

    j'ai donc tenté de mettre cet array dans une colonne en E3:E6 et de le convertir mais rien y fait
    ca ne fonctionne pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sub test()
          Dim arr2, stringarray$
        arr2 = Application.Transpose([E3:E6])
        stringarray = """""" & Join(arr2, """""" & "," & """""") & Chr(34) & Chr(34)
        arr2 = Split(stringarray, ",")
        Debug.Print stringarray
        ActiveSheet.Range("B3:B20").AutoFilter Field:=1, Criteria1:=arr2, Operator:=xlFilterValues
    End Sub
    peut etre que quelqu'un sait convertir les item pour qu'il soient pris en string
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  8. #8
    Membre expérimenté Avatar de Transitoire
    Homme Profil pro
    Auditeur informatique
    Inscrit en
    Décembre 2017
    Messages
    724
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Auditeur informatique

    Informations forums :
    Inscription : Décembre 2017
    Messages : 724
    Points : 1 454
    Points
    1 454
    Par défaut
    Bonjour, voila ci-dessous une possibilité démontrée sous réserve de bonne compréhension de ma part
    Nom : Capture d’écran 2019-08-31 à 15.51.42.png
Affichages : 964
Taille : 49,3 Ko
    Si j'entre en colonne F des valeurs correspondantes à certaines de la colonne A, je lance une extraction par filtre élaborés sur la base ("A1:B13") avec en zone de critéres ("F1:F6") et zone d'extraction ("I1:J1")
    et voila l'extraction.
    Si ça vous convient, vous n'avez plus qu'a l'adapter à votre problème

    Cordialement
    On a deux vies, la deuxième commence quand on se rend compte qu'on n'en a qu'une.
    Confucius

  9. #9
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 955
    Points
    55 955
    Billets dans le blog
    131
    Par défaut
    Citation Envoyé par patricktoulon Voir le message
    [...]
    peut etre que quelqu'un sait convertir les item pour qu'il soient pris en string
    La solution fonctionne avec un array, mais il faut qu'Excel considère les valeurs à trier comme étant des valeurs textuelles. Dans ce cas, il affichera les filtres textuels au lieu des filtres numériques...

    Nom : 2019-09-01_091418.png
Affichages : 935
Taille : 19,8 Ko

    Nom : 2019-09-01_091320.png
Affichages : 994
Taille : 19,1 Ko

    Nom : 2019-09-01_091429.png
Affichages : 923
Taille : 6,8 Ko


    Code vba : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Sub test()
      Dim t
      t = Application.Transpose(Range("tableau2").Value)
      Range("tableau4").AutoFilter field:=1, Criteria1:=t, Operator:=xlFilterValues
    End Sub


    Pour que cela fonctionne, il faut:
    • soit que les valeurs aient été saisies dans des cellules formatées Texte (modifier le format des cellules a posteriori ne modifie pas le filtre de numérique à textuel);
    • soit que les valeurs aient été converties en valeurs textuelles (en Excel ou en VBA);
    • soit saisies préfixées de '.
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  10. #10
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 073
    Points
    12 073
    Billets dans le blog
    8
    Par défaut re
    bonjour Pierre
    j'étais occupé hier pour revenir mais j'avais trouvé c'est un autre problème en vba que je travaillais hier qui m'a mi la puce a l'oreille

    si tu me permet je te propose de laisser les choses telles qu'elle sont a savoir la colonnes a filtrer en numérique

    mais de transformer la variable plage de référence en array

    teste ceci avec des valeurs numérique sans formater en texte tes cellules laisse les en standard ou numérique
    c'est tout bête
    alors je sais pas si c'est orthodoxe mais ca match
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sub test()
        Dim arr2, stringarray$
        arr2 = Application.Transpose([E1:E4])'numero a garder 
        arraystring = "=" & Replace(Join(arr2, ","), ",", ",=")
        Debug.Print arraystring
        arr2 = Split(arraystring, ",")
        ActiveSheet.Range("B1:B100").AutoFilter Field:=1, Criteria1:=arr2, Operator:=xlFilterValues
    End Sub
    Nom : demo3.gif
Affichages : 985
Taille : 376,5 Ko
    on pourrait des l'ors se faire une petite fonction dans le xlb ou xla ou classeur concerné
    et voila
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Option Explicit
    Sub testX()
        Dim arr2
        arr2 = Application.Transpose([E1:E4].Value)
        arr2 = ValideNumericArrayForFilter(arr2)
        ActiveSheet.Range("B1:B100").AutoFilter Field:=1, Criteria1:=arr2, Operator:=xlFilterValues
    End Sub
    '
    Function ValideNumericArrayForFilter(arr)
     Dim stringarray$
     arraystring = "=" & Replace(Join(arr, ","), ",", ",=")
     ValideNumericArrayForFilter = Split(arraystring, ",")
    End Function
    les items sont considérés par vba comme du string puisque c'est le résultat du split(join....)

    je precise
    que les choses soient claires le symbole "=" n'est pas obligatoire je le met pour l'aide a la compréhension
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  11. #11
    Membre régulier
    Homme Profil pro
    Finance d'entreprise
    Inscrit en
    Juin 2016
    Messages
    174
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Finance d'entreprise
    Secteur : Bâtiment

    Informations forums :
    Inscription : Juin 2016
    Messages : 174
    Points : 84
    Points
    84
    Par défaut
    Citation Envoyé par Transitoire Voir le message
    En ce qui me concerne, je pencherais pour une extraction de données d'après un filtre élaboré suivant la série de critères que vous avez déterminé avec une fonction OU
    Comme indiqué dans ma question, la liste de nombres ne suit aucune logique, à part qu'ils sont dans un ordre croissant, donc pas de critère applicable...
    (à part = à chacun d'eux, peut-être...)

    Citation Envoyé par 78chris Voir le message
    la liste de critères peut être créée en début de macro et effacée à la fin...
    Pas sûr de comprendre l'idée que tu avais en tête.

    Citation Envoyé par Pierre Fauconnier Voir le message
    Pour que cela fonctionne, il faut:
    • soit que les valeurs aient été saisies dans des cellules formatées Texte (modifier le format des cellules a posteriori ne modifie pas le filtre de numérique à textuel);
    • soit que les valeurs aient été converties en valeurs textuelles (en Excel ou en VBA);
    • soit saisies préfixées de '.
    Je n'ai pas essayé, mais merci.

    Citation Envoyé par patricktoulon Voir le message
    bonjour Pierre
    j'étais occupé hier pour revenir mais j'avais trouvé c'est un autre problème en vba que je travaillais hier qui m'a mi la puce a l'oreille

    si tu me permet je te propose de laisser les choses telles qu'elle sont a savoir la colonnes a filtrer en numérique

    mais de transformer la variable plage de référence en array
    Magnigique!!!
    (lapsus involontaire laissé: contraction entre "Magnifique" et "Magique")

    Ça fonctionne très bien. C'est l'équivalent d'une sélection manuelle de chacun des nombres.

    En effet, le signe "=" n'est pas nécessaire.

    Un grand merci !!!

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

Discussions similaires

  1. Filtrer une colonne à partir d'une cellule
    Par D-D-Du-06 dans le forum Excel
    Réponses: 7
    Dernier message: 21/04/2016, 12h26
  2. Réponses: 1
    Dernier message: 22/10/2008, 19h08
  3. trier et filtrer une colonne d'un sur VBA-EXCEL
    Par la_rebelle dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 11/06/2008, 16h50
  4. Somme d'une colonne (avec nombre de rangée variable)
    Par Berny77 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 14/05/2008, 00h30
  5. Réponses: 2
    Dernier message: 27/05/2007, 23h23

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