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 + Countif marche en mode debug et non en continue


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Juin 2013
    Messages
    114
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Juin 2013
    Messages : 114
    Par défaut Filtre + Countif marche en mode debug et non en continue
    Bonjour,

    j'ai un soucis avec la macro ci dessous.

    En effet, je fais un filtre sur la colonne deux afin d'éliminer des lignes que je ne souhaite pas compter.

    Puis je fais un Countif pour connaître le nombre de cellule non vide. Ma boucle permet de récupérer le nombre de cellule nouvelle sur les 14 dernières colonne de ma feuille.

    Problème :

    En mode débug pas à pas cela fonctionne correctement par contre, lorsque j'active la macro sans fonction débug j'ai le résultat pour toutes les cellules comme ci le filtre ne s'activait pas ou qu'il comptait autant sur les cellules visibles et non visibles.

    Quelqu'un peut il m'aider?

    Merci d'avance

    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
    colonne_choisie = num_colonne3("NPT_Analyse", "Code Vie ENG", 2)
     
    maxligne2 = max_ligne("NPT_Analyse", 1)
     
     
    Sheets("NPT_Analyse").Select
    Range("A2").Select
    If Sheets("NPT_Analyse").FilterMode Then
        Sheets("NPT_Analyse").ShowAllData
    End If
     
        Sheets("NPT_Analyse").Select
        Rows(2).Select
     
        Sheets("NPT_Analyse").Range("$A$2:$AEJ$" & maxligne2).AutoFilter Field:=2, Criteria1:="PN"
     
    For compteur1 = 0 To 13
            colonne_test = colonne_choisie + compteur1
            Sheets("NPT_Analyse").Select
     
            Set PlageDeRecherche3 = Sheets("NPT_Analyse").Range(Cells(3, colonne_test), Cells(maxligne2, colonne_test))
            nbresi3 = WorksheetFunction.CountIf(PlageDeRecherche3, "*")
     
     
            If compteur1 = 0 Then
               Sheets("Donnée_KPI3").Cells(2, 3).Value = nbresi3
            ElseIf compteur1 = 1 Then
               Sheets("Donnée_KPI3").Cells(3, 4).Value = nbresi3
            ElseIf compteur1 = 2 Then
               Sheets("Donnée_KPI3").Cells(4, 4).Value = nbresi3
            ElseIf compteur1 = 3 Then
               Sheets("Donnée_KPI3").Cells(5, 4).Value = nbresi3
            ElseIf compteur1 = 4 Then
               Sheets("Donnée_KPI3").Cells(6, 5).Value = nbresi3
            ElseIf compteur1 = 5 Then
               Sheets("Donnée_KPI3").Cells(7, 6).Value = nbresi3
            ElseIf compteur1 = 6 Then
               Sheets("Donnée_KPI3").Cells(8, 6).Value = nbresi3
            ElseIf compteur1 = 7 Then
               Sheets("Donnée_KPI3").Cells(9, 6).Value = nbresi3
            ElseIf compteur1 = 8 Then
               Sheets("Donnée_KPI3").Cells(10, 7).Value = nbresi3
            ElseIf compteur1 = 9 Then
               Sheets("Donnée_KPI3").Cells(11, 7).Value = nbresi3
            ElseIf compteur1 = 10 Then
               Sheets("Donnée_KPI3").Cells(12, 8).Value = nbresi3
            ElseIf compteur1 = 11 Then
               Sheets("Donnée_KPI3").Cells(13, 8).Value = nbresi3
            ElseIf compteur1 = 12 Then
               Sheets("Donnée_KPI3").Cells(14, 9).Value = nbresi3
            ElseIf compteur1 = 13 Then
               Set PlageDeRecherche3 = Sheets("NPT_Analyse").Range(Cells(3, colonne_test), Cells(maxligne2, colonne_test))
                   nbresi3 = WorksheetFunction.CountIf(PlageDeRecherche3, "OK")
                   Sheets("Donnée_KPI3").Cells(15, 10).Value = nbresi3
            End If
     
     
    Next

  2. #2
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Bonjour
    Avant toute autre chose : on évite de compter ce que tu veux compter avec CountIf. CountA existe et est plus rapide.
    Ceci étant dit :
    Tant CountIf que CountA examinent (et rendent compte) de toute la plage. Ce n'est pas parce-que l'on met de la poussière sous le tapis que la poussière n'existe pas.
    Il faut donc, dans ton cas, ne "retenir" que les cellules visibles de la plage concernée.
    Or, Countif ne sait "travailler" qu'avec une plage continue. Tel n'est pas le cas de CountA, qui sait travailler sur une plage de cellules discontinues. --->>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    msgbox worksheetfunction.counta(range( ......).specialcells(xlcelltypevisible)
    devrait donc, dans ton cas, te satisfaire.

Discussions similaires

  1. Réponses: 36
    Dernier message: 27/08/2015, 18h28
  2. Réponses: 13
    Dernier message: 22/10/2010, 23h26
  3. Réponses: 29
    Dernier message: 26/07/2007, 15h24
  4. Réponses: 3
    Dernier message: 06/03/2006, 09h59

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