Bonjour à tous et tout d'abord merci de votre aide dans ma quête du code ^^
J'ai lu pas mal de post ici ou là qui m'ont bien aidé !
Pour vous résumer mon projet, il s'agit d'un onglet d'opérations qui sont classés selon des critères en colonne (type, client, etc).
L'idée est de produire à partir de cet onglet plusieurs tableaux avec des mises en forme différente. Le projet est simple mais assez complexe au final pour quelqu'un qui découvre les macros !
En clair, ma première étape, est de rechercher via un filtre élaboré les données répondant à 2 critères croisés et les coller dans un autre onglet
- soit tout en haut si l'onglet est vide
- soit 2 lignes en dessous du précédent bloc de données
Voilà le code en l'état:
Code:
If Sheets("2011.test").Cells.Find("*") Is Nothing Then
ligne_collage = Sheets("2011.test").Range("A1:M1")
Else:
plage1 = Sheets("2011.test").UsedRange.End(xlDown).Row.Offset(2, 0)
plage2 = Sheets("2011.test").Range("A65536:M65536")
ligne_collage = Range("plage1 plage2")
End If
Sheets("Données").Range("A1:M65536").AdvancedFilter Action:=xlFilterCopy, _
CriteriaRange:=Sheets("Données").Range("P1:Q2"), CopyToRange:=ligne_collage, Unique:=False
Si c'est vide, alors, la plage pour le collage du filtre élaboré sera la première ligne.
Sinon, c'est l'intersection de deux zones (j'ai pas su faire autrement pour sélectionner 2 lignes en dessous de mon usedrange ...).
Le problème, mon xlFilterCopy me renvoie rien ("référence non valide").
Je pense que j'ai du foiré une syntaxe quelque par mais où
Re : Utilisation plage de données nommées pour un filtre élaboré
Le pire, c'est qu'en testant :
Code:
Sub Copiecolle()
' Macro qui copie colle les affaires depuis l'onglet "données"
'If Sheets("2011.test").Cells.Find("*") Is Nothing Then
'ligne_collage = Sheets("2011.test").Range("A1:M1")
'Else:
'plage1 = Sheets("2011.test").UsedRange.End(xlDown).RowOffset(2, 0)
'ligne_collage = Range("plage1 plage2")
'End If
Sheets("Données").Range("A1:M65536").AdvancedFilter Action:=xlFilterCopy, _
CriteriaRange:=Sheets("Données").Range("P1:Q2"), CopyToRange:=Sheets("2011.test").Range("A1:M1"), Unique:=False
End Sub
ça marche ... donc y'a bien une erreur dans la façon dont j'appelle avec le CopyToRange mon Range ...