XL 2016 Problèmes bizarres

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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

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
 
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
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

  • Question Question
Microsoft 365 Question code VBA
Réponses
2
Affichages
448
Retour