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)
Partager