Bonjour et merci d'avance pour celles et ceux qui prendront le temps de me lire voire de m'aider via leurs réponses.
Rien que trouver un titre parlant et explicite est une gageure !
J'ai cherché en vain la solution avec Mr Google, aussi je me tourne vers vous en comptant sur vos expériences.
exposé de mon problème :
Pour faire simple, j'ai un onglet qui contient une liste de quelques comptes clients que je souhaite suivre : CLI001, CLI002, CLI007 par exemple. Cette liste peut évoluer avec le temps, raison pour laquelle je ne code pas "en dur" les critères de filtre dans la macro.
Dans un 2ème onglet, j'ai un listing de lignes de commandes avec dans une colonne tous les comptes clients concernés (et il y en a bien plus que dans mon 1er onglet).
Je cherche par macro à ne conserver dans mon 2ème onglet que les lignes qui sont consacrées aux clients du 1er onglet (et donc supprimer toutes les autres).
Sous excel 2007, j'ai résolu le souci en quelques étapes : je créé une matrice qui mémorise les données de l'onglet 1, j'applique comme critère de filtre cette matrice au filtre élaboré de l'onglet 2, je colore les données obtenues, je défiltre puis refiltre sur les données sans couleur, les sélectionne et je les supprime, je re-défiltre et le tour est joué.
Ce n'est peut être pas très élégant comme méthode, mais ça a l'avantage de fonctionner (en fait, je n'ai pas trouvé comment on peut dire dans la macro un truc du genre "criteria <> matrice", et c'est donc la solution de contournement que j'ai imaginé).
Mon souci, c'est que la majorité de mes utilisateurs est sous excel 2003 et les filtres élaborés sur les couleurs, excel 2003 ne connait pas... et il est bien entendu hors de question d'acquérir des licences 2007 supplémentaires.
Je suis preneur de toutes vos solutions qui me permettront d'aboutir, via une macro, au résultat souhaité.
Pour le moment, sous excel 2007, ma macro (épurée de tout le superflu), c'est ça:
D'avance merci
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 sub RasLeBol() Dim tableau(1 To 100) As Variant Sheets("clients à maintenir").Select Range("A1").Select fin_ligne = Cells(Rows.Count, 1).End(xlUp).Row For i = 1 To fin_ligne tableau(i) = Cells(i, 1) Next i Sheets("orderbook_A saisir").Select Range("E1").Select Selection.AutoFilter ActiveSheet.Range("$A$5:$BO$500").AutoFilter Field:=2, Criteria1:=tableau, Operator:=xlFilterValues Range("b2:x" & Range("b65536").End(xlUp).Row).SpecialCells(xlCellTypeVisible).EntireRow.Select With Selection.Font .Color = -16776961 .TintAndShade = 0 End With ActiveSheet.Range("$A$5:$BO$500").AutoFilter Field:=2, Operator:=xlFilterAutomaticFontColor Range("B2:x" & Range("b65536").End(xlUp).Row).SpecialCells(xlCellTypeVisible).EntireRow.Delete Selection.AutoFilter Field:=2 End Sub
Partager