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 :

arrêté la macro si résultat du filtre est nulle.


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Homme Profil pro
    gestion de stock
    Inscrit en
    Mars 2021
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : gestion de stock

    Informations forums :
    Inscription : Mars 2021
    Messages : 5
    Par défaut arrêté la macro si résultat du filtre est nulle.
    Bonjour, je sollicite votre aide afin d'améliorer ma macro qui lance un filtre dans la feuille "DOS", copier la sélection et la coller sur la feuille fournisseur concerné.

    Ma demande est : est-il possible de dire à la macro que si le filtre n’amène pas de résultat de passer directement à sub end ?

    Ma demande est : Ci-dessous la macro en question.


    Code vba : 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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    Sub IMPORT_FEUILLE_ARB() 
    Application.ScreenUpdating = False
     
    Sheets("DOS").Select
    ActiveSheet.Range("A:Z").AutoFilter Field:=26, Criteria1:="ARB" 
    Range("A3:X3").Select
    Range(Selection, Selection.End(xlDown)).Select
    Selection.Copy
     
        Sheets("ARB").Select 
     
        Dim DerniereLigne As Long
    'Téléchargez le dernier numéro de ligne utilisé
    DerniereLigne = Cells(Rows.Count, 2).End(xlUp).Row
    'Sélectionnez la ligne suivante ci-dessous
    Cells(DerniereLigne, 1).Offset(1, 1).Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
     
     
    nblig = Range("B3").End(xlDown).Row
    Range("A3:A" & nblig).FormulaR1C1 = "A faire"
     
    Sheets("DOS").Select
    Range("A3").Select
        Range(Selection, Selection.End(xlDown)).Select
        Range(Selection, Selection.End(xlToRight)).Select
       ActiveSheet.Rows("3:80000").SpecialCells(xlCellTypeVisible).Delete
     
     
    Selection.AutoFilter
    Application.ScreenUpdating = True
    End Sub

  2. #2
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    il y a plusieurs méthodes.
    Pour ma part (ce n'est pas la solution la plus élégante), j'utilise la fonction NBVAL.

    Il faut que la colonne où on effectue le test ne contienne aucune cellule vide

    si NBVAL = 1 alors pas de résultat au filtre (il n'y a que la cellule contenant l'en-tête de colonne)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Application.WorksheetFunction.Subtotal(3, Sheets("DOS")..Range("A:A")) = 1 Then Exit Sub

  3. #3
    Membre à l'essai
    Homme Profil pro
    gestion de stock
    Inscrit en
    Mars 2021
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : gestion de stock

    Informations forums :
    Inscription : Mars 2021
    Messages : 5
    Par défaut
    merci beaucoup joe.levrai .

  4. #4
    Expert confirmé
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Maine et Loire (Pays de la Loire)

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

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Billets dans le blog
    7
    Par défaut
    Bonsoir à vous, Bonsoir au Forum,

    Salut, Joe. Content de te retrouver.

    Un autre processus pourrait consister en l'utilisation de la méthode Find qui retourne un objet Range.
    Si ce Range n'est pas rien alors le iltre s'applique.

    Un 3ème enfin consisterait à tester la place de chaque item dans la colonne de donnée en gérant un retour d'erreur éventuel.

    J'ai un programme en cours.
    Je reviens au plus vite avec une ou deux propositions de code.

  5. #5
    Expert confirmé
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Maine et Loire (Pays de la Loire)

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

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Billets dans le blog
    7
    Par défaut
    Bonsoir,

    Sur le 1er processus (que je préfère)

    Ici
    Une feuille du classeur comprend la table des données (tableau structuré) "LaTable" contenant une colonne "Parent".
    Son CodeName est "LesDonnées"
    Une autre feuille contient un tableau structuré "T_Crit" contenant une colonne "Id"
    Le code va
    - rechercher chaque item "Id" dans "LaTable" à la colonne "Parent"
    - si l'item est trouvé (fonction "Equiv" en Excel, "Match" en VBA) alors "LaTable" est filtrée et son corps de données est supprimé

    A noter que la méthode
    ne s'affecte qu'aux lignes visibles.
    C'est la raison pour laquelle la suppression du filtre éventuel est une précaution utile avant toute explloitation d'un tableau structuré dans ce sens.
    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    Option Explicit
     
    Public Sub suppr_crit()
     
    Dim c As Range
    Dim eq As Long
     
    With Application
            .ScreenUpdating = False
            .DisplayAlerts = False
    End With
     
    For Each c In Range("T_Crit[Id]")
            eq = Evaluate("=IFERROR(MATCH(""" & c.Value & """,LaTable[Parent],0),0)")
            If eq > 0 Then
                    Call épure_latable(lechamp:="Parent", lecrit:=c.Value)
            End If
    Next c
     
    With Application
            .DisplayAlerts = True
            .ScreenUpdating = True
    End With
     
    End Sub
     
    Private Sub épure_latable(lechamp As Variant, lecrit As Variant)
     
    Dim numchamp As Integer
     
    With LesDonnées
            If .FilterMode = True Then .ListObjects("LaTable").AutoFilter.ShowAllData
            With .ListObjects("LaTable")
                    numchamp = .ListColumns(lechamp).Index
                    'Filtre
                    .Range.AutoFilter _
                            Field:=numchamp, Criteria1:=lecrit
                    .DataBodyRange.Delete
            End With
            .ListObjects("LaTable").AutoFilter.ShowAllData
    End With
     
     
    End Sub

Discussions similaires

  1. Select toutes les données si le champ de filtre est NULL
    Par heart100 dans le forum Développement
    Réponses: 8
    Dernier message: 27/01/2020, 10h32
  2. [XL-2016] Macro qui ne fonctionne plus lorsqu'un filtre est présent
    Par Lubinovitch dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 12/06/2019, 13h31
  3. Réponses: 2
    Dernier message: 11/06/2014, 21h57
  4. Réponses: 19
    Dernier message: 26/01/2005, 10h41
  5. [ADO] Savoir si un filtre est appliqué
    Par dleu dans le forum Bases de données
    Réponses: 8
    Dernier message: 21/12/2004, 09h27

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