Copier coller selon valeurs dans un autre classeur

Bonjour à tous,

J'aurai besoin d'un petit coup de pouce. Suite à diverses modifications, j'ai cette macro (récupérer sur un autre fil) qui me permet de copier coller certaines colonnes d'une feuille vers une autre et qui marche très bien.

Private Sub Worksheet_Change(ByVal Target As Range)
Dim Col As Integer
Col = Target.Column
If Col = 2 Or Col = 5 Or Col = 9 Or Col = 10 Or Col = 26 Or Col = 27 Then
Columns("K").AutoFilter Field:=1, Criteria1:="Pret"[/b]
Me.Range("B:B,E:E,I:J, Z:AA").Copy Destination:=Sheets("Feuil2").Range("A1")
Application.CutCopyMode = False
End If
End Sub

J'ai trois questions.

J'ai rajouté un critère de filtre mais je n'arrive pas à obtenir le filtre mon critère Pret.

Ensuite, j'aimerai réaliser la même opération mais en collant mes colonnes dans un autre classeur. Comment faire évoluer mon code en ce sens?

Enfin, est-il possible de faire le copier coller mais sans la mise en forme de ma première feuille (pas de couleurs dans les cellules ni de bordures)?

Merci à vous

De mémoire, la syntaxe de cette instruction est du type :

Range("MaPlage").AutoFilter Field:=NumColonne, Criteria1:="Pret"

MaPlage correspond à la zone où s'applique l'ensemble du filtre (= votre base de données) et Field:= correspond au numéro de colonne sur lequel s'applique la condition à vérifier (ici colonne K --> 11).

Attention, pour ne copier que les cellules filtrées, il faut ajouter une propriété spécifique à la plage copiée :

Range("MaPlage").Copy
'Devient
Range("MaPlage").SpecialCells(xlCellTypeVisible).Copy

Enfin, pour ne copier que les valeurs, c'est un collage spécial :

Range("PlageDestination").PasteSpecial(xlPasteValues)

Pour préciser un classeur et où une feuille spécifique :

Workbooks("NomClasseur.extension").Worksheets("NomFeuille").Range("AdressePlage")

Merci d'avoir pris le temps de détailler autant.

Je bute malgré tout.

J'ai fait un test et le filtre s'active à chaque cellule saisie dés lors que ma première ligne est saisie avec le critère Prêt.

Private Sub Worksheet_Change(ByVal Target As Range)
Dim Col As Integer
Col = Target.Column
If Col = 2 Or Col = 3 Or Col = 5 Then
Range("A:K").AutoFilter Field:=11, Criteria1:="Prêt"
Me.Range("B:B,E:E,I:J,Z:AA").SpecialCells(xlCellTypeVisible).Copy Destination:=Sheets("Feuil2").Range("A1").PasteSpecial(xlPasteValues)
Application.CutCopyMode = False
End If
End Sub

Enfin où placer ma ligne dédiée au workbook?

Cordialement

J'ai fait un test et le filtre s'active à chaque cellule saisie dés lors que ma première ligne est saisie avec le critère Prêt.

Votre macro est placée dans une procédure évenementielle (Worksheet_Change) et se déclenche donc automatiquement à chaque modification dans la feuille concernée. Selon votre besoin, elle peut aussi être associée à un bouton ou restreinte à une plage spécifique.

Enfin où placer ma ligne dédiée au workbook?

Comme indiqué dans mon 1er post :

Pour préciser un classeur et où une feuille spécifique :

Workbooks("NomClasseur.extension").Worksheets("NomFeuille").Range("AdressePlage")

J'ai testé quelque chose comme ça mais ça ne fonctionne pas...

Sub Macro2()
'

Columns("K").AutoFilter Field:=1, Criteria1:="Prêt"
Union(Columns("B"), Columns("I:J"), Columns("Z:AA")).SpecialCells(xlCellTypeVisible).Copy Workbooks("Test.xlsm").Worksheets("Feuil2").Range("A1").PasteSpecial(xlPasteValues)
End Sub

Je bute clairement...

J'ai testé quelque chose comme ça mais ça ne fonctionne pas...

Sub Macro2()
'

Columns("K").AutoFilter Field:=1, Criteria1:="Prêt"
Union(Columns("B"), Columns("I:J"), Columns("Z:AA")).SpecialCells(xlCellTypeVisible).Copy Workbooks("Test.xlsm").Worksheets("Feuil2").Range("A1").PasteSpecial(xlPasteValues)
End Sub

Je bute clairement...

Je ne comprend pas pourquoi vous faites un retour en arrière par rapport à votre code précédent... Sur quoi est-ce que vous butez ?

Pour commenter un peu ce code :

Sub Macro2()

Columns("K").AutoFilter Field:=1, Criteria1:="Prêt" 'à revoir complètement, on revient au point de départ avec cette ligne
Union(Columns("B"), Columns("I:J"), Columns("Z:AA")).SpecialCells(xlCellTypeVisible).Copy 'Pourquoi utiliser Union() et qu'est ce qui ne convenait pas dans la précédente syntaxe ?
Workbooks("Test.xlsm").Worksheets("Feuil2").Range("A1").PasteSpecial(xlPasteValues) 'Cette instruction me semble correcte
End Sub

Attention, le classeur "Test.xlsm" doit être ouvert pour que cela fonctionne...

Merci pour ces remarques,

J'ai repris le bouton de commande existant et donc ai adapté en conséquence avec l'ancien code pour le copier coller vers une feuille.

Sub Macro1()

Range("A:AA").AutoFilter Field:=1, Criteria1:="Prêt" 'ici message d'erreur la méthode autofilter de la classe range a échoué
Range("B:B,I:J,Z:AA").SpecialCells(xlCellTypeVisible).Copy Workbooks("Test.xlsm").Worksheets("Feuil2").Range("A1").PasteSpecial(xlPasteValues)
End Sub

Mais cela ne fonctionne pas (et le classeur test est bien ouvert).

Je ne comprend toujours pas pourquoi vous avez changé cette ligne...

Range("A:K").AutoFilter Field:=11, Criteria1:="Prêt"

Vous m'aviez bien conseillé comme synthaxe?

Range("MaPlage").AutoFilter Field:=NumColonne, Criteria1:="Pret"

Vous m'aviez bien conseillé comme synthaxe?

Range("MaPlage").AutoFilter Field:=NumColonne, Criteria1:="Pret"

D'après le reste de la macro, on comprend que les lignes qui vous intéressent sont dans un large tableau :

Range("B:B,I:J,Z:AA")

Le filtre doit donc s'appliquer à l'ensemble du tableau, sur la base d'un élément spécifique de la colonne K.

MaPlage correspond donc à l'adresse du tableau complet...

AU risque de paraître idiot mais ça me permet de bien comprendre et d'acquérir un vocabulaire commun, quand vous parlez de l'adresse du tableau, je le traduis comme ceci

Range("A1:A2000").AutoFilter Field:=11, Criteria1:="Pret"

ou comme ceci

Range("Feuil1").AutoFilter Field:=11, Criteria1:="Pret"

"A1:A2000" --> Adresse de plage

"Feuil1"--> Nom de feuille/onglet

Sheets("Feuil1").Range("A1:A2000") 'correspond à la plage A1-->A2000 de la feuille "Feuil1"

Bonjour Pedro22,

Je viens de revoir mon code en prenant en compte vos remarques.

Option Explicit

Sub Macro1()

Sheets("Feuil1").Range("A1:AA2000").AutoFilter Field:=1, Criteria1:="Pret"
Workbooks("Classeur1").Worksheets("Feuil1").Range("B:B,I:J,Z:AA").Copy Workbooks("Test.xlsm").Worksheets("Feuil2").Range("A1")

End Sub

En tant que tel ça marche très bien.

Maintenant .PasteSpecial(xlPasteValues) me provoque une erreur de type "Erreur d'éxécution "1004": Impossible de lire la propriété PasteSpecial de la classe Range".

Qu'est-ce qui peut générer cette erreur?

Merci d'avance

Bonjour,

A tester avec :

.PasteSpecial Paste:=xlPasteValues

Ce qui donnerai :

Sub Macro1()

With ThisWorkbook.Sheets("Feuil1")
    .Range("A1:AA2000").AutoFilter Field:=1, Criteria1:="Pret" 'Il me semble que ce critère est filtré en colonne K, donc ce serait Field:=11
    .Range("B:B,I:J,Z:AA").Copy 'A mon avis, toutes les cellules sont copiées, et pas seulement celles filtrées...
    Workbooks("Test.xlsm").Sheets("Feuil2").Range("A1").PasteSpecial Paste:=xlPasteValues
    Application.CutCopyMode = False
End With

End Sub

Voilà un code qui me semble plus adapté :

Sub CopieConditionnelle()

On Error GoTo MsgErreur

With ThisWorkbook.Sheets("Feuil1")
    .Range("A1").CurrentRegion.AutoFilter Field:=11, Criteria1:="Pret" 
    .Range("B:B,I:J,Z:AA").SpecialCells(xlCellTypeVisible).Copy 
    Workbooks("Test.xlsm").Sheets("Feuil2").Range("A1").PasteSpecial Paste:=xlPasteValues 'Test.xlsm doit être ouvert
    Application.CutCopyMode = False
End With

Exit Sub
MsgErreur:
MsgBox "L’exécution à rencontrée une erreur. Vérifiez que le fichier de destination est ouvert !"

End Sub

Effectivement tout fonctionne à merveille.

Par contre, même si je suis totalement d'accord avec la remarque sur Field=11, ça ne fonctionne qu'en laissant Field=1.

Merci beaucoup pour l'aide apportée !

Effectivement tout fonctionne à merveille.

Par contre, même si je suis totalement d'accord avec la remarque sur Field=11, ça ne fonctionne qu'en laissant Field=1.

Merci beaucoup pour l'aide apportée !

Content qu'on soit enfin arrivé au bout !!

Rechercher des sujets similaires à "copier coller valeurs classeur"