Verifier si une cellule contient une formule

Résolu
Bonjour à tous,
Voici mon probème: je souhaite savoir si la cellule que je vais chercher via un recherchev contient une formule ou pas.
J'ai deja la Fonction suivante pour savoir si une cellule contient une formule
Function Avec_Formule(cel As Range)
If cel.HasFormula = True Then Avec_Formule = "estimate" Else Avec_Formule = "final"
End Function

Mais quand je fais Avec_Formule(recherchev(bla;bla;2;faux)) j'ai pour réponse #VALUE

est ce que quelqu'un voit comment solutionner mon probleme?

Merci à tous
Configuration: Windows XP
Firefox 2.0.0.20

7 réponses

  • Votes
  • Date
  • Date décroissante
  1. Contributeur
    Bonjour

    voici une fonction qui le permet
    Function EstFormule(cel As Range) As Boolean
        EstFormule = False
        Application.Volatile
        If Left(cel.FormulaLocal, 1) = "=" Then EstFormule = True
    End Function
    

    renvoi Vrai ou True (en VBA) s'il y a une formule
    1. Salut Wilfried
      Merci d'avoir répondu si rapidement,
      merci pour la fonction, mais puis je lui donner en parametre un recherchev et non directement une cellule
      et si oui pourquoi çe netait pas possible dans ma fonction?

      merci encore
      A bientot
    2. Wilfried,
      Je viens de tester ta fonction mais elle me renvoie egalement #VALEUR si je fais ça
      =EstFormule(RECHERCHEV(A1;Feuil1!A:B;2;FAUX))
      en revanche si je fais =+EstFormule(B1) là ya pas de probleme
      surement que le recherchev ne renvoie pas une cellule
      mais dans ce cas que dois je faire?

      merci du coup de main
  2. Contributeur
    Re:

    pour le recherchev c'est plus complexe, il renvoie une valeur et non pas une cellule, il faut utiliser Equiv qui renvoie un index

    exemple : Equiv(MaRecherche;Maplage;0) renverra l'index de la recherche
    Si ma colonne à renvoyer est la colonne E et ma plge de recherche est la colonne A
    = "E" & Equiv(Marecherche;A:A;0) ' me donnera le référence de la cellule à renvoyer
    avec indirect, on transforme cette référence Texte en Référence cellule
    =INDIRECT("E" & Equiv(Marecherche;A:A;0)
    il suffit alors d'utiliser EstFormule
    =EstFormule(INDIRECT("E" & Equiv(Marecherche;A:A;0)) ' Revoie Vrai s'il y a une formule, sinon Faux
    1. Contributeur
      re:

      je vien de te repondre mais ma reponse n'apparait pas ?????????

      rechercheV renvoie une valeur, pas une cellule
      alors on triche

      =EstFormule(Indirect("Feuil1!B" & Equiv(A1;Feuil1!A:A;0)))

      cela doit fonctionner
      1. Contributeur
        Bonjour tout le monde,

        Ta façon de faire n'est pas logique. Rechercherv() te retourne une valeur et il faudrait passer une référence en parametre à la fonction de wilfried.
        Recherche ta valeur avec index, tu pourras en déduire le n° de ligne et fabriquer l'adresse.
        ex:
        =ADRESSE(EQUIV(A1;Feuil1!A:A;0);2)
        Il faudra peut-être adapter la fonction de wilfried pour convertir la chaine représentant l'adresse en adresse réelle
        eric

        EDIT : tes réponses viennent d'apparaitre wilfried, mon post n'a plus lieu d'etre :-)
        1. Contributeur
          Bonjour

          je ne comprends pas, je ne trouve pas le réponses que j'ai données à ce fil. Ca bug sur ce fil....

          je redonne donc la formule
          =EstFormule(Indirect("Feuil1!B" & equiv(A1;Feuil2!A:A;0)))
          1. salut Wilfried,
            j'ai bien recu toutes tes réponses.
            je viens de tester et ça marche nickel.
            C'est vrai qu'il fallait que je ramene une cellulu et non sa valeur
            en tout cas merci bcp et bonne continuation à tous