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 :

Filtre sur nombres avec VBA [XL-2019]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2023
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2023
    Messages : 4
    Par défaut Filtre sur nombres avec VBA
    Bonjour cher forum,

    Dans ma quête d'automatisation des tâches aliénantes de mon travail je me suis mis aux macros VBA pour gagner du temps. Etant un débutant, j'apprends sur le tas et je compléxifie petit à petit mes macros.

    Dans l'une de mes macros j'essaie de filtrer une colonne de nombres (une grosse centaine de nombres au total) de sorte que seulement les nombres commençant par un 6 soient visibles.
    J'ai tenté un code comme ça :

    Sub FiltrerColonnes()
    With Feuil1
    .AutoFilterMode = False
    .Range("A1").AutoFilter Field:=1, Criteria1:="6*", Operator:=xlAnd
    End With
    End Sub

    Or lorsque j'éxecute cette macro le résultat dans la feuille excel est surprenant puisque toutes les cellules de la colonne filtrée sont cachées (il y a pourtant des nombres commençant par un 6 dans cette colonne, j'en suis certain).

    Je me suis posé la question du format mais tous mes tests de transformation de format n'ont pas abouti. Pour ne rien arranger, les nombres de la colonne comportent un nombre de chiffre aléatoire si bien que je ne peux pas m'en sortir en créant des bornes.

    Je dois rater quelque chose de vraiment basique mais je n'ai rien trouvé sur le net. Une âme charitable peut-elle m'aider ? Merci d'avance au membre qui saura me sortir de cette impasse.

  2. #2
    Membre Expert
    Inscrit en
    Décembre 2002
    Messages
    993
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 993
    Par défaut
    Salut,
    Pourquoi ne pas créer un tableau structuré et ensuite choisir comme filtre numérique "6*" et ta colonne n'affichera que les nombres commençant par 6 ?
    Quelques clics de souris et pas besoin du moindre code.

  3. #3
    Expert confirmé Avatar de BENNASR
    Homme Profil pro
    Responsable comptable & financier
    Inscrit en
    Décembre 2013
    Messages
    2 974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Responsable comptable & financier
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2013
    Messages : 2 974
    Par défaut
    Bonjour
    le plus simple et pour détecter l'erreur de démarrer l'enregistreur automatique du macro et faire l'opération manuellement, arrête l'enregistreur et tu aura ton code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     Range("A1").Select
        Selection.AutoFilter
        ActiveSheet.Range("$A$1:$A$6").AutoFilter Field:=1, Criteria1:="=6*", _
            Operator:=xlAnd
    donc ton erreur vient de ne pas préciser la plage à filtrer
    ActiveSheet.Range("$A$1:$A$100") au lieu de .Range("A1").AutoFilter

  4. #4
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2023
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2023
    Messages : 4
    Par défaut
    Citation Envoyé par BENNASR Voir le message
    Bonjour
    le plus simple et pour détecter l'erreur de démarrer l'enregistreur automatique du macro et faire l'opération manuellement, arrête l'enregistreur et tu aura ton code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     Range("A1").Select
        Selection.AutoFilter
        ActiveSheet.Range("$A$1:$A$6").AutoFilter Field:=1, Criteria1:="=6*", _
            Operator:=xlAnd
    donc ton erreur vient de ne pas préciser la plage à filtrer
    ActiveSheet.Range("$A$1:$A$100") au lieu de .Range("A1").AutoFilter
    J'avais bien essayé avec l'enregistreur de macro mais voici ce que j'obtiens :

    Sub Macro4()
    '
    ' Macro4 Macro
    '

    '
    ActiveSheet.Range("$A$1:$A$164").AutoFilter Field:=1, Criteria1:=Array( _
    "6020", "612", "613", "6164", "6258", "6365", "6450", "6453", "6517", "662", "674", "6773" _
    , "684", "6883", "691", "692", "6967"), Operator:=xlFilterValues
    End Sub

    Il me met automatiquement dans array tous les nombres commençant par 6 qu'il repère. Ca ne m'intéresse pas car si je change le contenu de la colonne le code ne sert à rien et recherche que les valeurs marquées en dur. J'ai bien essayé ce que tu m'a mis mais je me retrouve une fois de plus avec une colonne complétement cachée. Mon impression est que le noeud du problème se situe ici : Criteria1:="=6*"
    Si je change =6* par une valeur qui existe bien dans la colonne alors le filtre marche sans problème.

  5. #5
    Membre Expert
    Inscrit en
    Décembre 2002
    Messages
    993
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 993
    Par défaut
    Teste ceci:

    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 FiltrerColonneA()
     
        Dim lastRow As Long
        Dim cell As Range
        Dim sh As Worksheet
        Set sh = ThisWorkbook.Sheets("Feuil1")
     
        With sh
     
            lastRow = .Cells(.Rows.Count, "A").End(xlUp).Row
     
            For Each cell In .Range("A1:A" & lastRow)
                If Left(cell.Value, 1) = "6" Then
                    cell.EntireRow.Hidden = False
                Else
                    cell.EntireRow.Hidden = True
                End If
            Next cell
        End With
     
    End Sub
    Et pour satisfaire ta quête d'automatisation, pour annuler, si nécessaire, le filtrage de la sub ci-dessus:

    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 SupprimeFiltre()
     
        Dim lastRow As Long
        Dim cell As Range
        Dim sh As Worksheet
        Set sh = ThisWorkbook.Sheets("Feuil1")
     
        With sh
            lastRow = .Cells(.Rows.Count, "A").End(xlUp).Row
            For Each cell In .Range("A1:A" & lastRow)
                cell.EntireRow.Hidden = False
            Next cell
        End With
     
    End Sub

  6. #6
    Expert confirmé Avatar de BENNASR
    Homme Profil pro
    Responsable comptable & financier
    Inscrit en
    Décembre 2013
    Messages
    2 974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Responsable comptable & financier
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2013
    Messages : 2 974
    Par défaut
    Démarre l enregistreur auto et faire un filtre personnalisé et choisir commence par et non pas cocher ceux qui commence par 6
    La partie du code que j ai cité est obtenue a l aide de l enregistreur auto

  7. #7
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2023
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2023
    Messages : 4
    Par défaut
    Citation Envoyé par Franc Voir le message
    Teste ceci:

    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 FiltrerColonneA()
     
        Dim lastRow As Long
        Dim cell As Range
        Dim sh As Worksheet
        Set sh = ThisWorkbook.Sheets("Feuil1")
     
        With sh
     
            lastRow = .Cells(.Rows.Count, "A").End(xlUp).Row
     
            For Each cell In .Range("A1:A" & lastRow)
                If Left(cell.Value, 1) = "6" Then
                    cell.EntireRow.Hidden = False
                Else
                    cell.EntireRow.Hidden = True
                End If
            Next cell
        End With
     
    End Sub
    Et pour satisfaire ta quête d'automatisation, pour annuler, si nécessaire, le filtrage de la sub ci-dessus:

    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 SupprimeFiltre()
     
        Dim lastRow As Long
        Dim cell As Range
        Dim sh As Worksheet
        Set sh = ThisWorkbook.Sheets("Feuil1")
     
        With sh
            lastRow = .Cells(.Rows.Count, "A").End(xlUp).Row
            For Each cell In .Range("A1:A" & lastRow)
                cell.EntireRow.Hidden = False
            Next cell
        End With
     
    End Sub

    Bonjour Franc,

    Désolé pour ma réponse tardive mais merci beaucoup pour ton aide ! C'est bien vu et ça va très bien pour ce que je veux faire. Merci encore et bonne journée !

  8. #8
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2023
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2023
    Messages : 4
    Par défaut
    Citation Envoyé par Franc Voir le message
    Salut,
    Pourquoi ne pas créer un tableau structuré et ensuite choisir comme filtre numérique "6*" et ta colonne n'affichera que les nombres commençant par 6 ?
    Quelques clics de souris et pas besoin du moindre code.
    C'est ce que j'ai l'habitude de faire en effet mais je compte intégrer cette macro dans un programme plus grand qui me permettrait d'automatiser plein d'autres choses. Le but à terme serait de n'avoir qu'à appuyer sur un bouton pour m'éviter des dizaines de minutes de retraitements manuels de fichiers et de manipulations en tous genres. Par soucis de simplicité je n'ai parlé que de mon point bloquant du moment, à savoir que je n'arrive pas à retranscrire en VBA la manip que tu décris. Cette histoire de filtre n'est qu'une pierre dans l'édifice.

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

Discussions similaires

  1. [A-07] Filtre sur date en VBA
    Par sabel2007 dans le forum IHM
    Réponses: 4
    Dernier message: 14/11/2008, 11h57
  2. Réponses: 7
    Dernier message: 14/01/2008, 12h12
  3. filtre sur liste avec selection multiple
    Par petitours dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 01/08/2007, 09h42
  4. Problème de filtre sur date avec ADOQuery
    Par lingli dans le forum Bases de données
    Réponses: 12
    Dernier message: 30/04/2006, 15h40
  5. Réponses: 4
    Dernier message: 13/02/2006, 11h13

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