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 :

MACRO pour compter lignes renseignées d'une feuille sans tenir compte du filtrage auto [XL-2010]


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Inscrit en
    Janvier 2009
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 21
    Points : 21
    Points
    21
    Par défaut MACRO pour compter lignes renseignées d'une feuille sans tenir compte du filtrage auto
    Bonjour,

    J'ai une feuille excel avec un tableau. Il y a un autofilter sur la première ligne que n'importe quel utilisateur peut avoir modifié.

    Je souhaite pouvoir compter le nombre de ligne que mon tableau a réellement quand il n'y a aucun filtrage.

    Si le seul moyen et de désactiver temporairement le filtrage, est-il possible de stocker la configuration pour pouvoir la rétablir ensuite (choix de filtrage fait par l'utilisateur).

    Je souhaite trouver la solution qui soit la moins lourde possible.

    Merci d'avance.

  2. #2
    Membre émérite
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Novembre 2011
    Messages
    1 503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Irlande

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Novembre 2011
    Messages : 1 503
    Points : 2 657
    Points
    2 657
    Par défaut
    J'ai trouvé ça : http://msdn.microsoft.com/en-us/libr.../ff821564.aspx
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .PivotTables("Tableau croisé dynamique").PivotFields("xxx").ClearAllFilters
    Je ne sais pas du tout comment ça fonctionne mais c'est peut-être une base pour travailler ! ^^
    La logique :
    • Plus ya de gruyère, moins ya de gruyère.
    • Plus tu pédales moins vite, moins tu avances plus vite.
    Plusoyer les réponses pertinentes et n'oublier pas de résolver en fin de post !

  3. #3
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 730
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 730
    Points : 28 556
    Points
    28 556
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Je n'avais pas lu dans ta question qu'il s'agissait de Tableau Croisé dynamique.
    Pour un filtre effectué sur une table normale
    La formule NBVAL(plage) compte le nombre de cellules remplies dans une plage même si cette plage est filtrée.
    Donc, si toutes les cellules de la plage A2:A100 de ton tableau contiennent une valeur ou une formule, la formule ci-dessous te renvoie le nombre de lignes remplies.
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  4. #4
    Membre à l'essai
    Inscrit en
    Janvier 2009
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 21
    Points : 21
    Points
    21
    Par défaut
    bonjour,

    Après quelques recherches, voici une routine qui répond à mes besoins.

    Le principe est simple:
    - je teste la présence d'un filtre
    - je copie la configuration des filtres (différent si un critère, deux critères, ou plus)
    - je désactive les filtres
    - je compte les lignes
    - je restaure le filtre avec les critères précédemment utilisés

    Ce n'est pas optimisé, mais je le poste au cas où ça servirait à quelqu'un d'autre.


    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
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    Sub Count_Worksheet_Lines()
     
    'declaration
    Dim Fltr As Filter
    Dim AutoFilterSettings() As String
    Dim NumOfCriteria As Integer
    Dim NumOfItem As Integer
    Dim MaxCriteria As Integer
    Dim CurrentFilter As Integer
    Dim Veriftab As Variant
    Dim NewCriteria() As String
     
    Dim i As Integer, j As Integer
    Dim WS As Worksheet
    Set WS = ThisWorkbook.Sheets("Sheet1")
     
    Dim NumOfLine As Integer
     
    'init
    MaxCriteria = 0
    CurrentFilter = 1
    NumOfLine = 0
     
    'Check if autofilter is activated and saved settings
    If WS.AutoFilterMode = True Then
        'Count item
        NumOfItem = WS.AutoFilter.Filters.Count
        'MsgBox NumOfItem
        ReDim AutoFilterSettings(1 To NumOfItem, 1 To 2)
     
        For Each Fltr In WS.AutoFilter.Filters
            If Fltr.On Then
                NumOfCriteria = Fltr.Count
                If NumOfCriteria > MaxCriteria Then
                    MaxCriteria = NumOfCriteria
                    ReDim Preserve AutoFilterSettings(1 To NumOfItem, 1 To MaxCriteria + 1)
                End If
                AutoFilterSettings(CurrentFilter, 1) = NumOfCriteria
                'MsgBox NumOfCriteria
                If NumOfCriteria > 2 Then
                    For i = 1 To NumOfCriteria
                        AutoFilterSettings(CurrentFilter, i + 1) = Fltr.Criteria1(i)
                    Next i
                ElseIf NumOfCriteria = 2 Then
                    AutoFilterSettings(CurrentFilter, 2) = Fltr.Criteria1
                    AutoFilterSettings(CurrentFilter, 3) = Fltr.Criteria2
                ElseIf NumOfCriteria = 1 Then
                    AutoFilterSettings(CurrentFilter, 2) = Fltr.Criteria1
                End If
            Else
                AutoFilterSettings(CurrentFilter, 1) = 0
            End If
        CurrentFilter = CurrentFilter + 1
        Next Fltr
    End If
     
    'desactivate autofilter
    If WS.AutoFilterMode = True Then
        WS.AutoFilterMode = False
    End If
    'count lines
    NumOfLine = WS.Range("F1").End(xlDown).Row
    MsgBox NumOfLine
     
    'check if Autofiltersetings is empty, if yes exit sub
    On Error Resume Next
    Veriftab = UBound(AutoFilterSettings)
    On Error GoTo 0
     
    If IsEmpty(Veriftab) Then Exit Sub
     
    'Activate autofilter
    WS.Range("A1").AutoFilter
     
    'restore previous autofilter
    For i = 1 To UBound(AutoFilterSettings, 1)
        If AutoFilterSettings(i, 1) = 1 Then
            WS.Range("A1").AutoFilter Field:=i, Criteria1:=AutoFilterSettings(i, 2)
        ElseIf AutoFilterSettings(i, 1) = 2 Then
            WS.Range("A1").AutoFilter Field:=i, Criteria1:=AutoFilterSettings(i, 2), Operator:=xlOr, Criteria2:=AutoFilterSettings(i, 3)
        ElseIf CDbl(AutoFilterSettings(i, 1)) > 2 Then
            ReDim NewCriteria(AutoFilterSettings(i, 1))
            For j = 1 To AutoFilterSettings(i, 1)
                NewCriteria(j) = AutoFilterSettings(i, j + 1)
            Next j
            WS.Range("A1").AutoFilter Field:=i, Criteria1:=NewCriteria, Operator:=xlFilterValues
        End If
    Next i
     
     
    End Sub
    PS: Je viens de voir les réponses postées, je vais essayer quelque chose avec NBVAL, je ne connaissais pas. Et non je ne parlais pas de TCD.

    Merci d'avoir pris la peine de répondre

  5. #5
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 730
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 730
    Points : 28 556
    Points
    28 556
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Une autre formule à laquelle je n'ai pas pensé immédiatement et qui répond évidemment exactement à ta demande est la formule LIGNES(plage)
    Ainsi si le tableau est compris entre A2 et E16 la formule ci-dessous revoie le nombre de ligne de cette plage.
    Si la plage est nommée dbCli
    Et si c'est une plage transformée en tableau
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

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

Discussions similaires

  1. [XL-2010] Faire une somme d'une colonne sans tenir compte des dates
    Par madrunner dans le forum Excel
    Réponses: 18
    Dernier message: 14/08/2014, 19h43
  2. Macro pour compter le nombre de fois qu'apparait un mot dans une feuille
    Par arno1975 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 11/02/2014, 10h27
  3. [XL-2003] Macro pour copie de valeurs d'une feuille dans une autre
    Par lili189 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 19/10/2012, 09h25
  4. Réponses: 1
    Dernier message: 10/02/2010, 15h08
  5. faire une recherche sans tenir compte de la casse
    Par richard038 dans le forum SQL
    Réponses: 5
    Dernier message: 11/10/2005, 10h07

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