Microsoft 365 VBA: Filtrer et copier les données

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 !

VBA_dev_Anne_Marie

XLDnaute Occasionnel
Bonjour,

Ma question est simple, mais je ne trouve pas de réponse 🙂 En fait je voulais copier les données filtrées.
J'ai un tableau sur la feuille DONNEES, je souhaite filtrer ces données par un numéro et copier la sélection sur la feuille DONEES_EA et ensuite désélectionner le filtre.

Pour l'instant je n'arrive pas à copier les données, car je reçois cette erreur :
1661853944623.png


Voici mon code :

VB:
Private Sub Choix_Pol()
    Columns(4).AutoFilter Field:=1, Criteria1:="P04800"
    Range("D:T").SpecialCells(xlCellTypeVisible).Copy Sheets("DONNEES").Range("D106101")
    With Sheets("DONEES_EA")
        If .FilterMode Then .ShowAllData
    End With
End Sub

En fait, je ne sais pas comment indiquer le numéro exacte du range dans Copy Sheets("DONNEES").Range("D106101"), car je ne connais pas la position exacte du numéro dans ma table, j'ai mis "D106101" en dur.

Merci pour votre aide !
 
Bonjour VBA_dev_Anne_Marie,

Utilisez une plage délimitée pour le filtre :
VB:
Private Sub Choix_Pol()
    With Range("D1:T" & Range("D" & Rows.Count).End(xlUp).Row)
        .AutoFilter Field:=1, Criteria1:="P04800"
        .Copy Sheets("DONEES_EA").Range("D106101")
        .AutoFilter 'ôte le filtre
    End With
End Sub
Pour la cellule D106101 il faudrait faire définir sa position par la macro, qu'est-ce que c'est ?

A+
 
Bonjour VBA_dev_Anne_Marie,

Utilisez une plage délimitée pour le filtre :
VB:
Private Sub Choix_Pol()
    With Range("D1:T" & Range("D" & Rows.Count).End(xlUp).Row)
        .AutoFilter Field:=1, Criteria1:="P04800"
        .Copy Sheets("DONEES_EA").Range("D106101")
        .AutoFilter 'ôte le filtre
    End With
End Sub
Pour la cellule D106101 il faudrait faire définir sa position par la macro, qu'est-ce que c'est ?

A+
Merci, job75. La D106101 c'est la première ligne avec la donnée P04800.
 
Vous ne nous aidez pas beaucoup !

Cette macro colle sur la 1ère cellule vide en colonne D et supprime les en-têtes de colonnes :
VB:
Private Sub Choix_Pol()
    Dim dercel As Range
    Set dercel = Sheets("DONEES_EA").Range("D" & Rows.Count).End(xlUp) 'dernière cellule renseignée
    With Range("D1:T" & Range("D" & Rows.Count).End(xlUp).Row)
        .AutoFilter Field:=1, Criteria1:="P04800"
        .Copy dercel.Offset(1) 'colle sur la 1ère cellule vide
        .AutoFilter 'ôte le filtre
    End With
    If Application.CountA(dercel.Resize(, 17)) > 0 Then
        dercel.Offset(1).Resize(, 17).Delete xlUp 'supprime les en-têtes de colonnes
    Else
        dercel.Resize(, 17).Delete xlUp 'supprime la ligne vide
    End If
End Sub
 
Vous ne nous aidez pas beaucoup !

Cette macro colle sur la 1ère cellule vide en colonne D et supprime les en-têtes de colonnes :
VB:
Private Sub Choix_Pol()
    Dim dercel As Range
    Set dercel = Sheets("DONEES_EA").Range("D" & Rows.Count).End(xlUp) 'dernière cellule renseignée
    With Range("D1:T" & Range("D" & Rows.Count).End(xlUp).Row)
        .AutoFilter Field:=1, Criteria1:="P04800"
        .Copy dercel.Offset(1) 'colle sur la 1ère cellule vide
        .AutoFilter 'ôte le filtre
    End With
    If Application.CountA(dercel.Resize(, 17)) > 0 Then
        dercel.Offset(1).Resize(, 17).Delete xlUp 'supprime les en-têtes de colonnes
    Else
        dercel.Resize(, 17).Delete xlUp 'supprime la ligne vide
    End If
End Sub

Merci beaucoup Job75,
Le code marche bien, mais je voulais copier les données sur une autre feuille DONNEES_EA, je n'arrive pas à ajouter cette condition après .Copy dercel.Offset(1). En fait, mais données sont sur la feuille DONNEES et je veux les copier sur la feuille DONNEES_EA.
 
Bonjour,
mais je voulais copier les données sur une autre feuille DONNEES_EA
Alors pourquoi au post #1 vous parlez de "DONEES_EA" ?

Dans la macro utilisez la bonne orthographe un point c'est tout.

Et si vous voulez que la feuille source "DONNEES" soit précisée écrivez :
VB:
With Sheets("DONNEES").Range("D1:T" & Sheets("DONNEES").Range("D" & Rows.Count).End(xlUp).Row)
A+
 
Bonjour,

Alors pourquoi au post #1 vous parlez de "DONEES_EA" ?

Dans la macro utilisez la bonne orthographe un point c'est tout.

Et si vous voulez que la feuille source "DONNEES" soit précisée écrivez :
VB:
With Sheets("DONNEES").Range("D1:T" & Sheets("DONNEES").Range("D" & Rows.Count).End(xlUp).Row)
A+
Merci ! Au post numéro 1 j'ai dit "J'ai un tableau sur la feuille DONNEES, je souhaite filtrer ces données par un numéro et copier la sélection sur la feuille DONEES_EA et ensuite désélectionner le filtre." Il s'agit de copier-coller entre 2 feuilles.
 
- 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
12
Affichages
908
Réponses
8
Affichages
442
  • Question Question
Microsoft 365 Export données
Réponses
4
Affichages
498
  • Question Question
Microsoft 365 Question code VBA
Réponses
2
Affichages
386
Réponses
7
Affichages
720
Retour