XL 2016 Problèmes bizarres

solgti

XLDnaute Junior
Bonjour, je tente de me faire les dents en VBA, mais depuis quelques jours, Excel plante en m'indiquant entre autre Mémoire Insuffisante, bizarre car mon PC a 32gigs de RAM.
Mais je vous soumet ici un autre cas étrange.
J'ai 2 fichiers presque identique, ce que je souhaite faire c'est un filtre d'un tableau sur 2 colonnes à partir de cases et options d'un userform.
Dans le fichier Test#1 j'ai un filtre seulement sur la première colonne
Dans le fichier Test#2 je tente le filtre sur la colonnes 1 et 2
la différence ce sont les lignes:
Sheets("Feuil1").ListObjects("Tableau_Source").Range.AutoFilter Field:=2, _
Criteria1:=pers, Operator:=xlFilterValues

de la Procédure FiltreBanque
Dans Test#2, lorsque je lance le userform en cliquant sur le bouton de la feuil1 j'ai le message:
upload_2016-12-23_12-35-50.png


Ensuite, je nepeu plus fermer Excel, je dois aller dans le gestionnaires de tâches et arrêter Excel

Est-ce que quelqu'un pourrait m'aider SVP

merci
solgti
 

Pièces jointes

  • Test#1.xlsm
    29.9 KB · Affichages: 35
  • Test#2.xlsm
    30 KB · Affichages: 34

Dranreb

XLDnaute Barbatruc
Bonsoir.
Je n'en suis pas tout à fait sûr, mais il semblerait qu'il y ait un problème sur le second filtre parce que vous mettez Operator:=xlFilterValues alors que vous spécifiez autre chose comme Criteria1 qu'un tableau de valeurs.
Par ailleurs ça ne me serait pas venu à l'idée de mette des textes vides dans le tableau du 1er filtre.
J'aurais plutôt fait :
VB:
Sub FiltreBanque()
Dim LO As ListObject, TCritBQ(), N&, Pers$
Set LO = Feuil1.ListObjects(1)
LO.Range.AutoFilter
ReDim TCritBQ(0 To 2): N = -1
If BQ1.Value Then N = N + 1: TCritBQ(N) = "Banque1"
If BQ2.Value Then N = N + 1: TCritBQ(N) = "Banque2"
If BQ3.Value Then N = N + 1: TCritBQ(N) = "Banque3"
If N >= 0 Then
  ReDim Preserve TCritBQ(0 To N)
  LO.Range.AutoFilter Field:=1, Criteria1:=TCritBQ, Operator:=xlFilterValues
  End If
Pers = Switch(P1.Value, "Pers_1", P2.Value, "Pers_2", P3.Value, "Pers_3", True, "")
If Pers <> "" Then LO.Range.AutoFilter Field:=2, Criteria1:=Pers
End Sub
 

Si...

XLDnaute Barbatruc
salut

Il semble qu’Excel n’aime pas filtrer avec un critère non défini (saturation de la pile et blocage du programme).

Un Dim pers$ initialise pers comme une chaîne vide en réservant sa place en mémoire et donc supprime ce problème comme dans la proposition de Dranreb ;). Tu pourras le vérifier avec ton code du second fichier.

Voilà un exemple de plus pour justifier l'importance de la déclaration des variables !

Un intérêt, entre autres, de définir un Tableau (une Table) est de n’avoir pas besoin de référencer sa position donc
Sheets("Feuil1").ListObjects("Tableau_Source").Range.AutoFilter Field:=2, _
Criteria1:=pers, Operator:=xlFilterValues
peut être remplacé par
[Tableau_Source].AutoFilter Field:=2, Criteria1:=pers, Operator:=xlFilterValues
ou simplement par
[Tableau_Source].AutoFilter 2, pers

Remarque : [Tableau_Source].AutoFilter permet d’activer ou pas la fonction filtre
 

Discussions similaires

Réponses
2
Affichages
118
Réponses
21
Affichages
997

Membres actuellement en ligne

Statistiques des forums

Discussions
312 229
Messages
2 086 426
Membres
103 206
dernier inscrit
diambote