Sélectionner en automatique les lignes d'un résultat d'un filtre

Sélectionner en automatique les lignes d'un résultat d'un filtre - VB/VBA/VBS - Programmation

Marsh Posté le 23-02-2017 à 14:03:01    

BONJOUR
 
j'ai un fichier excel qui contient plusieurs lignes colorées. j'ai écrit une macro qui permet de filtrer sur couleur grise, une  fois j'ai le résultat, elle va les sélectionner les couper puis les coller dans un feuil nommée : ligne de couleur grise.
 
ce 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 elle copie la ligne 7 (les entités) + le résultat du filtre (du 17 à 30) alors que je veux juste le résultat c'est a dire les ligne grise. les entités sont de couleur violé.
 
en suite la prochaine vois que je veux utiliser cette macro les ligne qu'elle va couper doit les coller en bas des anciennes lignes et pas remplacer.
 
quelqu'un peut m'aider SVP.

Code :
  1. Sub Macro1()
  2. Dim PL As Range 'déclare la variable PL (PLage)
  3. Dim PLV As Range 'déclare la variable PL (PLage Visible)
  4. Selection.AutoFilter
  5. Set PL = Range("A7" ).CurrentRegion 'à adapter à ton cas, c'est l'ensemble des cellules éditées
  6. ActiveSheet.Range("$A$7:$AB$690" ).AutoFilter Field:=1, Criteria1:=RGB(191, _
  7. 191, 191), Operator:=xlFilterCellColor
  8. Set PLV = PL.SpecialCells(xlCellTypeVisible) 'définit las plage PLV des cellules visibles de la plage PL
  9. PLV.Copy Sheets("ligne de couleur grise" ).Range("A1" ) 'copie la plage PLV dans la cellule A1 de l'onglet "ligne de couleur grise"
  10. PLV.EntireRow.Delete 'supprime les lignes entières de la plage PLV
  11. End Sub

Message cité 1 fois
Message édité par michel1990 le 23-02-2017 à 14:09:08
Reply

Marsh Posté le 23-02-2017 à 14:03:01   

Reply

Marsh Posté le 23-02-2017 à 15:41:51    

michel1990 a écrit :

BONJOUR
 
j'ai un fichier excel qui contient plusieurs lignes colorées. j'ai écrit une macro qui permet de filtrer sur couleur grise, une  fois j'ai le résultat, elle va les sélectionner les couper puis les coller dans un feuil nommée : ligne de couleur grise.
 
ce 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 elle copie la ligne 7 (les entités) + le résultat du filtre (du 17 à 30) alors que je veux juste le résultat c'est a dire les ligne grise. les entités sont de couleur violé.
 
en suite la prochaine vois que je veux utiliser cette macro les ligne qu'elle va couper doit les coller en bas des anciennes lignes et pas remplacer.
 
quelqu'un peut m'aider SVP.

Code :
  1. Sub Macro1()
  2. Dim PL As Range 'déclare la variable PL (PLage)
  3. Dim PLV As Range 'déclare la variable PL (PLage Visible)
  4. Selection.AutoFilter
  5. Set PL = Range("A7" ).CurrentRegion 'à adapter à ton cas, c'est l'ensemble des cellules éditées
  6. ActiveSheet.Range("$A$7:$AB$690" ).AutoFilter Field:=1, Criteria1:=RGB(191, _
  7. 191, 191), Operator:=xlFilterCellColor
  8. Set PLV = PL.SpecialCells(xlCellTypeVisible) 'définit las plage PLV des cellules visibles de la plage PL
  9. PLV.Copy Sheets("ligne de couleur grise" ).Range("A1" ) 'copie la plage PLV dans la cellule A1 de l'onglet "ligne de couleur grise"
  10. PLV.EntireRow.Delete 'supprime les lignes entières de la plage PLV
  11. End Sub



 
finalement j'ai trouvé! voici le code exacte
 

Code :
  1. Sub Macro1()
  2. Dim PL As Range 'déclare la variable PL (PLage)
  3. Dim PLV As Range 'déclare la variable PL (PLage Visible)
  4. Dim DEST As Range 'déclare la varible DEST (cellule de DESTination)
  5. Selection.AutoFilter
  6. Set PL = Range("A7" ).CurrentRegion 'à adapter à ton cas, c'est l'ensemble des cellules éditées
  7. Set PL = PL.Offset(1, 0).Resize(PL.Rows.Count - 1, PL.Columns.Count)
  8. ActiveSheet.Range("$A$7:$AB$690" ).AutoFilter Field:=1, Criteria1:=RGB(191, _
  9. 191, 191), Operator:=xlFilterCellColor
  10. Set PLV = PL.SpecialCells(xlCellTypeVisible) 'définit las plage PLV des cellules visibles de la plage PL
  11. '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"
  12. 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))
  13. PLV.Copy DEST 'copie la plage PLV dans la cellule de destination DEST
  14. PLV.EntireRow.Delete 'supprime les lignes entières de la plage PLV
  15. End Sub


Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed