Archivage de lignes après un filtre VBA.

  • Initiateur de la discussion Initiateur de la discussion Matthio
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Matthio

XLDnaute Nouveau
Bonjour !
Je suis actuellement en train de réaliser un planning de saisie de rendez-vous.
J'ai donc réalisé cette feuille Excel ci-jointe.

Il m'a été également démandé de réaliser un archivage des lignes au bout d'un certain temps, j'ai donc réalisé un script VBA filtrant, et n'affichant que les lignes dont la date saisie est vieille de plus de 30 jours.

Voici le script en question :
Code:
Sub Filtrer()
Dim rng As Range, c As Range, d As Range
Set rng = Range(Range("c12"), Range("c12").End(xlDown))

For Each c In rng
If Not c <= Date - 30 Then
c.EntireRow.Hidden = True
End If
Next c
End Sub
Tout ce qui précède fonctionne comme je le souhaite.

Mais c'est à cet endroit que je bûche ! 🙁
Je souhaite COUPER les lignes que le filtre me renvoit, pour les COLLER dans une seconde feuille "Archives", et cela sans supprimer les lignes déjà existantes dans la feuille "Archives".

Je ne sais pas du tout comment m'y prendre, je m'en remets donc à vous !! En espèrant avoir apporté de bonnes explications !

Cordialement,
Mathieu RICHARD.
 

Pièces jointes

Re : Archivage de lignes après un filtre VBA.

Bonjour Matthio et bienvenu sur le forum
Une proposition, simple, sans filtre:
VB:
Sub Test()
Dim i&, Sh As Worksheet
Set Sh = Sheets("Archives")
Application.ScreenUpdating = False
With Sheets("Saisie RDV")
    For i = .Cells(.Rows.Count, 9).End(3).Row To 12 Step -1
        If .Cells(i, 9) < Date - 30 Then
            .Range(.Cells(i, 2), .Cells(i, 11)).Copy Sh.Cells(Sh.Rows.Count, 1).End(3)(2)
            .Rows(i).Delete
        End If
    Next i
End With
Sh.Columns.AutoFit
End Sub

Bonjour à Mr le maire de Meschers

Cordialement
 

Pièces jointes

Re : Archivage de lignes après un filtre VBA.

Bonjour Efgé !
Je te remercie pour l'intérêt que tu portes concernant mon problème ! *Surtout que ça à l'ait tellement simple quand on voit la solution !*

Je viens de tester ce que tu m'as proposé, et cela fonctionne à moitié =X. En effet, le script s'occupe bien de couper les lignes datant de plus de 30 jours, mais lorsqu'ils tentent des les coller, il ne m'en coller qu'une seule, tout en écrasant la précédente, il y a un moyen pour éviter l'écrasement des lignes dans la feuille "Archives" ? Comme une sorte d'incrémentation, qui permettra de garder l'ensemble des lignes copier en archive.

Cordialement,
Mathieu RICHARD.
 
Re : Archivage de lignes après un filtre VBA.

Re
Je pense que tu n'as pas positionné les en-têtes de colonnes de la feuill Archive comme dans mon exemple.
Dans la ligne
.Range(.Cells(i, 2), .Cells(i, 11)).Copy Sh.Cells(Sh.Rows.Count, 1).End(3)(2)
C'est la partie
Sh.Cells(Sh.Rows.Count, 1).End(3)(2)
qui décide de l'endroit ou se colle la ligne (la première vide en partant de la dernière ligne en colonne A (1) et en remont vers le haut)
Si tes en-têtes commencent en colonne B utilise
Sh.Cells(Sh.Rows.Count, 2).End(3)(2)
Si c'est en colonne C
Sh.Cells(Sh.Rows.Count, 3).End(3)(2)
Etc....

Cordialement
 
Re : Archivage de lignes après un filtre VBA.

Re
Je pense que tu n'as pas positionné les en-têtes de colonnes de la feuill Archive comme dans mon exemple.
Dans la ligne
.Range(.Cells(i, 2), .Cells(i, 11)).Copy Sh.Cells(Sh.Rows.Count, 1).End(3)(2)
C'est la partie
Sh.Cells(Sh.Rows.Count, 1).End(3)(2)
qui décide de l'endroit ou se colle la ligne (la première vide en partant de la dernière ligne en colonne A (1) et en remont vers le haut)
Si tes en-têtes commencent en colonne B utilise
Sh.Cells(Sh.Rows.Count, 2).End(3)(2)
Si c'est en colonne C
Sh.Cells(Sh.Rows.Count, 3).End(3)(2)
Etc....

Cordialement

Je me suis amusé à bidouiller le paramètre dont tu viens de me parler, mais ça ne change rien. Lorsqu'il y a plusieurs lignes à coller il n'en colle qu'une seule, et lorsque qu'il y a déjà une ligne dans la feuille "Archives", il l'écrase et ne colle, encore qu'une seule ligne !
Je ne suis pas très à l'aise avec le VBA, j'ai sans doute du raté quelque chose ! ^^ Je ne comprend pas tout.

Cordialement,
Mathieu RICHARD
 
Re : Archivage de lignes après un filtre VBA.

Je viens de mettre à jour le classeur, j'ai mis des exemples concrets dans la feuille "Saisie RDV" ainsi que dans la feuille "Archives".
Il y a également le script que tu m'as fournis, comme ça tu pourra le tester, en espèrant avoir répondu à tes attentes, et en espèrant que ça pourra m'aider ! =)

Cordialement,
Mathieu RICHARD.
 

Pièces jointes

Re : Archivage de lignes après un filtre VBA.

Re
OK,
Il y a une siouxerie 😀
La colonne ou tu dois trouver la dernière ligne est la 3, MAIS la colonne ou tu dois coller est la 2 🙄

Donc pour le collage
.Range(.Cells(i, 2), .Cells(i, 11)).Copy Sh.Cells(Sh.Rows.Count, 3).End(3)(2).Offset(, -1)

Le offset(,-1) décale d'une colonne vers la gauche sur la même ligne que la première ligne vide de la colonne 3 Sh.Cells(Sh.Rows.Count, 3).

Cordialement
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
5
Affichages
471
Réponses
0
Affichages
379
Réponses
7
Affichages
722
Retour