XL 2016 Archivage de lignes sous condition

Oddoneju

XLDnaute Nouveau
Bonjour,

Je souhaite archiver automatiquement des lignes contenant le terme "Terminé" dans une colonne définissant l'état de la ligne (déplacement d'une feuille 1 dans une feuille 2).
Le fichier est simple, j'ai mes en-têtes en ligne 1 sur une dizaine de colonnes, les en-têtes de la feuille 1 et 2 sont les mêmes.
J'ai essayé de modifier des codes retrouvés sur des forums mais je n'ai pas réussi à l'adapter à mon besoin.

Merci de votre aide.
 

Staple1600

XLDnaute Barbatruc
Re

Un petit fichier exemple fourni par tes soins éviterait à chacun de ceux qui voudraient te répondre de récréer un fichier (qui est déjà au chaud sur ton disque dur)

Cela accéléra aussi l'arrivée de solutions à ta question

Pour joindre un fichier -> cliquer sur [Joindre un fichier]
 

Staple1600

XLDnaute Barbatruc
Re

Ca devrait mieux marché ainsi
Enrichi (BBcode):
Private Sub Worksheet_Change(ByVal Target As Range)
  Dim Ligne As Long
  If Target.Count > 1 Then Exit Sub
  If Target.Column <> 1 Then Exit Sub
  If Target = "Terminé" Then
    With Sheets("Feuil2")
      Ligne = Application.Max(.Cells(.Rows.Count, 1).End(xlUp).Row, 2) + 1
      .Cells(Ligne, 2).Resize(, 12).Value = Target.Offset(, -9).Resize(, 12).Value
    End With
    Rows(Target.Row).Delete
  End If
End Sub
PS: Ce code ne doit pa être dans un module standard
Mais dans le code de la feuille
(C'est le cas mais il est aussi dans le module1 que tu peux donc supprimer)
 

Oddoneju

XLDnaute Nouveau
Merci pour votre rapidité.
J'ai une erreur sur la formule (cf capture).
Je vais faire le test demain sur le fichier réel, est-ce qu'il y a des paramètres à modifier en fonction du nombre de colonnes ?
 

Pièces jointes

  • Capture d’écran 2023-09-18 à 22.41.16.png
    Capture d’écran 2023-09-18 à 22.41.16.png
    290.7 KB · Affichages: 4

Staple1600

XLDnaute Barbatruc
Re

Cela devrait fonctionner
(cela fonctionne sur mon PC. Je viens de tester)
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
  Dim Ligne As Long
  If Target.Count > 1 Then Exit Sub
  If Target.Column <> 1 Then Exit Sub
  If Target = "Terminé" Then
    With Sheets("Feuil2")
      Ligne = .Cells(Rows.Count, 1).End(xlUp).Row + 1
      .Cells(Ligne, 1).Resize(, 5).Value = Target.Resize(, 5).Value
    End With
    Rows(Target.Row).Delete
  End If
End Sub

Conseil en passant
Précise dans ton profil, ta version Excel
Et quand tu créés une discussion, indique en préfixe la version Excel utilisée
(donc pour toi : XL pour Mac )
 

Discussions similaires

Statistiques des forums

Discussions
312 213
Messages
2 086 302
Membres
103 174
dernier inscrit
OBUTT