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 :

Recuperer le nombre de ligne d'un fltre dans une variable


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 32
    Points : 21
    Points
    21
    Par défaut Recuperer le nombre de ligne d'un fltre dans une variable
    Bonjour,

    Je souhaiterai recuperer le nombre de ligne de mon filtre dans une varible, mais mon code bloque la ou il est bleu.

    D'avance merci de prendre le temps de me venir en aide.
    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
    ' si aujourd'hui = date dernier action indic + 7 on fait
     Dim aujourd As Date
     Dim proind As Date
     Dim derind As Date
     Dim fait As Integer
     Dim cours As Integer
     
    
     aujourd = Range("A16").Value
     derind = Range("A12").Value
     proind = Range("A14").Value
     
     
    If aujourd = proind Then
    
    ' recherche le nombre réaliser les 7 derniers jours
        
        Dim date1 As Single
        Dim date2 As Single
    
        date1 = CDate(Range("A12"))      ' date derniere réal
        date2 = CDate(Range("A16"))     ' date aujourd'hui
    
        
        
        Sheets("HISTO.SYSTEMATIQUE").Select
    ActiveSheet.Unprotect Password:="remi"
        
        Selection.AutoFilter Field:=17, Criteria1:=">=" & date1, Criteria2:="<=" & date2
    
    'trouver le nombre de ligne filtrée
    fait = Range("P:P").SpecialCells(xlCellTypeVisible).Count - 1      'nombre de syst faite 7 derniers jours
    
    Selection.AutoFilter Field:=17
    
    ActiveSheet.Protect DrawingObjects:=False, Contents:=True, Scenarios:= _
    False, AllowFiltering:=True, AllowUsingPivotTables:=True
     
    'recherche le nombre en cours
    
        Sheets("SYSTEMATIQUE").Select
    ActiveSheet.Unprotect Password:="remi"
        
        Selection.AutoFilter Field:=21, Criteria1:="EN COURS"
        
    'trouver le nombre de ligne filtrée
    cours = Range("T:T").SpecialCells(xlCellTypeVisible).Count - 1                  'nbre de syst en cours
    Selection.AutoFilter Field:=21
    
    ActiveSheet.Protect DrawingObjects:=False, Contents:=True, Scenarios:= _
    False, AllowFiltering:=True, AllowUsingPivotTables:=True
    
    
    Sheets("INDICATEURS").Select
    'remplacer la date de la dernier indic
    
    Cells(7, 4).Value = fait
     Cells(6, 3).Value = cours
    'decaler les cellule de destination
    
    
    End If
    
    
    End Sub


    J'ai aussi essayé

    fait = Range([Subtotal(3, L:L)] - 1 )

    Mais cela ne fonctionné pas non plus.

    Encore merci

    Cordialement

  2. #2
    Expert éminent Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Points : 9 548
    Points
    9 548
    Par défaut
    bonsoir,

    essayes avec variable range

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Dim fait As range
    Dim cours As range
    ....
    set fait = application.Range("P1").SpecialCells(xlCellTypeVisible)
    msgbox fait.count -1 'tu adapteras
    idem pour cours
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 32
    Points : 21
    Points
    21
    Par défaut
    Bonjour,


    Tout d'abords merci de me venir en aide.

    J'ai du mal m'exprimer, je souhaite placer dans une cellule le nombre de ligne obtenu par mon filtre et non dans un msgbox.
    Et je n'y arrive pas avec votre méthode.

    Ci joint un fichier qui précise mieux ce que je souhaite faire.

    Encore merci de m'aider

    Cordialement

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 32
    Points : 21
    Points
    21

  5. #5
    Expert éminent Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Points : 9 548
    Points
    9 548
    Par défaut
    je n'ai pas encore regarder ton code mais j'ai mis "a adapter"
    je souhaite placer dans une cellule le nombre de ligne obtenu par mon filtre et non dans un msgbox.
    si tu mets ton nombre de lignes en A3 par exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    set fait = application.Range("P1").SpecialCells(xlCellTypeVisible)
    range("A3") = fait.count -1
    je viens de regarder, sans filtre, essayes comme ça

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Sub Bouton_click()
    Dim nbl As Integer
    nbl = Range("a" & Rows.Count).End(xlUp).Row
    Range("J1") = Application.WorksheetFunction.CountIf(Range("a1:a" & nbl), "pomme*")
    End Sub
    j'ai mis une etoile après pomme car tu as des espaces derriere
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 32
    Points : 21
    Points
    21
    Par défaut
    Bonjour,

    Merci beaucoup, le deuxième code fonctionne parfaitement pour un cas mais pour mon deuxième cas je n'arrive pas à l'appliquer :

    code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Dim date1 As Single
        Dim date2 As Single
        Dim fait As Integer
        date1 = CDate(Range("A12"))      ' date derniere réal
        date2 = CDate(Range("A16"))     ' date aujourd'hui
     
    Dim nfait As Integer
    nfait = Range("p" & Rows.Count).End(xlUp).Row
    fait = Application.WorksheetFunction.CountIf(Range("p1:p" & nfait), "(=" >= " & date1) , (=" <= " & date2)")
     
    Range("D7").Value = fait - 1

    Si cela peux vous aider, pour filtrer les lignes que je souhaite compter j'utilisai ce filtre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Selection.AutoFilter Field:=17, Criteria1:=">=" & date1, Criteria2:="<=" & date2

    Uns fois de plus merci de prendre le temps de m'aider.

    Cordialement

  7. #7
    Expert éminent Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Points : 9 548
    Points
    9 548
    Par défaut
    Pour le second, je te propose autre chose, sans avoir besoin de filtrer
    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
    Sub Bouton_click()
    Dim nfait As Integer, liste() As Variant, m
    Dim date1 As Date
    Dim date2 As Date
    Dim fait As Integer
    date1 = Range("A12")     ' date derniere réal
    date2 = Range("A16")     ' date aujourd'hui
    nfait = Range("p" & Rows.Count).End(xlUp).Row
    liste = Range("p1:p" & nfait)
    For Each m In liste()
       If m >= date1 And m <= date2 Then
          fait = fait + 1
       End If
    Next
    Range("D7").Value = fait - 1
    End Sub
    adaptes à tes besoins
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

  8. #8
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Si date1 en A12 et date2 en A16
    par formule en D7
    =SOMMEPROD((P : P>=A12)*(P : P<=A16))
    par vba
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("D7").value= Evaluate("=SUMPRODUCT((P:P>=A12)*(P:P<=A16))")
    Edit: au lieu de prendre toute la colonne P tu peux la limiter à la plage de cellules effective

    exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("D7").value= Evaluate("=SUMPRODUCT((P2:P100>=A12)*(P2:P100<=A16))")
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 32
    Points : 21
    Points
    21
    Par défaut Remerciement
    Bonsoir


    Merci beaucoup casefayere de votre solution elle marche à merveille !!

    Votre solution à résolu ma problématique.

    Merci de votre rapidité pour me répondre et aussi d'avoir persisté à m'aider.

    Encore un grand merci de m'apprendre des choses.

    Merci à mercatog de votre réponse aussi.

    Cordialement

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

Discussions similaires

  1. [PowerShell] Récupérer chaque ligne d'un pipeline dans une variable
    Par Eveanne dans le forum Scripts/Batch
    Réponses: 2
    Dernier message: 05/06/2015, 16h16
  2. Réponses: 2
    Dernier message: 24/04/2014, 10h39
  3. Réponses: 12
    Dernier message: 09/01/2007, 14h28
  4. ligne de fichier txt dans une variable
    Par suya95 dans le forum Langage
    Réponses: 2
    Dernier message: 25/07/2006, 10h14
  5. Réponses: 2
    Dernier message: 19/05/2004, 10h13

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