XL 2016 Filtrage personnalisé avec copie conditionnelle

amgue

XLDnaute Junior
Bonjour à tous,

Je souhaite mettre en place un filtre personnalisé pour la plage A1:E8 en fonction d'une plage de dates spécifiée.
Les cellules résultantes du filtre, seront copiées dans la plage I5:N5 en utilisant la fonction Resize.

Cependant, voici les conditions à respecter lors de la copie :

  • Colonne I : Copier depuis [G2]
  • Colonne J : Copier depuis [G5]
  • Colonne K : Copier depuis la Colonne B (Nom) / Plage1
  • Colonne L : Copier depuis la Colonne E (%) / Plage2
  • Colonne M : Copier depuis [G8] multiplié par la Colonne E (%)
  • Colonne N : Appliquer une formule SOMMEPROD
Merci pour votre aide.
 

Pièces jointes

  • Filtrage personnalisé avec copie conditionnelle.xlsm
    18 KB · Affichages: 8

amgue

XLDnaute Junior
Bonjour gbinforme,

Voici un essai :

VB:
Option Explicit

Sub RecopiePlageFiltrée()

    Dim derLigA As Long
    Dim derLigI As Long
    Dim plgSource As Range
    Dim plgFiltree As Range
    '
    ' Desactiver le filtrage s'il existe
    AutoFilter = False

    'Récupérer la derniere ligne dans Tableau1 colonne A
    derLigA = Cells(Cells.Rows.Count, "A").End(xlUp).Row

    'Récupérer la derniere ligne dans Tableau2 colonne I
    derLigI = Cells(Cells.Rows.Count, "I").End(xlUp).Row

    'Définir la plage source
    Set plgSource = Range("A" & derLigA & ":E" & derLigI)

    'Appliquer un filtre sur la plage source
    plgSource.AutoFilter

    plgSource.AutoFilter Field:=1, Criteria1:= _
                         ">=" & [G2], Operator:=xlAnd, Criteria2:="<=" & [G5]
    
    'Récupérer le resultat du filtrage
    plgFiltree = plgSource.Offset(1).SpecialCells(xlCellTypeVisible)
    
    
    'Atrribution des valeurs du Tableau2
    
    'I = G2 : DateDébut
    Range("I" & derLigI).Resize(plgFiltree.Rows.Count) = [G2]
    'J = G5 : DateFin
    Range("J" & derLigI).Resize(plgFiltree.Rows.Count) = [G5]
    'K = B : Nom
    Range("K" & derLigI).Resize(plgFiltree.Rows.Count) = plgFiltree.Column(1)
    'L = E : %
    Range("L" & derLigI).Resize(plgFiltree.Rows.Count) = plgFiltree.Column(5)
    'M = Formule = G8 * L : Gain périodique
    Range("M" & derLigI).Resize(plgFiltree.Rows.Count) = [G2] * Range("L" & derLigI).Resize(plgFiltree.Rows.Count) 'plgFiltree.Column(1)
    'N = Formule = =SOMMEPROD(($K$2:$K2=$K2)*($M$2:$M2)): Gain total individuel
    Range("M" & derLigI).Resize(plgFiltree.Rows.Count).Formula = "SUMPRODUCT(($K$2:K" & derLigI & ") * ($M$2:$M" & derLigI & "))"
 
End Sub
 

Pièces jointes

  • Filtrage personnalisé avec copie conditionnelle_(2).xlsm
    19.9 KB · Affichages: 3

Discussions similaires

Réponses
2
Affichages
3 K

Statistiques des forums

Discussions
312 207
Messages
2 086 232
Membres
103 161
dernier inscrit
Rogombe bryan