Bonjour,

Dans un tableau structuré j'enregistre années après années les informations sur des adhérents de l'association.
Pour alléger la base des données je souhaite réaliser au choix de l'utilisateur la suppression d'une ou plusieurs années (en partant toujours de la plus ancienne).
Le code ci-dessous fonctionne lorsque je supprime l'année la plus ancienne ou ensemble plusieurs années anciennes jusqu'à N-1 (pas de suppression de l'année N bien sûr !). Mais me demande à chaque fois si je veux supprimer les lignes entières !
En revanche si je n'ai que 2 années en historique la macro plante à la dernière ligne (.delete !!!!!!!) alors que le filtrage est bien effectif sur l'année N-1


Merci de vos remarques pour me sortir de cette impasse.

Cordialement

ci-après le code :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
ansupprimerDeb = FrmSuppression.TxtBoxAnDeb 'choix dans un formulaire de l'année n à supprimer
ansupprimerFin = FrmSuppression.LstBoxAnFin.List(FrmSuppression.LstBoxAnFin.ListIndex) 'choix dans le formulaire de la dernière année à supprimer N+ ....
Set tbStruc = SheetASSOC.Range("tblMembres").ListObject
colAn = tbStruc.ListColumns("Année").Index 'renvoi le n°d'ordre de cette colonne
With SheetASSOC.ListObjects("TblMembres")
     If ansupprimerFin <> ansupprimerDeb Then
                .Range.AutoFilter field:=colAn, Criteria1:=">=" & ansupprimerDeb, Operator:=xlAnd, Criteria2:="<=" & ansupprimerFin
     Else: .Range.AutoFilter field:=1, Criteria1:=ansupprimerDeb
     End If
     '.DataBodyRange.SpecialCells(xlCellTypeVisible).Delete     ' fonctionne (comme la variante ci-après) mais ...plantage quand il ne reste que 2 années (en cours et N-1) et la suppression concerne N-1
   End With
        tbStruc.DataBodyRange.SpecialCells(xlCellTypeVisible).Delete 'variante qui plante également au même stade ! (mais fonctionne aussi dans les autres cas de figure)