Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

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 !




 

Pièces jointes

  • 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
 

rafi93

XLDnaute Occasionnel
je viens d'essayer avec le code indiqué en #8
j'obtiens aussi une erreur !!
ça plante quand il va chercher ".criteria1" comme avec le code precedent
est ce que ce ".Criteria1" aurait des incompatibilités avec des valeurs de date ?

 

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…