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 :

Interpréter une string comme une formule dans VBA (pas cellule Excel) [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre chevronné
    Homme Profil pro
    Ingénieur Industrialisation
    Inscrit en
    Mai 2015
    Messages
    222
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Mai 2015
    Messages : 222
    Par défaut Interpréter une string comme une formule dans VBA (pas cellule Excel)
    Bonjour à tous,

    Dans le cadre d'une petite explication des tests logiques que l'on peut réaliser sur VBA, je me suis retrouvé à vouloir transformer une string (entrée par l'utilisateur) en formule, mais je n'y arrive pas.

    J'ai essayé à l'aide de la fonction Evaluate, celle-ci fonctionne pour les tests de type "1>2" mais pas pour tout ce qui est plus sophistiqué, du type IsNumeric ou not 1>2.

    Extrait me posant problème (Le blabla je l'ai écrit à la volée et rapidement, ne pas en tenir compte) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    Dim Réponse As Variant
    Dim Résultat as string
     
    Do
        Réponse = InputBox("Entrez votre test logique tel que vous l'écririez dans VBA : " & vbNewLine & vbNewLine _
                    & "Exemples d'opérateurs : " & vbNewLine _
                    & "<, <=, =, >=, > : Comparaisons numériques" & vbNewLine _
                    & "IsNumeric(""Texte"") : Vérifie si le texte est une valeur numérique" & vbNewLine _
                    & "IsDate(""Texte"") : idem pour une date " & vbNewLine _
                    & "IsEmpty,IsMissing,IsNull,IsObject,IsError,IsArray, Is Nothing" & vbNewLine _
                    & """Texte1"" Like ""*Texte2*"" : Vérifie si le texte1 ressemble au texte2" & vbNewLine _
                    & "..." & vbNewLine & vbNewLine _
                    & "Ces tests peuvent être multiples à l'aide de And / Or " & vbNewLine & vbNewLine _
                    & "Pour tester l'inverse, commencer par Not   Exemple : ""Not 5>2""", "Tests logiques", Réponse)
     
        If Not IsError(Evaluate(Réponse)) Then Résultat = Réponse & " = " & Evaluate(Réponse) Else Résultat = "Le test logique """ & Réponse & """ ne fonctionne pas..."
        Debug.Print Evaluate(Réponse)
        If MsgBox(Résultat & vbNewLine & vbNewLine & "Recommencer ?", vbYesNo) = vbNo Then Exit Do
    Loop
    Avez-vous une idée de comment faire ?
    Honnêtement, j'ai cherché mais les résultats sont super divers en cherchant par "turn string into formula" ou autre sur google par exemple.

    Merci d'avance !

    Quentin.

  2. #2
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 166
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 166
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Peut-être que la lecture de ces deux billets dont le sujet traite de cette question t'apportera plus d'éclaircissement Ecrire une formule dans Excel à l'aide d'une procédure VBA et la suite Ecrire une formule dans Excel à l'aide d'une procédure VBA (Part 2)
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  3. #3
    Membre chevronné
    Homme Profil pro
    Ingénieur Industrialisation
    Inscrit en
    Mai 2015
    Messages
    222
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Mai 2015
    Messages : 222
    Par défaut
    Merci Philippe pour cette info, mais ce n'est pas mon problème

    En fait, je sais écrire une formule que ce soit dans une cellule Excel, dans VBA, etc.

    Ma question porte sur le fait que j'aimerais que l'utilisateur entre, via une InputBox, un test logique, du style :

    "Nom.prénom@gmail.com" like "*@*.*" et que cela lui renvoie le résultat (donc "Vrai" dans cet exemple)

    Par exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    MsgBox "Nom.Prénom@gmail.com" like "*@*.*" ' Le message affiché est "Vrai"
     
    'Cependant j'aimerais que la formule provienne d'une string écrite par l'utilisateur
    Formule = """Nom.Prénom@gmail.com"" like ""*@*.*""" 'Disons que cette string provienne d'une inputbox
     
    MsgBox FONCTIONEXCELRECHERCHEE(Formule) 'Ce que je souhaite obtenir ici est "Vrai" car je souhaite une analyse de la formule contenue dans la string... Je ne sais pas si c'est clair
    Essayez par vous-même dans l'extrait que j'ai écrit dans le message d'origine, la fonction Evaluate("1>2") me donne bien "Faux", mais Evaluate("IsNumeric(1)") me retourne une erreur...

  4. #4
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 166
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 166
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Essayez par vous-même dans l'extrait que j'ai écrit dans le message d'origine, la fonction Evaluate("1>2") me donne bien "Faux", mais Evaluate("IsNumeric(1)") me retourne une erreur...
    La fonction Evaluate ne peut évaluer que des fonctions d'excel or IsNumeric est une fonction de VBA.
    En revanche ISNUMBER (ESTNUM) est bien une fonction d'Excel et cela fonctionne donc.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MsgBox (Evaluate("=ISNUMBER(1)"))
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  5. #5
    Membre chevronné
    Homme Profil pro
    Ingénieur Industrialisation
    Inscrit en
    Mai 2015
    Messages
    222
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Mai 2015
    Messages : 222
    Par défaut
    Bonsoir,

    Merci beaucoup, cela m'éclaire pas mal ! J'avais cru comprendre ça mais j'avais essayé avec les formules en français et non en anglais (EstNum(X) par exemple...).

    Savez-vous s'il existe donc une autre formule permettant d'obtenir ce dont j'ai besoin ?

    À savoir transformer ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If IsNumeric(5) then ...
    en
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Dim VariableFormule as String
    VariableFormule = "IsNumeric(5)"
    'ou VariableFormule = """Exemple de texte" like ""*de*"""
    'ou VariableFormule = "Not ActiveCell.Interior.Color = vbRed and ActiveCell.Value > 4"...
    'ou toute formule que je pourrais écrire dans le code, en me détachant d'une formule de cellule Excel.
     
    If VariableFormule then ...
    En exagérant un peu, ce que je recherche est du style
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    CInt(string)
    CDate(string)
    CSng(String)
    CStr(XXX)...
    MSDN

    J'imagine qu'une solution doit exister

    Merci d'avance !

  6. #6
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 166
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 166
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Pour savoir en excel et à l'aide d'une fonction si c'est un nombre, un texte, un booléen, voir les formules de la catégorie Information et CDate ,n'a pas d'équivalent en Excel puisqu'une date est un nombre formaté.
    Pour connaître la manière de créer une formule en VBA je renvoie vers ces deux billets (liens déjà donné plus haut) Ecrire une formule dans Excel à l'aide d'une procédure VBA et la suite Ecrire une formule dans Excel à l'aide d'une procédure VBA (Part 2)
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

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

Discussions similaires

  1. [WD18] Metre une colonne d'une Table sur une ligne d'une autre Table
    Par Totophe2 dans le forum WinDev
    Réponses: 2
    Dernier message: 22/11/2013, 12h58
  2. [XL-2010] Recherche dans une matrice avec doublons (formule ou VBA)
    Par Lucorah dans le forum Excel
    Réponses: 7
    Dernier message: 07/05/2012, 17h16
  3. Interpreter une string comme une méthode
    Par katarnos dans le forum Langage
    Réponses: 7
    Dernier message: 05/08/2010, 10h50
  4. [XL-2002] Problème de syntaxe sur une formule dans VBA
    Par beber_le_stagiaire dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 11/06/2009, 15h32
  5. [C#] Comment Splitter une string avec une string ?
    Par ADJ Design dans le forum C#
    Réponses: 12
    Dernier message: 27/07/2006, 12h10

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