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

Messages postés
12
Date d'inscription
mercredi 8 décembre 2004
Statut
Membre
Dernière intervention
18 avril 2012
- - Dernière réponse : jpvito
Messages postés
12
Date d'inscription
mercredi 8 décembre 2004
Statut
Membre
Dernière intervention
18 avril 2012
- 1 déc. 2011 à 17:21
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,
Afficher la suite 

6 réponses

Meilleure réponse
Messages postés
12
Date d'inscription
mercredi 8 décembre 2004
Statut
Membre
Dernière intervention
18 avril 2012
3
Merci
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,

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 188 internautes nous ont dit merci ce mois-ci

Commenter la réponse de jpvito
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
212
0
Merci
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
Commenter la réponse de ucfoutu
Messages postés
12
Date d'inscription
mercredi 8 décembre 2004
Statut
Membre
Dernière intervention
18 avril 2012
0
Merci
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,
Commenter la réponse de jpvito
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
212
0
Merci
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
Commenter la réponse de ucfoutu
Messages postés
219
Date d'inscription
mercredi 26 octobre 2011
Statut
Membre
Dernière intervention
22 juin 2017
8
0
Merci
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.
Commenter la réponse de cgandco
Messages postés
12
Date d'inscription
mercredi 8 décembre 2004
Statut
Membre
Dernière intervention
18 avril 2012
0
Merci
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,
Commenter la réponse de jpvito