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 :

Je n'arrive pas à constituer une date pour filtrer un tableau


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2019
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2019
    Messages : 8
    Par défaut Je n'arrive pas à constituer une date pour filtrer un tableau
    Bonjour, je dois faire une fonction qui permet de tirer des informations par rapport à un mois et une année.
    L'utilisateur devra entrer une année à l'exécution du script : retour = InputBox("Indiquez l'année :", "Sélection du mois pour le filtre", "Format : XXXX")
    Je voulais faire une boucle for qui va de 1 à 12 (elle représentera les mois). For i = 1 To 12
    Puis à l'interieur de cette boucle, je voudrai faire :
    -Sélection de la feuille concernée
    -Sélection de la case concernée
    -Filtrage en fonction d'une date constituée de (i / retour)
    -Comptage du nombre de cases non vide en prenant compte du filtre
    -Ecrire les résultats dans une autre feuille.

    Je suis un débutant dans excel et je n'arrive pas à constituer une date avec ces deux variables.

    Merci d'avance pour votre aide.

  2. #2
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 173
    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 : 13 173
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    D'après mon interprétation de la lecture de ta demande, tu cherches à exporter des données suivant conditions (Mois et année)

    Je ne peux que te conseiller de t'intéresser au filtre avancé d'excel (en VBA la méthode AdvancedFilter). Le critère se résume à une formule qui doit renvoyer VRAI ou FAUX et ensuite cela prend une ligne de code après avoir déclarer les plages de cellules concernées

    A lire le cas échéant Les filtres avancés ou élaborés dans Excel
    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

  3. #3
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2019
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2019
    Messages : 8
    Par défaut
    Voici mon ancienne macro :

    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
    Sub test()
     For Each Sheet In ActiveWorkbook.Worksheets
        If Sheet.Name = "Macro" Then
            Application.DisplayAlerts = False
            Worksheets("Macro").Delete
            Application.DisplayAlerts = True
        End If
    Next Sheet
        retour = InputBox("Indiquer le mois et l'année :", "Sélection du mois pour le filtre", "Format : XX/XXXX")
     
        Worksheets("DA").Range("$M:$M").AutoFilter Field:=13, Operator:= _
        xlFilterValues, Criteria2:=Array(1, retour)
     
        With ThisWorkbook
    .Sheets.Add(After:=.Sheets(.Sheets.Count)).Name = "Macro"
        End With
        Sheets("DA").Activate
        var_test = Worksheets("DA").Range("M:M").Cells.SpecialCells(xlCellTypeConstants).Count
        var_test2 = Worksheets("DA").Range("M:M").Application.WorksheetFunction.Subtotal(3, Range("M:M")) - 1
        'Activation de la feuille Macro
        Sheets("Macro").Activate
        'Sélection de la cellule A1
        Range("A1").Select
        ActiveCell.FormulaR1C1 = "Nombre total de TFT depuis le début:"
        Range("B1").Select
        ActiveCell.FormulaR1C1 = var_test - 1
        Range("A2").Select
        ActiveCell.FormulaR1C1 = "Nombre total de TFT dans le mois saisis:"
        Range("B2").Select
        ActiveCell.FormulaR1C1 = var_test2
    End Sub

    Elle marche très bien sauf que je dois mettre le mois et l'année à chaque fois.
    Je voudrai remplacer cela par une boucle for où à chaque fois le mois change pour une année saisi par l'utilisateur.

  4. #4
    Membre extrêmement actif
    Homme Profil pro
    Inscrit en
    Septembre 2013
    Messages
    1 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2013
    Messages : 1 369
    Par défaut
    Bonjour,


    Un exemple avec Filtre auto et Filtre élaboré

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sub filtreDateInputBox()
       d = InputBox("Date")
       If Val(Application.version) >= 12 Then
         [A5].AutoFilter Field:=5, Criteria1:=Format(d, "dd/mm/yyyy")
       Else
          [A5].AutoFilter Field:=5, Criteria1:=Format(d, "mm/dd/yyyy")
       End If
    End Sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Sub FiltreMoisAn()
        mois = 3: an = 2007
        ActiveSheet.Range("$A$5:$E$30").AutoFilter Field:=5, Operator:= _
            xlFilterValues, Criteria2:=Array(1, Format(DateSerial(an, mois, 1), "mm/dd/yyyy"))
    End Sub

    Boisgontier
    Fichiers attachés Fichiers attachés

  5. #5
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2019
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2019
    Messages : 8
    Par défaut
    C'est parfait, ce morceau de code a résolu mon problème : xlFilterValues, Criteria2:=Array(1, Format(DateSerial(an, mois, 1), "mm/dd/yyyy"))

    Merci beaucoup !!!

  6. #6
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2019
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2019
    Messages : 8
    Par défaut
    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
    Sub test()
     For Each Sheet In ActiveWorkbook.Worksheets
        If Sheet.Name = "Macro" Then
            Application.DisplayAlerts = False
            Worksheets("Macro").Delete
            Application.DisplayAlerts = True
        End If
    Next Sheet
     
    With ThisWorkbook
    .Sheets.Add(After:=.Sheets(.Sheets.Count)).Name = "Macro"
        End With
     
    an = InputBox("Indiquer le mois et l'année :", "Sélection du mois pour le filtre", "Format : 20XX")
    TFT_TOTAL = Worksheets("DA").Range("M:M").Cells.SpecialCells(xlCellTypeConstants).Count
    Dim mois As Integer
     
     
    For mois = 1 To 12
        Sheets("Macro").Activate
        Worksheets("DA").Range("$M:$M").AutoFilter Field:=13, Operator:= _
    xlFilterValues, Criteria2:=Array(1, Format(DateSerial(an, mois, 1), "mm/dd/yyyy"))
        TFT_MOIS = Worksheets("DA").Range("M:M").Application.WorksheetFunction.Subtotal(3, Range("M:M"))
        Cells(mois, 1) = TFT_MOIS
        Next
     
        Cells(1, 2) = TFT_TOTAL - 1
    End Sub

    Cela ressemble à ça. Le seul problème est que maintenant à chaque fois qu'on passe par la boucle la valeur de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TFT_MOIS = Worksheets("DA").Range("M:M").Application.WorksheetFunction.Subtotal(3, Range("M:M"))
    est 0.

    je ne sais pas pourquoi

  7. #7
    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
    bonsoir kollou minnek !!
    balise ton code svp (metrre entre #)
    sans comprendre la finalité ni ta demande, je t'invite à regarder cette partie de code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    For Each Sheet In ActiveWorkbook.Worksheets
    If Sheet.Name = "Macro" Then
    Application.DisplayAlerts = False
    Worksheets("Macro").Delete
    Application.DisplayAlerts = True
    End If
    Next Sheet
    je comprends si tu conditionne le traitement pour toute les feuilles ayant un nom différent de Macro mais si le nom est MACRO alors pas la peine de parcourir toutes les feuilles !!! il suffit d'écrire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    with Sheet("Macro") 
    Application.DisplayAlerts = False
    .Delete
    Application.DisplayAlerts = True
    end with

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 03/07/2017, 19h18
  2. [XL-2010] Comparaison entre deux dates pour filtrer dans tableau croisé dynamique
    Par Paenitentia dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 08/08/2014, 16h34
  3. Réponses: 9
    Dernier message: 01/12/2010, 05h24
  4. Réponses: 8
    Dernier message: 10/02/2009, 00h04
  5. Je n'arrive pas à détruire une fenêtre
    Par CORREGE Frédéric dans le forum MFC
    Réponses: 6
    Dernier message: 22/02/2004, 20h28

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