Archiver des lignes d'un tableau

Bonjour,

je me tourne vers vous pour m'aider dans la création d'un tableau. j'aimerais savoir s'il serait possible d'archiver dans une autre feuille une ligne entière d'un tableau lorsqu'une date est inscrite dans une cellule. dans mon exemple il faudrait que lorsque j'écris la date de fin en B2 la totalité de la ligne 2 du tableau disparait de la feuille effectif et s'insère dans un tableau identique mais dans la feuille archive.

merci de votre aide

Bonjour,

Ci-joint une proposition VBA. Ci-après le code.

Quand vous modifiez une valeur dans la colonne B, la ligne est copiée dans la feuille Archive.

Attention si vous remodifiez la date cela crée une nouvelle ligne dans le tableau Archive.

Private Sub Worksheet_Change(ByVal Target As Range)
  Dim KeyCells As Range

  If Target.Value2 = vbNullString Then Exit Sub
  ' The variable KeyCells contains the cells that will
  ' cause an alert when they are changed.
  Set KeyCells = Range(Range("B2"), Range("B2").End(xlDown))

  If Not Application.Intersect(KeyCells, Range(Target.Address)) Is Nothing Then
    Target.CurrentRegion.Rows(Target.Row).Copy
    With ThisWorkbook.Worksheets("Archive")
      .Range("B" & .Rows.Count).End(xlUp).Offset(1, 0).PasteSpecial xlPasteAll
    End With
    Application.CutCopyMode = False
  End If
End Sub

bonsoir saboh12617,

merci beaucoup pour le code, par contre est-il possible que la ligne qui "se fait archiver" disparaisse de la feuille effectif et n'apparaisse que sur la feuille archive?

merci

Bonjour,

Votre fichier joint est bâclé :

Le tableau source est renommé de façon fantaisiste. De manière informelle il est généralement admis de les tableaux structurés Excel sont renommés avec le préfixe "T" ou "t" : Vous semblez l'ignorer ?

Votre feuille Cible est vide, Non formatée.

Par suite mon classeur est tout aussi baclé et la feuille cible non formatée. De plus je n'ai pas utilisé les possibilité des Tableaux Structurés conventionnels.

Néanmoins l'ensemble fonctionne correctement si vous entrez une date dans la colonne 2 de la feuille "Effectif"

Nota : La plage N12:U13 fusionnées est contigüe à votre tableau. Ce qui est contraire aux spécifications courantes de ces tableaux. Je ne peux garantir que cela marchera très longtemps... A l'avenir postez des classeurs fonctionnels sinon ne vous étonnez pas de recevoir des réponses tout aussi baclées.

A+

Merci de votre aide galopin,

comme vous pouvez le voir je suis un jeune membre donc oui c est très possible que mon fichier joint soit bâclé je fais grâce à l'aide précieuse des forums des tableaux qui me sont néanmoins très utiles même s'ils sont "impropres" pour des puristes. en tout cas un grand merci pour votre aide la ligne s'archive tout a fait comme je l'imaginais par contre est il possible de me retranscrire le code que je le mette sur le tableau original ou si vous pouvez le mettre directement a partir du premier tableau du post car il y a des éléments qui ne fonctionnent plus par rapport au tableau d'origine...

Merci

A+

Un code est conçu pour être utilisé sur un tableau identique ou les noms des feuilles et ceux des Tableaux doivent être identiques. Les adresses des cellules et des tableaux également doivent également être strictement identiques. Seules les données à l'intérieu des feuilles peuvent être modifiées pour préserver l'anonymat. Mais pour le reste tout cela n'est pas transposable sur un autre tableau.

Donc à l'avenir pas de mauvaise copies bâclées pour du code VBA car vous nous faites travailler pour RIEN !

A+

Bonjour, désolé j'avais oublié la suppression de ligne. Dans le code ajouter

Target.CurrentRegion.Rows(Target.Row).ClearContents

A la fin du bloc if, comme suit :

Private Sub Worksheet_Change(ByVal Target As Range)
  Dim KeyCells As Range

  If Target.Value2 = vbNullString Then Exit Sub
  ' The variable KeyCells contains the cells that will
  ' cause an alert when they are changed.
  Set KeyCells = Range(Range("B2"), Range("B2").End(xlDown))

  If Not Application.Intersect(KeyCells, Range(Target.Address)) Is Nothing Then
    Target.CurrentRegion.Rows(Target.Row).Copy
    With ThisWorkbook.Worksheets("Archive")
      .Range("B" & .Rows.Count).End(xlUp).Offset(1, 0).PasteSpecial xlPasteAll
    End With
    Application.CutCopyMode = False
    Target.CurrentRegion.Rows(Target.Row).ClearContents
  End If
End Sub

Je vous conseille de décaler un peu votre second tableau, plus à droite de 1 ou 2 colonnes si possible. Sinon je vois que l'extension peut aller un peu trop loin.

Sinon en effet les remarques de galopin sont primordiales, si vos fichiers/feuilles/tableaux/cellules n'ont pas leurs "vrais" noms, alors oui vous risquez fort d'avoir un code non fonctionnel. C'est assez compliqué pour nous de faire un code qui s'adapte sans connaitre en détails le projet.

Merci beaucoup Saboh12617 ca fonctionne très bien merci également Galopin01 pour les conseils, j'essayerais de les appliquer .

bonne journée

Rechercher des sujets similaires à "archiver lignes tableau"