IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Ma fonction ne fonctionne pas toujours [XL-2016]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    227
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 227
    Par défaut Ma fonction ne fonctionne pas toujours
    Bonjour à tous,

    ma fonction VBA ne fonctionne pas toujours ou s'active à tort à l'enregistrement, modification du fichier.

    Mon but est de savoir si un filtre est actif ou pas sur une colonne.

    Voici le code (assez simple pourtant) situé dans un module

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    Option Explicit
     
    Function filtreActif(titre As Range) As String
     
        Application.Volatile
        With titre.Parent.AutoFilter
            With .Filters(titre.Column - .Range.Column + 1)
                If .On Then
                    filtreActif = "oui"
                Else
                    filtreActif = ""
                End If
            End With
        End With
     
    End Function
    Info supplémentaire, j'utilise des segments pour les filtres.

    Pourriez-vous m'aidez s'il vous plaît ?

    Merci

  2. #2
    Membre Expert
    Inscrit en
    Décembre 2002
    Messages
    993
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 993
    Par défaut
    Bonjour, ton code semble correct, mais pour résoudre le problème d'activation inattendue, tu peux essayer de désactiver le calcul automatique lors de l'exécution de la fonction. Parfois, le recalcul automatique des fonctions peut déclencher leur exécution à des moments inattendus.
    Voici ta macro légèrement modifiée:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    Function filtreActif(titre As Range) As String
        Application.Volatile
        Application.Calculation = xlCalculationManual ' Désactive le calcul automatique
        On Error Resume Next ' Ignore les erreurs au cas où le filtre n'est pas actif
        With titre.Parent.AutoFilter
            With .Filters(titre.Column - .Range.Column + 1)
                If .On Then
                    filtreActif = "oui"
                Else
                    filtreActif = ""
                End If
            End With
        End With
        On Error GoTo 0 ' Réactive la gestion normale des erreurs
        Application.Calculation = xlCalculationAutomatic ' Réactive le calcul automatique
    End Function

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    227
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 227
    Par défaut
    Bonjour Franc,

    Merci pour ta réponse et ton aide.

    Après application de ta correction, malheureusement, toujours le même problème.

    Je pense qu'il s'agit en effet d'un problème de recalcul.

    Tout dépend le l'action en fait. Quand je travaille sur le tableau en lui même, je n'ai pas de problème car il y a un recalcul.

    Mais si tout autre action (hors tableau), la fonction ne réagit pas à l'attendu.

    Il faudrait que j'arrive à créer évènement recalcul du tableau quand je clique sur mon segment.

  4. #4
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 173
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Je n'ai pas le temps de me pencher sur ce problème mais il y a une instruction qui me semble curieuse With .Filters(titre.Column - .Range.Column + 1)
    Lorsque l'on imbrique un With dans un With, cela implique que le deuxième With soit rattaché à l'objet ou à la propriété du premier ce qui semble ne pas être le cas.
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    227
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 227
    Par défaut
    Bonjour Philippe,

    c'est lié à l'action derrière.

    En fait, je fais appel à la fonction dans une cellule déportée (juste au dessus de la cellule qui contient le filtre) :

    mais pour que cela fonctionne, une cellule de mon tableau doit-être sélectionnée.

    Si c'est une cellule hors tableau qui est sélectionnée, l'appel à la fonction ne se déclenche pas.

    Il me faut une solution de contournement.

    J'avais en tête un Range.Select au clic sur le segment mais j'ai l'impression que ce n'est pas possible.

  6. #6
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 173
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Comme vous avez évoqué les segments, cela signifie que vos tables sont des tableaux structurés donc des ListObject donc ce code fonctionnera mieux
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Function filtreActif(titre As Range) As String
      Application.Volatile
      Dim oList As ListObject
      Set oList = titre.ListObject
      If Not oList Is Nothing Then
        With oList.AutoFilter
          With .Filters(titre.Column - .Range.Column + 1)
            filtreActif = IIf(.On, "oui", "")
          End With
        End With
      End If
      Set oList = Nothing
    End Function
    J'ai remplacé également les lignes ci-dessous par la fonction Iff
    ' If .On Then
    ' filtreActif = "oui"
    ' Else
    ' filtreActif = ""
    ' End If
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2010] Fonction CALL ne fonctionne pas toujours
    Par graphikris dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 25/06/2017, 18h52
  2. [XL-2007] Fonction somme.si ne fonctionne pas toujours
    Par tofies33 dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 25/02/2015, 12h38
  3. fonction intval ne fonctionne pas toujours ?
    Par ninikkhuet dans le forum Langage
    Réponses: 2
    Dernier message: 24/12/2009, 10h23
  4. paramètre string fonction -> fonctionne pas toujours?!
    Par francoisvba dans le forum Macros et VBA Excel
    Réponses: 24
    Dernier message: 12/12/2008, 18h08
  5. Open et opener => Ma fonction ne... fonctionne pas...
    Par romulus dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 17/03/2006, 11h40

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo