Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

XL 2016 filtrer, copier et coller les données avec la macro

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 !

GUEWOU

XLDnaute Nouveau
bonjour,
je sollicite votre aide pour compléter le code VBA que j'ai commencé. en fait dans le fichier ci-joint, je souhaite extraire les 3 caractères à partir de la gauche des données de la colonne "B" et reporter le résultat sur la même ligne de la colonne "D". notre code gère seulement la ligne 2 pourtant je veux gérer toutes les lignes.
en suite je veux filtrer dans la colonne "D" toutes les valeurs "321" et "326"
en fin je veux copier à partir de colonne "A" toutes les valeurs filtrées et les coller dans la feuille "Agence 321 et 326 a partir de la cellule "A2".

je compte sur votre bonne compréhension
 

Pièces jointes

Bonjour Guewou,
( Attention PJ modifiée (V2) car macro incomplète dans V1 )
Une possibilité en utilisant une formule dans la bonne plage, ce qui est très rapide, avec :
VB:
Sub tri_et_filtre()
' tri_des_données Macro
    Dim f As Worksheet, Plage As Range
    Application.ScreenUpdating = False
    Set f = ThisWorkbook.Sheets("Base")
    Set Plage = f.Range("D2:D" & Cells(Rows.Count, "B").End(xlUp).Row)
    Plage.Formula = "=LEFT(B2,3)"   ' Formule en col D : =GAUCHE(B2;3)
    Plage.Value = Plage.Value       ' Supprime formule, met valeurs.
    Plage.NumberFormat = "000"      ' Met le bon format
    Set Plage = f.Range("A1:D" & Cells(Rows.Count, "B").End(xlUp).Row)
    Plage.AutoFilter                ' Pose filtres en col  A:D
    Plage.AutoFilter Field:=4, Criteria1:="=321", Operator:=xlOr, Criteria2:="=326" ' filtrage sur 321 et 326
    Sheets("Agence 321").Select
    Plage.Copy Destination:=Sheets("Agence 321").[A1]   ' Colle tableau filtré
    Plage.AutoFilter
End Sub
 

Pièces jointes

Dernière édition:
Bonjour GUEWOU, sylvanu,

Voici une solution qui utilise le filtre avancé avec cette macro dans le code de la 2ème feuille :
VB:
Private Sub Worksheet_Activate()
Dim agence1, agence2, critere As Range
agence1 = 321: agence2 = 326 'modifiables
With Sheets("Base").[A1].CurrentRegion
    Set critere = .Cells(2, .Columns.Count + 2)
    critere = "=OR(LEFT(B2,3)=""" & agence1 & """,LEFT(B2,3)=""" & agence2 & """)"
    .AdvancedFilter xlFilterCopy, critere(0).Resize(2), CopyToRange:=[A1] 'filtre avancé copié
    critere = ""
End With
Me.Name = "Agences " & agence1 & "-" & agence2 'renomme la feuille
End Sub
Elle se déclenche automatiquement quand on active la feuille.

A+
 

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
18
Affichages
595
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…