Archiver une ligne selon condition

Bonjour à tous,

Je cherche une solution pour copier/coller une ligne de l'onglet "Dashboard" vers l'onglet "Archives" lorsque la valeur de la colonne "AD" est égale à "COMPLETE" (Excel 2016). La macro fini par supprimer la ligne archivée de l'onglet "Dashboard".

En faisant plusieurs recherches et corrections on me propose le code suivant:

Sub Groupe13_Cliquer()

Dim DashRow As Long
  Dim ArchiveRow As Long
  Dim i As Long

  DashRow = Worksheets("Dashboard").Cells(Rows.Count, 2).End(xlUp).Row
  For i = DashRow To 2 Step -1
      If Worksheets("Dashboard").Cells(i, 30).Value = "COMPLETE" Then
          ArchiveRow = Worksheets("Archives").Cells(Rows.Count, 2).End(xlUp)(2) ' Permet de vérifier le numéro de ligne cible
          Worksheets("Dashboard").Rows(i).Copy Worksheets("Archives").Cells("a" & ArchiveRow)
          Worksheets("Dashboard").Rows(i).EntireRow.Delete
      End If
  Next

End Sub

Mais j'ai une erreur à la ligne

Worksheets("Dashboard").Rows(i).Copy Worksheets("Archives").Cells("a" & ArchiveRow)

(argument ou appel de procédure incorrect).

Pouvez-vous m'aider SVP à corriger cette macro.

Merci de votre aide.

Cordialement

262dashboard-forum.xlsm (185.51 Ko)

Je vous joins le fichier sur lequel je travaille pour plus de précision.

Merci

Bonjour,

pour commencer, ta ligne ArchiveRow n'est pas correct et quand tu utilises .Cells() c'est la ligne et la colonne Ex : .Cells(Row,Column)

Donc .Cells(ArchiveRow, "A") et non pas .Cells("A" & ArchiveRow) sinon utiliser .Range("A" & ArchiveRow).

De plus attention à l'utilisation de tableau (je parle de l'Outil Excel) avec les macros car traitement des données différent.

sinon voici une proposition :

Sub Groupe13_Cliquer()

Dim DashRow As Long
  Dim ArchiveRow As Long
  Dim i As Long
  Dim plage As Range

  DashRow = Worksheets("Dashboard").Cells(Rows.Count, 2).End(xlUp).Row
  For i = DashRow To 7 Step -1
      If Worksheets("Dashboard").Cells(i, 30).Value = "COMPLETE" Then
      Set plage = Worksheets("Archives").Range("B6:B" & Cells(Rows.Count, 2).End(xlUp).Row)
          ArchiveRow = plage.SpecialCells(xlCellTypeBlanks).Cells(1, 1).Row ' Permet de vérifier le numéro de ligne cible
          Worksheets("Dashboard").Rows(i).Copy
          Worksheets("Archives").Cells(ArchiveRow, 1).PasteSpecial
          Worksheets("Dashboard").Rows(i).EntireRow.Delete
      End If
  Next

End Sub

A plus !

Braters!! Ca marche super bien!!! Après plusieurs semaines de galère. Merci beaucoup de ton aide rapide et surtout efficace.

Si je souhaite rajouter un collage avec une couleur grise des cellules, que dois-je ajouter au code?

Comment cela ?

tu souhaites copier/coller les cellules grises ou tu souhaites que les cellules copiées/collées deviennent grises ?

Les collées deviennent grises (archivées et grisées)

Je viens de tester un truc. Lorsque j'archive plusieurs lignes et que le tableau est rempli, la macro commence à les archiver en dessous de la dernière du tableau: il ne rajoute pas une ligne après la dernière dans le tableau mais il la colle en dehors du tableau.

sans titre

Bonjour,

Déjà, voilà le code pour griser les cellules copiées dans "archives" :

Sub Groupe13_Cliquer()

Dim DashRow As Long
  Dim ArchiveRow As Long
  Dim i As Long
  Dim plage As Range

  DashRow = Worksheets("Dashboard").Cells(Rows.Count, 2).End(xlUp).Row
  For i = DashRow To 7 Step -1
      If Worksheets("Dashboard").Cells(i, 30).Value = "COMPLETE" Then
      Set plage = Worksheets("Archives").Range("B6:B" & Cells(Rows.Count, 2).End(xlUp).Row)
          ArchiveRow = plage.SpecialCells(xlCellTypeBlanks).Cells(1, 1).Row ' Permet de vérifier le numéro de ligne cible
          Worksheets("Dashboard").Rows(i).Copy
          Worksheets("Archives").Cells(ArchiveRow, 1).PasteSpecial
          Worksheets("Archives").Range("B" & ArchiveRow & ":AD" & ArchiveRow).Interior.ColorIndex = 48
          Worksheets("Dashboard").Rows(i).EntireRow.Delete
      End If
  Next

End Sub

Oui cela ne m'étonnes pas, mais comme je te l'ai dit, je déconseille personnellement l'utilisation de "Tableau" avec des macros car celui ci réagit différemment. Et je ne sais pas comment coder ceci.

N'hésite pas à clore ce sujet et à en ouvrir un nouveau si tu veux une réponse plus rapide par d'autres personnes.

Bonne continuation.

Rechercher des sujets similaires à "archiver ligne condition"