plantage VBA Lbound/Ubound

rafi93

XLDnaute Occasionnel
bonjour à tous

je me bats depuis hier avec un plantage VBA sur une ligne de code :
For iItem = LBound(.Criteria1) To UBound(.Criteria1)
cf copie écran ci dessous

j'avais récupéré cette portion de code "sauve_filtre" sur le forum il y a 2 ans, et l'ai intégrée dans une macro VB qui y fait appel, et qui marchait parfaitement jusqu'hier.
depuis, plantage sur un gros tableau de 30 col x 5000 lignes
après de multiples tests, j'ai réussi à le reproduire sur un fichier restreint à 3 col x 10 lignes

ça ne plante QUE si je filtre les données de la colonne "date"
si pas filtré, ou filtré sur une des autres colonnes pas de pb !

une idée ?

merci !

upload_2018-9-5_15-17-54.png



upload_2018-9-5_15-1-39.png
 

Pièces jointes

  • upload_2018-9-5_15-15-20.png
    upload_2018-9-5_15-15-20.png
    14.1 KB · Affichages: 24

rafi93

XLDnaute Occasionnel
ok merci !

ci joint le fichier excel contenant le tableau exemple, et en dessous le texte du code VB que j'ai dans mon personal.xlsb

plantage si on filtre en conservant p.ex "2016" dans la colonne date
 

Pièces jointes

  • pb filtrage sur date avec macro sauve_filtre.xlsm
    29.3 KB · Affichages: 18

vgendron

XLDnaute Barbatruc
Hello

avec ce code.. qui prend le soin d'activer le filtre en début et le désactiver en fin. pas de pb chez moi..
VB:
Sub sauve_filtre()
Dim f As Long
Dim col As Integer
Dim iItem As Long
    Set w = ActiveWorkbook.ActiveSheet
   
    w.Range("Tableau1[[#Headers],[montant]]").AutoFilter

    With w.AutoFilter
        currentFiltRange = .Range.Address
        With .Filters
            col = .Count
            ReDim filterArray(1 To col, 1 To 4)
            For f = 1 To col
                With .Item(f)
                    filterArray(f, 1) = .On
                    If .On Then
                        filterArray(f, 2) = .Operator
                        If .Operator = 7 Then
                            MultiSelect = ""
                            For iItem = LBound(.Criteria1) To UBound(.Criteria1)
                                MultiSelect = MultiSelect & IIf(MultiSelect = "", "", delim) & .Criteria1(iItem)
                            Next iItem
                            filterArray(f, 3) = MultiSelect
                        Else
                            filterArray(f, 3) = .Criteria1
                            If .Operator = 1 Or .Operator = 2 Then
                                filterArray(f, 4) = .Criteria2
                            End If
                        End If
                    End If
                End With
            Next f
        End With
    End With
    w.Range("Tableau1[[#Headers],[montant]]").AutoFilter
End Sub
 

rafi93

XLDnaute Occasionnel
ok
mais si j'enlève le filtre, je ne peux plus le sauvegarder (pour le restaurer après divers traitements avec la procedure inverse restore_filtre ) , ce qui est l'objectif de ce code, non ?

idealement ce serait de trouver pourquoi ce "bug" bizarre, mais pas évident
 

Discussions similaires

Statistiques des forums

Discussions
314 092
Messages
2 105 759
Membres
109 427
dernier inscrit
terasse