[VBA Excel] Après la sélection d'un filtre, la formule est en erreur [Résolu]

Signaler
Messages postés
12
Date d'inscription
mercredi 8 décembre 2004
Statut
Membre
Dernière intervention
18 avril 2012
-
Messages postés
12
Date d'inscription
mercredi 8 décembre 2004
Statut
Membre
Dernière intervention
18 avril 2012
-
Bonjour

J'ai une formule que je met en place sur plusieurs cellules du classeur via une macro :
0,IF(SICOULEUR(RC[-2]," & RED & _
        "),""" & MSG1 & """,""" & MSG2 & _
        """),IF(COUNTBLANK(RC[-2])>0,""" & MSG3 & _
        """,IF(FIXED(RC[-4],0)=FIXED(RC[-2],0),"""",""" & MSG4 & """)))"

En formule Excel sur la cellule E10, ça donne :
=SI(NB.VIDE(A10)>0;SI(SICOULEUR(C10;38);"MSG1";"MSG2");SI(NB.VIDE(C10)>0;"MSG3";SI(CTXT(A10;0)=CTXT(C10;0);"";"MSG4")))

SICOULEUR est une fonction VBA qui dans ce cas retourne FAUX.

La formule en elle-même ne pose pas problème, par contre, lorsque j'ajoute [color=red]dans le VBA le filtrage de cette colonne par MSG2, l'affichage est correcte puis passe à #VALEUR.
Pour info, mettre ce filtre est la dernière action du code VBA.

J'ai utilisé la barre d'audit des formules pour faire du pas à pas et à priori c'est lorsque MSG2 devient le contenu à afficher que j'obtiens l'erreur.

Pour info, une fois la macro exécutée, si j'enlève (à la main) le filtre, les erreurs #VALEUR disparaissent et ne reviennent pas lorsque je remets (toujours à la main) le filtre.

Quelqu'un aurait-il une idée sur ce comportement Excel et comment le contourner ?

Cordialement,

6 réponses

Messages postés
12
Date d'inscription
mercredi 8 décembre 2004
Statut
Membre
Dernière intervention
18 avril 2012

Bonjour,

J'ai trouvé, c'était Plage.Font.ColorIndex qui génère une erreur quand il n'est pas dispo.

Je ne teste plus la couleur mais s'il y a un commentaire, et ça c'est toujours dispo.

Cordialement,
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
229
Bonjour,

un conflit, probablement entre une action et l'autre.
Mais comment veux-tu qu'on puisse te renseigner sans tous les éléments susceptibles de générer le conflit ?
Nous n'en possédons qu'un : le code VBA d'inserion de la formule.
Les deux autres éléments succeptibles d'intervenir étant la fonction SICOULEUR et le filtre ajouté (les deux codes VBA).


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Messages postés
12
Date d'inscription
mercredi 8 décembre 2004
Statut
Membre
Dernière intervention
18 avril 2012

L'application du filtre en VBA est :
Selection.AutoFilter Field:=5, Criteria1:=MSG2


Et la fonction SICOULEUR :
Function SICOULEUR(Plage As Range, Couleur As Long) As Boolean
    If (Plage.Font.ColorIndex = Couleur) Then
        SICOULEUR = True
    Else
        SICOULEUR = False
    End If
End Function


Cordialement,
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
229
Merci pour le filtre, mais il s'applique à quelle sélection ?
Car :
Selection.AutoFilter Field:=5, Criteria1:=MSG2

ne nous apprend rien sur la plage concernée, à quoi tu appliques ce filtre, etc...

____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Messages postés
219
Date d'inscription
mercredi 26 octobre 2011
Statut
Membre
Dernière intervention
22 juin 2017
9
Bonjour,

Pourquoi #VALEUR j'en sais rien.

Mais dans ta formule tu mets la chaine de caractere "MSG2" comme valeur dans la cellule.

et dans ton filtre la variable MSG2 qui n'existe pas.

mets donc

Selection.AutoFilter Field:=5, Criteria1:="MSG2"



et cela fonctionne, si c'est ce que tu veux et pas une variable.

Bonne soirée



Faites simple, aussi simple que possible, mais pas simpliste.
A. Einstein.
Messages postés
12
Date d'inscription
mercredi 8 décembre 2004
Statut
Membre
Dernière intervention
18 avril 2012

Bonjour,

Il me semble que la sélection ne joue un rôle que d'accesseur à la fonction "AutoFilter" et que c'est le champ "Field" qui désigne la liste du filtre automatique à filtrer.
J'ai quand même essayé de :
- sélectionner la cellule où se trouve le filtre => KO
- sélectionner les cellules sous celle où se trouve le filtre => KO
- annuler le filtrage puis le ré-appliquer => KO, Pire, du fait de #Valeur, MSG2 n'est plus présent dans la liste et les valeurs qui apparaissaient ne s'affichent plus.
- De mettre Range("E4").AutoFilter Field:=5, Criteria1:="MSG2" => KO

J'ai essayé également de remplacer ma variable par le litéral "MSG2" lors du filtrage, mais le comportement est le même.

Cordialement,