Rapport de message :*
 

Re: Problème de détection si filtre auto est présent

Titre du sujet : Re: Problème de détection si filtre auto est présent
par criscris11 le 17/07/2012 00:46:03

Re,
Comme un problème n'arrive jamais seul, je suis en train de tourner en rond depuis plus d'une heure avec un code sur un ToggleButton.
Voici ce code :
Private Sub ToggleButton2_Click()
If ToggleButton2.Caption = "Présence du filtre auto" Then
ActiveSheet.AutoFilterMode = False
ToggleButton2.Caption = "Absence du filtre auto"
ToggleButton2.ControlTipText = "Cliquer pour réactiver le filtre auto"
Else
ToggleButton2.Caption = "Absence du filtre auto"
ActiveSheet.AutoFilterMode = True
Application.Run "Filtre_Auto"
ToggleButton2.Caption = "Présence du filtre auto"
ToggleButton2.ControlTipText = "Cliquer pour désactiver le filtre auto"
End If
End Sub
 
Pour comprendre un peu mieux, voici le code de mon formulaire :
'___________________________'
'Intialisation du formulaire
'___________________________'

Private Sub UserForm_Initialize()
Dim i As Long
 Me.ListBox1.List = Range("Noms").Resize(, 2).Value
 Erase NomOK: ReDim NomOK(1 To Range("Noms").Rows.Count)
 For i = 1 To Range("Noms").Rows.Count: NomOK(i) = Range("Noms").Row + i - 1: Next i
 Label21.Caption = Format(Date, "dddd d mmmm yyyy") 'affiche la date du jour dans un label
 Me.MultiPage1.Value = 0 'se positionne sur la 1ère page du contrôle multipages
 Me.TextBox1.SetFocus 'positionne le curseur sur la zone de texte de la recherche intuitive
 
    If Application.Calculation = xlCalculationAutomatic Then
    ToggleButton1.Caption = "Calcul automatique"
    ToggleButton1.ControlTipText = "Cliquer pour changer le mode de calcul"
    Else
    Application.Calculation = xlCalculationManual
    ToggleButton1.Caption = "Calcul sur ordre"
    ToggleButton1.ControlTipText = "Cliquer pour changer le mode de calcul"
    End If
   
    If ActiveSheet.AutoFilterMode = True Then
    ToggleButton2.Caption = "Présence du filtre auto"
    ToggleButton2.ControlTipText = "Cliquer pour désactiver le filtre auto"
    Else
    ActiveSheet.AutoFilterMode = False
    ToggleButton2.Caption = "Absence du filtre auto"
    ToggleButton2.ControlTipText = "Cliquer pour activer le filtre auto"
    End If
   
    If ActiveSheet.FilterMode = True Then
    CommandButton8.Caption = "Mode filtre"
    CommandButton8.ControlTipText = "Cliquer pour remettre tous les filtres à zéro"
    CommandButton8.Enabled = True
    Else
    ActiveSheet.FilterMode = False
    CommandButton8.Caption = "Aucun filtre actif"
    CommandButton8.Enabled = False
    End If
End Sub
 
Mon problème est le suivant : quand je clique sur mon ToggleButton2 si condition 1, le filtre auto s'enlève bien mais mon formulaire se ferme automatiquement et à la réouverture de ce dernier je perds toute l'initialisation du formulaire, cerise sur le gâteau impossible de le fermer sauf un kill sauvage (CTRL+ALT+SUPPR) seul moyen de quitter Excel.
Quand je clique sur mon ToggleButton2 si condition 2, j'ai une erreur '1004'. J'ai également essayer sans la ligne :
...
ActiveSheet.AutoFilterMode = False
...
et là cela fonctionne sauf les icônes des filtres ne s'affichent pas (les triangles noirs) et rebelote fermeture du formulaire...

Pour info, j'ai un premier ToggleButton que j'ai codé comme suit et aucun problème :
Private Sub ToggleButton1_Click()
If ToggleButton1.Caption = "Calcul sur ordre" Then
Application.Run "Calcul_Auto"
ToggleButton1.Caption = "Calcul automatique"
ToggleButton1.ControlTipText = "Cliquer pour changer le mode de calcul"
Else
ToggleButton1.Caption = "Calcul automatique"
Application.Run "Calcul_Manuel"
ToggleButton1.Caption = "Calcul sur ordre"
ToggleButton1.ControlTipText = "Cliquer pour changer le mode de calcul"
End If
End Sub
J'en perds mon latin, enfin je veux dire mon VBA.
Merci de bien vouloir m'éclairer sur ce qui pourrait clocher et sur ce je vous souhaite une bonne nuit : la nuit porte conseil.

PS : une piste peut-être, la macro servant à mettre les filtres autos sur ma ligne d'entête ne fonctionne plus non plus quand je l'exécute en mode manuel (ALT+F8), voici son code :
Sub Filtre_Auto()
    Range("A8:BQ8").Select
    Selection.AutoFilter
    Range("B9").Select
End Sub