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 :

Tester la présence d'une formule dans une cellule [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Expert confirmé
    Homme Profil pro
    Responsable des études
    Inscrit en
    Juillet 2014
    Messages
    2 681
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2014
    Messages : 2 681
    Par défaut Tester la présence d'une formule dans une cellule
    Bonjour,

    Je sais qu'il existe des fonction IsNumeric ou IsDate qui permettent de savoir si le contenu d'une cellule est un nombre ou une date.
    Je me demandais si il existe l'équivalent pour savoir si la valeur d'une cellule est le résultat d'une formule ou non ?
    Pour l'instant j'utilise le code ci-dessous mais je me demandais s'il n'y avais pas plus efficace
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Left(Range("X2").Formula, 1) = "="
    Merci d'avance.

  2. #2
    Membre Expert Avatar de Thautheme
    Homme Profil pro
    salarié
    Inscrit en
    Août 2014
    Messages
    1 373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : salarié

    Informations forums :
    Inscription : Août 2014
    Messages : 1 373
    Par défaut
    Bonjour Halaster, bonjour le forum,

    Si ça peut t'aider :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Sub Macro1()
    Selection.SpecialCells(xlCellTypeFormulas).Select 'extrait d'une sélection uniquement les cellules contenant des formules
    End Sub

  3. #3
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Dans VBA, les fonctions font partie de la base du langage et ne sont pas spécifiques à des applications comme Excel.
    Il est donc peut probable qu'il existe une fonction du style "IsFormula".
    Ce qui s'approche le plus d'une fonction en spécifique Excel, ce sont les propriétés. Mais, à ma connaissance, l'objet Range n'a pas de propriété booléenne pouvant spécifier ça.

    Mais rien ne t'empêche de créer ta propre fonction.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Function IsFormula(CC As Range) As Boolean
        If Left(CC.Formula, 1) = "=" Then IsFormula = True Else IsFormula = False
    End Function

  4. #4
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    bonjour
    @menhir
    Il est donc peut probable qu'il existe une fonction du style "IsFormula".
    Si!! ca existe!!
    c'est tout simplement la proprité "HasFormula" qui renvoie un booleen

    F1!!
    Nom : Capture.JPG
Affichages : 3155
Taille : 109,6 Ko

    auserais-je dire aussi qu'il y a le type xlCellTypeFormulas de specialcells

    2exemple avec les deux propriété cité ci dessus
    avec specialcells
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Sub test1()
    MsgBox Not Range("B1").SpecialCells(xlCellTypeFormulas) Is Nothing
    End Sub
    avec hasFormula
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Sub test2()
    MsgBox Range("B1").HasFormula
    End Sub
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  5. #5
    Expert confirmé
    Homme Profil pro
    Responsable des études
    Inscrit en
    Juillet 2014
    Messages
    2 681
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2014
    Messages : 2 681
    Par défaut
    Merci pour vos réponses

  6. #6
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Citation Envoyé par patricktoulon Voir le message
    Il est donc peut probable qu'il existe une fonction du style "IsFormula".
    Si!! ca existe!!
    c'est tout simplement la proprité "HasFormula" qui renvoie un booleen
    Je persiste à dire que cette FONCTION n'existe pas.
    Comme je l'ai dit dans la phrase qui suivait, si quelque chose d'équivalent existait, ce serait une propriété de Range (ce que tu confirmes) et j'ai pris la précaution de dire non pas que cette propriété n'existe pas mais je ne la connaissais pas.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Sub test1()
    MsgBox Not Range("B1").SpecialCells(xlCellTypeFormulas) Is Nothing
    End Sub
    Ca, j'avais déjà testé, ça ne fonctionne pas.
    S'il y a une formule dans les parages (même si dans la cellule visée il y a une simple valeur), ça répondra Vrai.
    S'il n'y a aucune formules dans les environ, ça renvoie un message d'erreur.

    A tester avec un feuille vide et juste un 1 en B1 : message d'erreur.
    En ajoutant =B1 dans la cellule B2 : retour Vrai pour B1.

    SpecialCells(xlCellTypeFormulas), je l'ai trituré dans tous les sens sans trouver une utilisation fiable pour cette demande.

  7. #7
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    re
    le seul moyen que j'utiliserais c'est la gestion d'erreur et sortie!!! en next

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Sub test()
    MsgBox hasformule([B1])
    End Sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Function hasformule(cellule)
    hasformule = False' je met la valeur a false automatiquement 
    On Error Resume Next' si sepecialcell declenchera une erreur c'est que il n'y a pas de formule comme elle est deja a false on saute avec resume next
    hasformule = Not cellule.SpecialCells(xlCellTypeFormulas) Is Nothing: 'si il n'y a pas eu d'erreurs elle renverra vrai
    End Function

    ca fait partie de quelque exemples ou le on error est indispensable meme le "iserror " ne fonctionne pas
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  8. #8
    Membre Expert
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 266
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 2 266
    Par défaut
    Bonjour,

    il me semble que tu as oublié de tester le 2nd cas patrick
    cellule.SpecialCells(xlCellTypeFormulas) retourne la constante quand ce n'est pas une formule, donc <> nothing également.
    eric

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

Discussions similaires

  1. [Toutes versions] Imbriquer une formule dans une formule à l'aide de l'outil Insertion de fonction
    Par Philippe Tulliez dans le forum Contribuez
    Réponses: 0
    Dernier message: 27/08/2014, 11h21
  2. [XL-2010] Formule : attribuer une formule dans une cellule
    Par popi33370 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 06/03/2014, 18h06
  3. Réponses: 3
    Dernier message: 29/01/2008, 12h08
  4. [POO] dans une classe, appeler une fonction dans une méthode
    Par arnaudperfect dans le forum Langage
    Réponses: 3
    Dernier message: 26/08/2007, 23h04
  5. Envoyer une formulaire dans une page dans une Frame
    Par zooffy dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 29/06/2007, 10h13

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