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 :

Multifiltre et tranches


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Femme Profil pro
    Gestionnaire administrative
    Inscrit en
    Mars 2013
    Messages
    95
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations professionnelles :
    Activité : Gestionnaire administrative
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2013
    Messages : 95
    Par défaut Multifiltre et tranches
    Bonjour,

    Voilà 1 semaine que je peine sur ce cas ! Du coup je viens demander de l'aide. Je vous ai mis en pièces jointes des extraits des fifférents fichiers dont j'ai besoin.

    2 fichiers :
    - Pilotage : fichier contenant les données que je souhaite récupérer
    - Maquette : fichier où je dois mettre les données récupérées

    Sur le fichier pilotage je dois rechercher des données selon des critères qui sont dans le fichier maquette.
    Actions :
    - Filtrer sur la colonne A (Action) sur les lignes ne contenant pas "taux normal" du fichier pilotage (ça j'y arrive)
    -Filtre sur la colonne O = "" (ça ça va aussi)
    - Filtrer ensuite sur la colonne B (Produit) du fichier pilotage selon le nom de produit qui apparaît dans la colonne K du fichier maquette
    - Filtrer ensuite sur la date de début et date de fin, colonnes F et G du fichier pilotage selon la date apparaissant en colonne N du fichier maquette (il faut donc que cette date appartienne à la tranche date début-date fin)
    - Filtrer ensuite sur les colonnes D et E (montant minimum et maximum) du fichier pilotage selon le montant se trouvant dans la colonne AG (Montant total) du fichier maquette (même système de tranche que pour la date).
    - Pour finir je dois trouver le taux national et le taux régional apparaissant en colonne M et N du fichier pilotage selon la tranche de la part UC (colonnes I et J) du fichier pilotage que l'on trouve grâce à la part UC globale se trouvant en colonne AJ du fichier maquette (une recherchev pour finir peut-être ?).
    - But de toutes ces manoeuvres : récupérer le taux national et le taux régional et les copier dans le fichier maquette en colonnes AP et AQ et ce pour chaque onglet et chaque ligne du fichier maquette.

    J'espère que ce n'est pas trop lourd et que quelqu'un voudra bien essayé de m'aider...
    Voici le code que j'ai écris (qui est loin d'être le 1er que j'essaie) :
    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
    'Taux national et taux régional
    'Enlever les lignes correspondantes au taux normal
    derlignetaux = Workbooks(pilotage).Sheets("Taux Frais 2013").Range("A65000").End(xlUp).Row
    derlignemaq = Workbooks(maquette).Sheets(Num & " " & Nom).Range("A65000").End(xlUp).Row
    For i = 2 To derlignetaux
        derlignetaux = Workbooks(pilotage).Sheets("Taux Frais 2013").Range("A65000").End(xlUp).Row
        For j = 2 To derlignemaq
        derlignetaux = Workbooks(pilotage).Sheets("Taux Frais 2013").Range("A65000").End(xlUp).Row
        If Workbooks(pilotage).Sheets("Taux Frais 2013").Range("A" & i).Value Like "*taux normal*" Then
            Workbooks(pilotage).Sheets("Taux Frais 2013").Rows(i).Delete
        End If
    'Typologie produit
        If Workbooks(pilotage).Sheets("Taux Frais 2013").Range("B" & i).Value <> Workbooks(maquette).Sheets(Num & " " & Nom).Range("K" & j).Value Then
            Workbooks(pilotage).Sheets("Taux Frais 2013").Rows(i).Delete
        End If
    'Sélectionner la bonne action en fonction de la date de signature
        If Not Workbooks(maquette).Sheets(Num & " " & Nom).Range("N" & j).Value >= Workbooks(pilotage).Sheets("Taux Frais 2013").Range("F" & i).Value And Workbooks(maquette).Sheets(Num & " " & Nom).Range("N" & j).Value <= Workbooks(pilotage).Sheets("Taux Frais 2013").Range("G" & i).Value Then
            Workbooks(pilotage).Sheets("Taux Frais 2013").Rows(i).Delete
        End If
    'Type réalisation vide
        If Workbooks(pilotage).Sheets("Taux Frais 2013").Range("O" & i) <> "" Then
            Workbooks(pilotage).Sheets("Taux Frais 2013").Rows(i).Delete
        End If
    'Tranche de la somme total
        If Not Workbooks(maquette).Sheets(Num & " " & Nom).Range("AG" & j).Value >= Workbooks(pilotage).Sheets("Taux Frais 2013").Range("D" & i).Value And Workbooks(maquette).Sheets(Num & " " & Nom).Range("AG" & j).Value <= Workbooks(pilotage).Sheets("Taux Frais 2013").Range("E" & i).Value Then
            Workbooks(pilotage).Sheets("Taux Frais 2013").Rows(i).Delete
        End If
    'Tranche de la part UC
        If Not Workbooks(maquette).Sheets(Num & " " & Nom).Range("AJ" & j).Value >= Workbooks(pilotage).Sheets("Taux Frais 2013").Range("I" & i).Value And Workbooks(maquette).Sheets(Num & " " & Nom).Range("AJ" & j).Value <= Workbooks(pilotage).Sheets("Taux Frais 2013").Range("J" & i).Value Then
            Workbooks(pilotage).Sheets("Taux Frais 2013").Rows(i).Delete
        End If
    'Taux National
        Workbooks(maquette).Sheets(Num & " " & Nom).Range("AP" & j).Value = Workbooks(pilotage).Sheets("Taux Frais 2013").Range("M2").Value
    'Taux régional
        Workbooks(maquette).Sheets(Num & " " & Nom).Range("AQ" & j).Value = Workbooks(pilotage).Sheets("Taux Frais 2013").Range("N2").Value
    'On ferme et réouvre le fichier pilotage sans enregistrer
    Workbooks(pilotage).Close False
    Workbooks.Open Filename:=rep & "Données\" & pilotage
    Next j
    Next i
    Merci par avance
    Fichiers attachés Fichiers attachés

  2. #2
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Par défaut
    Bonjour,

    Une piste pour commencer. Le classeur "Pilotage.xls" doit être ouvert.
    Ton système de filtrage sur les champs Date début et fin comme sur Montant Mini et Maxi pose problème car tu cherche à filtrer deux champs sur une seule date ou montant et donc, seuls les dates et montants égaux seront retournés. En fait, il faudrait que ce soit le critère qui définisse les bornes et donc qu'elles soient indiquées non pas dans le classeur "Pilotage" mais dans le classeur "Maquette" et dans ce cas le filtrage devient :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    .AutoFilter 6, ">=" & CDbl(Fe.Range("N2")), , "<=" & CDbl(Fe.Range("M2"))
    La proc ci-dessous ne boucle pas sur les lignes de la feuille du classeur "Maquette", j'ai juste pris les cellules de la ligne 2 (plus simple pour l'exemple). Le résultat est affiché dans une boite de dialogue (pour faire simple aussi) mais tu peux facilement adapter :
    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
     
    Sub Test()
     
        Dim Cl_Pilotage As Workbook
        Dim Fe As Worksheet
        Dim Plage As Range
        Dim I As Integer
        Dim Chaine As String
     
        Set Cl_Pilotage = Workbooks("Pilotage.xls")
     
        Set Fe = ThisWorkbook.Worksheets("9144206")
     
        With Cl_Pilotage.Worksheets("Feuil1")
     
            Set Plage = .Range(.Cells(1, 1), .Cells(.Rows.Count, 1).End(xlUp)).Resize(.Cells(.Rows.Count, 1).End(xlUp).Row, 15)
     
        End With
     
        With Plage
     
            '- Filtrer sur la colonne A (Action) sur les lignes ne contenant pas "taux normal" du fichier pilotage (ça j'y arrive)
            .AutoFilter 1, "<>Taux normal applicable toute l'année"
     
            '-Filtre sur la colonne O = "" (ça ça va aussi)
            .AutoFilter 15, "="
     
            '- Filtrer ensuite sur la colonne B (Produit) du fichier pilotage selon le nom de produit qui apparaît dans la colonne K du fichier maquette
            .AutoFilter 2, "=" & Fe.Range("K2")
     
            '- Filtrer ensuite sur la date de début et date de fin, colonnes F et G du fichier pilotage selon la date apparaissant en colonne N du fichier maquette (il faut donc que cette date appartienne à la tranche date début-date fin)
     
            '-----> Ici c'est normalement dans le critère que l'on défini les dates de début et de fin car dans le cas contraire, seules les dates égales seront retournées
            '-----> le filtre devrait être : .AutoFilter 6, ">=" & CDbl(Fe.Range("N2")), , "<=" & CDbl(Fe.Range("M2")) et donc porter sur deux champs de la feuille "9144206" du classeur "Maquette"
            .AutoFilter 6, ">=" & CDbl(Fe.Range("N2"))
            .AutoFilter 7, "<=" & CDbl(Fe.Range("N2")) '<----- à partir d'ici, seules les dates égales seront retournées !!!
     
            '- Filtrer ensuite sur les colonnes D et E (montant minimum et maximum) du fichier pilotage selon le montant se trouvant dans la colonne AG (Montant total) du fichier maquette (même système de tranche que pour la date).
            '-----> (même système de tranche que pour la date) alors même punition !!!
            .AutoFilter 4, ">=" & Fe.Range("AG2")
            .AutoFilter 5, "<=" & Fe.Range("AG2") '<----- à partir d'ici, seules les montants égaux seront retournés !!!
     
            '- Pour finir je dois trouver le taux national et le taux régional apparaissant en colonne M et N du fichier pilotage selon la tranche de la part UC (colonnes I et J) du fichier pilotage que l'on trouve grâce à la part UC globale se trouvant en colonne AJ du fichier maquette (une recherchev pour finir peut-être ?).
            For I = 2 To Plage.Rows.Count
     
                If Plage.Rows(I).EntireRow.Hidden = False Then
     
                    Chaine = Chaine & "(Ligne " & I & ") Taux national : " & Plage.Cells(I, 13).Value & " Taux régional : " & Plage.Cells(I, 14).Value & vbCrLf
     
                End If
     
            Next I
     
            'supprime le filtrage
            .AutoFilter
     
        End With
     
        MsgBox Chaine
     
    End Sub
    Hervé.

  3. #3
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Par défaut
    Petite précision, le code doit être collé dans un module standard du classeur "Maquette"

    Hervé.

Discussions similaires

  1. Tranche Age
    Par garfunkel dans le forum Requêtes
    Réponses: 3
    Dernier message: 09/02/2006, 17h58
  2. [Débutant]Comment faire des tranches de nombre dans une tabl
    Par Jedecouvreaccess dans le forum Access
    Réponses: 7
    Dernier message: 05/09/2005, 08h46
  3. Tranches : Référence ou copie ?
    Par JolyLoic dans le forum Général Python
    Réponses: 1
    Dernier message: 11/08/2005, 16h10
  4. tranche de tableaux
    Par parsy dans le forum Langage
    Réponses: 1
    Dernier message: 05/08/2005, 12h16
  5. Calcul de tranches horaires
    Par zach dans le forum Algorithmes et structures de données
    Réponses: 8
    Dernier message: 02/08/2005, 08h26

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