Microsoft 365 VBA: Filtrer et copier les données

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 !
 

job75

XLDnaute Barbatruc
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+
 

VBA_dev_Anne_Marie

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

job75

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

VBA_dev_Anne_Marie

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

job75

XLDnaute Barbatruc
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+
 

VBA_dev_Anne_Marie

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

Statistiques des forums

Discussions
315 098
Messages
2 116 189
Membres
112 679
dernier inscrit
Yupanki