XL 2016 Filtrage personnalisé avec copie conditionnelle

  • Initiateur de la discussion Initiateur de la discussion amgue
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

amgue

XLDnaute Occasionnel
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

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

- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
25
Affichages
14 K
Retour