Selectionner en automatique les lignes d'un reseultat d'un filtr

Fermé
hamidmarseille - 23 févr. 2017 à 10:28
 hamidmarseille - 23 févr. 2017 à 15:39
Bonjour,

j'ai fichier Excel qui contient plusieurs ligne en couleurs, cependant je veux écrire un code qui permet de détecter les lignes de couleur grises les sélectionner puis les coper en suite les coller dans une nouvelle feuil que j'ai nommé Lignes de couleur grise.

pour le moment j'ai écrit ce code mais je n'arrive pas a sélectionner les lignes de couleur grise après avoir appliquer le filtre sur couleur.

Pouvez vous m'aider SVP, je suis un peu perdu :(


Sub Macro1()
'
' Macro1 Macro
'

'
    Selection.AutoFilter

    ActiveSheet.Range("$A$7:$AB$690").AutoFilter Field:=1, Criteria1:=RGB(191, _
        191, 191), Operator:=xlFilterCellColor
    Range("A17:A30").CurrentRegion.Select 'c'est cette ligne qui pose problème
    Selection.Cut
    Sheets("ligne de couleur grise").Select
    Range("A1").Select
    ActiveSheet.Paste
End Sub

6 réponses

ThauTheme Messages postés 1442 Date d'inscription mardi 21 octobre 2014 Statut Membre Dernière intervention 29 juillet 2022 160
Modifié par ThauTheme le 23/02/2017 à 10:52
Bonjour Hamid, bonjour le forum,

Je te donne une méthode que j'utilise sans être sûr que ce soit la meilleure. Il te faut juste adapter la plage PL à ton cas...

Sub Macro1()
Dim PL As Range 'déclare la variable PL (PLage)
Dim PLV As Range 'déclare la variable PL (PLage Visible)

Selection.AutoFilter
Set PL = Range("A1").CurrentRegion 'à adapter à ton cas, c'est l'ensemble des cellules éditées
ActiveSheet.Range("$A$7:$AB$690").AutoFilter Field:=1, Criteria1:=RGB(191, _
191, 191), Operator:=xlFilterCellColor
Set PLV = PL.SpecialCells(xlCellTypeVisible) 'définit las plage PLV des cellules visibles de la plage PL
PLV.Copy Sheets("ligne de couleur grise").Range("A1") 'copie la plage PLV dans la cellule A1 de l'onglet "ligne de couleur grise"
PLV.EntireRow.Delete 'supprime les lignes entières de la plage PLV
End Sub

À plus,
ThauTheme
0
hamidmarseille
23 févr. 2017 à 11:22
Bonjour Thautheme,

D'abord je te remercie pour ta réponse rapide :)
Sinon le code il marche très bien bien, le seule soucis, c'est que moi mes entité sont a la ligne 7, le résultat de mon filtre est de 17 à 30

j'ai mis ma plage PL comme ça! Set PL = Range("A7") du coup il copie la ligne 7 + le résultat du filtre (du 17 à 30) alors que je juste le résultat c'est a dire les ligne grise. les entités sont de couleur violé.
0
ThauTheme Messages postés 1442 Date d'inscription mardi 21 octobre 2014 Statut Membre Dernière intervention 29 juillet 2022 160
23 févr. 2017 à 14:35
Re,

Sans fichier en pièce jointe (voir avec https://www.cjoint.com/ par exemple) difficile de coder juste. Peut-être comme ça :

Sub Macro1()
Dim PL As Range 'déclare la variable PL (PLage)
Dim PLV As Range 'déclare la variable PL (PLage Visible)

Selection.AutoFilter
Set PL = Range("A7").CurrentRegion 'à adapter à ton cas, c'est l'ensemble des cellules éditées
Set PL=PL.Offset(1, 0).Resize(PL.Rows.Count - 1, PL.Columns.Count)
ActiveSheet.Range("$A$7:$AB$690").AutoFilter Field:=1, Criteria1:=RGB(191, _
191, 191), Operator:=xlFilterCellColor
Set PLV = PL.SpecialCells(xlCellTypeVisible) 'définit las plage PLV des cellules visibles de la plage PL
PLV.Copy Sheets("ligne de couleur grise").Range("A1") 'copie la plage PLV dans la cellule A1 de l'onglet "ligne de couleur grise"
PLV.EntireRow.Delete 'supprime les lignes entières de la plage PLV
End Sub

0
hamidmarseille
23 févr. 2017 à 14:54
Re,

En effet, la oui ça marche très bien. c'est exactement ça.

il reste un seul soucis c'est que lorsque y'a de nouvelle lignes grise et que j'utilise la macro pour les coller dans la feuil "Ligne de couleur grise" ben ca l'a colle dans la ligne 2 en la remplaçant par cette nouvelle ligne.

du coup je cherche un moyen de coller les nouvelles lignes dans les ligne vide et ne rien remplacer. je ne sais pas si je suis claire dans cette question

Je te remercie d'avance pour ton aide. c'est très gentil
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
ThauTheme Messages postés 1442 Date d'inscription mardi 21 octobre 2014 Statut Membre Dernière intervention 29 juillet 2022 160
23 févr. 2017 à 15:12
Re,

Ce code devrait convenir :

Sub Macro1()
Dim PL As Range 'déclare la variable PL (PLage)
Dim PLV As Range 'déclare la variable PL (PLage Visible)
Dim DEST As Range 'déclare la varible DEST (cellule de DESTination)

Selection.AutoFilter
Set PL = Range("A7").CurrentRegion 'à adapter à ton cas, c'est l'ensemble des cellules éditées
Set PL = PL.Offset(1, 0).Resize(PL.Rows.Count - 1, PL.Columns.Count)
ActiveSheet.Range("$A$7:$AB$690").AutoFilter Field:=1, Criteria1:=RGB(191, _
191, 191), Operator:=xlFilterCellColor
Set PLV = PL.SpecialCells(xlCellTypeVisible) 'définit las plage PLV des cellules visibles de la plage PL
'définit la cellule de destination DEST (A1 si A1 est vide, sinon la première ligne vide de la colonne A de l'onglet "ligne de couleur grise"
Set DEST = IIf(Sheets("ligne de couleur grise").Range("A1").Value = "", Sheets("ligne de couleur grise").Range("A1"), Sheets("ligne de couleur grise").Cells(Application.Rows.Count, "A").End(xlUp).Offset(1, 0))
PLV.Copy DEST 'copie la plage PLV dans la cellule de destination DEST
PLV.EntireRow.Delete 'supprime les lignes entières de la plage PLV
End Sub

0
hamidmarseille
23 févr. 2017 à 15:35
Finalement c'est ton programme qui fonctionne mieux. le mien il est bisard parfois il marche parfois non.

Encore un grand merci de m'avoir aider. c'est trop trop gentille. :) :) :)
0
hamidmarseille
23 févr. 2017 à 15:17
Re
finalement j'ai trouvé il suffit d'ajouter End(xlDown).Offset(1, 0)
a l'avant dernière ligne.
Meri encore a tous pour votre aide ;)
voici le bon code dans son intégralité.

Sub Macro1()
Dim PL As Range 'déclare la variable PL (PLage)
Dim PLV As Range 'déclare la variable PL (PLage Visible)

Selection.AutoFilter
Set PL = Range("A7").CurrentRegion 'à adapter à ton cas, c'est l'ensemble des cellules éditées
Set PL = PL.Offset(1, 0).Resize(PL.Rows.Count - 1, PL.Columns.Count)
ActiveSheet.Range("$A$7:$AB$690").AutoFilter Field:=1, Criteria1:=RGB(191, _
191, 191), Operator:=xlFilterCellColor
Set PLV = PL.SpecialCells(xlCellTypeVisible) 'définit las plage PLV des cellules visibles de la plage PL
PLV.Copy Sheets("ligne de couleur grise").Range("A2").End(xlDown).Offset(1, 0) 'copie la plage PLV dans la cellule A1 de l'onglet "ligne de couleur grise"
'PLV.EntireRow.Delete 'supprime les lignes entières de la plage PLV
End Sub

0
ThauTheme Messages postés 1442 Date d'inscription mardi 21 octobre 2014 Statut Membre Dernière intervention 29 juillet 2022 160
23 févr. 2017 à 15:30
Non, je ne te conseille pas ce code car si A3 est vide ça va planter. Je t'ai proposé à peu près la la même chose mais je te conseille ma manière qui part de la dernière ligne et remonte...
0
hamidmarseille > ThauTheme Messages postés 1442 Date d'inscription mardi 21 octobre 2014 Statut Membre Dernière intervention 29 juillet 2022
23 févr. 2017 à 15:39
Oui tout a fait tu as raison. le mien il plante. par contre avec ton code il est parfait. Merci encore
0