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

Résolu
jpvito Messages postés 12 Date d'inscription mercredi 8 décembre 2004 Statut Membre Dernière intervention 18 avril 2012 - 30 nov. 2011 à 16:58
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,

6 réponses

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 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,
3
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 231
30 nov. 2011 à 18:01
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
0
jpvito Messages postés 12 Date d'inscription mercredi 8 décembre 2004 Statut Membre Dernière intervention 18 avril 2012
30 nov. 2011 à 18:20
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,
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 231
30 nov. 2011 à 18:30
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cgandco Messages postés 219 Date d'inscription mercredi 26 octobre 2011 Statut Membre Dernière intervention 22 juin 2017 9
30 nov. 2011 à 21:22
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.
0
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 à 11:07
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,
0