Pb avec macro supprimer toutes les lignes dont la date est échue

JerCaz

XLDnaute Occasionnel
Bonjour le forum,

Toujours dans la réalisation du même projet (pour les courageux qui ont vu passer mes diverses demandes... encore une fois un grand merci à eux!), j'ai une feuille où toutes les lignes à partir de la 5ème ligne commencent par une date (c'est-à-dire que la colonne A contient des dates, dès la 5è ligne).
Je souhaite réaliser une macro qui me permet de vérifier ma feuille, qui classe les examens par ordre chronologique, et qui supprime toutes les lignes dont la date est échue. Enfin, pour simplifier la vie des utilisateurs, se serait pratique si elle s'activait dès qu'on affiche l'onglet.

Après avoir effectué une petite recherche sur google, j'ai donc trouvé et adapté une macro, que voici:
Code:
'On classe l'onglet par ordre chronologique dès la ligne 5
Range("A5:M65536").Select
Selection.Sort Key1:=Range("M5"), Order1:=xlAscending, Header:=xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
Range("A5").Select
  
  
'On efface les "lignes" d'hier dans la sélection si la row contient la date d'hier (ou plus ancienne).

With Application
.Calculation = xlCalculationManual
.ScreenUpdating = False
End With

For i = Selection.Rows.Count To 1 Step -1
If WorksheetFunction.CountA(Selection.Rows(i)) <= Date - 1 Then
Selection.Rows(i).EntireRow.Delete
End If
Next i

With Application
.Calculation = xlCalculationAutomatic
.ScreenUpdating = True
End With

Mon plus gros soucis avec cette macro, c'est que dès qu'elle trouve une date échue, elle efface la ligne puis arrête son travail, c'est-à-dire qu'elle ne cherche plus après d'autres lignes dont la date est échue afin de les supprimer... Or, je voudrais qu'elle fasse tout d'un coup: rechercher toutes les lignes dont la date est échue, et les supprimer.
Mon deuxième soucis, c'est que mon fichier est amené à devenir un fichier partagé. Or, il me semble, si je ne m'abuse, qu'avec un fichier partagé, autant on peut sélectionner une ligne (ou une colonne) entière, mais on ne peut pas faire de sélection restreinte. Je me trompe peut-être, mais si ce n'est pas le cas, je crains que la macro ne fonctionne plus lorsque le fichier sera partagé à cause du bout de code
Code:
Range("A5:M65536").Select
Selection.Sort Key1:=Range("M5"), Order1:=xlAscending, Header:=xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
Range("A5").Select
Comment faire pour ne pas aboutir à un bug lorsque le fichier sera mis en partagé?

D'avance, merci beaucoup pour votre aide!


PS: la connexion que j'utilise (professionnelle - je suis sur mon lieu de travail) ne me permets pas d'héberger de pièces jointes sur "ci-joint". C'est pourquoi je suis obligé de contourner la charte en utilisant un autre hébergeur.
Néanmoins, vous trouverez le bout de fichier sur lequel je travaille à la suite.
Voir le Fichier : test_34.zip
 
Dernière édition:

Catrice

XLDnaute Barbatruc
Re : Pb avec macro supprimer toutes les lignes dont la date est échue

Bonjour,

Ci-joint ton code modifié

Pourquoi faire le tri sur la colonne M pluto que A ?
Ne vaut il pas mieux archiver ou masquer les données plutot que les supprimer ?
 

Pièces jointes

  • test.zip
    22.9 KB · Affichages: 50
  • test.zip
    22.9 KB · Affichages: 49
  • test.zip
    22.9 KB · Affichages: 48

Modeste

XLDnaute Barbatruc
Re : Pb avec macro supprimer toutes les lignes dont la date est échue

Bonjour JerCaz, le forum,

Je dis peut-être une ânerie (ce serait bien la première fois !) mais si dans ton code, tu as:
Code:
Range("A5").Select
... puis plus loin:
Code:
Selection.Rows.Count
n'y aurait-il pas un petit souci ?

Modeste

Salut Catrice
 

JerCaz

XLDnaute Occasionnel
Re : Pb avec macro supprimer toutes les lignes dont la date est échue

Bonjour Catrice, bonjour Modeste, et merci pour votre aide!
En prenant ma coupure à la maison ce midi, je téléchargerai le fichier corrigé. Un grand merci.

Pour ta remarque concernant l'archivage des données, j'y ai bien pensé, mais c'est une tâche qui me semble très compliquée vu mon niveau en VBA...
Dans l'absolu, c'est vrai que ce serait l'idéal, mais je ne sais pas comment faire pour couper les données anciennes, puis les coller dans un autre fichier (car laisser les archives dans le même fichier risque d'allourdir celui-ci rapidement), sachant que le fichier archive ne sera pas ouvert par l'utilisateur lors du transfert des données...

C'est donc pour ça que pour l'instant, j'ai voulu faire au plus simple...

Mais dans l'aboutissement de mon projet, ta proposition est ce qu'il y a de mieux pour conserver une traçabilité.
 

JerCaz

XLDnaute Occasionnel
Re : Pb avec macro supprimer toutes les lignes dont la date est échue

Re-bonjour,

le code de Catrice est quasi parfait.
Seul petit hic: lorsqu'il y a moins de 4 lignes de remplies, le tri et la suppression des dates écoulées ne se font pas... Une fois qu'il y a plus de 4 lignes de remplies, ça fonctionne... Bizarre, vous avez dit bizarre???
Je ne vois vraiment pas d'où vient le problème!
 

Catrice

XLDnaute Barbatruc
Re : Pb avec macro supprimer toutes les lignes dont la date est échue

Re,

Exact, il faut modifier cette ligne :

For i = Range("A5:" & Range("A65536").End(xlUp).Address).Rows.Count To 1 Step -1
en
For i = Range("A65536").End(xlUp).Row To 5 Step -1
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 215
Messages
2 086 330
Membres
103 188
dernier inscrit
evebar