Selectionner en automatique les lignes d'un reseultat d'un filtr
hamidmarseille
-
hamidmarseille -
hamidmarseille -
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 :(
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
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...
À plus,
ThauTheme
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
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é.
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é.
Re,
Sans fichier en pièce jointe (voir avec https://www.cjoint.com/ par exemple) difficile de coder juste. Peut-être comme ça :
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
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
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
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Re,
Ce code devrait convenir :
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
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é.
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