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 :

Expression dans une variable ?


Sujet :

Macros et VBA Excel

  1. #1
    Candidat au Club
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Avril 2020
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2020
    Messages : 6
    Points : 4
    Points
    4
    Par défaut Expression dans une variable ?
    Bonjour,
    Je cherche comment mettre une expression dans une variable.

    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    MaVariable = "Year(Date)"
     
    If MaVariable >2021 then ....
    Je sais que cela fonctionne si j'enlève les guillemets de la ligne MaVariable=... Mais ce n'est pas ce que je souhaite faire.

    Ou, encore plus difficile :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    MaVarible = "Year(Date) > 2021"
     
    If MaVariable = True Then ....
    Est-ce possible ?
    Merci de vos aides.

  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
    12 764
    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 : 12 764
    Points : 28 622
    Points
    28 622
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    La fonction EVALUATE, évalue des formules utilisant des fonctions d'excel or DATE est une fonction VBA. Tu dois donc utiliser soit NOW soit TODAY

    Exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Sub t()
      Dim fx As String
      fx = "YEAR(NOW())>2021"
      MsgBox Evaluate(fx)
    End Sub
    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
    Expert éminent sénior 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
    Points : 32 866
    Points
    32 866
    Par défaut
    Autre solution : créer une fonction.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Sub Test
       If MaVariable() >2021 then ....
    End
     
    Function MaVariable() As Long
       MaVariable = Year(Date)
    End Function
    Bien sûr, sur un exemple aussi simple, ça a peu d'intérêt.
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

  4. #4
    Expert confirmé Avatar de Patrice740
    Homme Profil pro
    Retraité
    Inscrit en
    Mars 2007
    Messages
    2 475
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 475
    Points : 5 630
    Points
    5 630
    Par défaut
    Bonjour,
    Citation Envoyé par Dersou1 Voir le message
    Je sais que cela fonctionne si j'enlève les guillemets de la ligne MaVariable=... Mais ce n'est pas ce que je souhaite faire.
    Pourquoi donner des exemples qui ne correspondent pas à ce que tu souhaites ?????
    Soit précis, expliques en détail ce que tu souhaites faire. Ça évitera qu'on réponde au hasard !
    Cordialement,
    Patrice
    Personne ne peut détenir tout le savoir, c'est pour ça qu'on le partage.

    Pour dire merci, cliquer sur et quand la discussion est finie, penser à cliquer sur

  5. #5
    Candidat au Club
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Avril 2020
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2020
    Messages : 6
    Points : 4
    Points
    4
    Par défaut
    Merci à Philippe Tulliez.
    C'est un contournement qui fonctionne
    Seul problème, il faut que je repasse mes formules VBA en Excel
    Je suppose donc qu'il n'y a pas d'autres solution ?

    Merci à Menhir,
    La solution fonction ne me convient pas, elle est trop facile à lire

    Enfin, oui, Patrice740 a raison je n'ai pas donné toutes les explications.
    Pour faire court, j'essaye de cacher mon programme et j'ai pour cela créé un module d'encryptage/désencryptage.
    Pour les constantes, pas de souci c'est facile.
    Mais si je veux pousser un peu plus l'encryptage, je dois le faire aussi pour les instructions/expressions, d'où ma question.

    Je comprends qu'Excel n'est pas un programme permettant de protéger une source, mais je n'ai pas trop le choix et cherche donc à faire au mieux.
    Mes sources seront donc avec du faux code melé au vrai, encryptées, obfusquées puis protégées par mot de passe.
    Si le programme devait ensuite tomber entre de mauvaises mains j'espère que tout cela le découragera....

  6. #6
    Expert confirmé Avatar de Patrice740
    Homme Profil pro
    Retraité
    Inscrit en
    Mars 2007
    Messages
    2 475
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 475
    Points : 5 630
    Points
    5 630
    Par défaut
    Re,

    Protéger ton code ..... ????
    Contre quoi ????
    Il faut arrêter de croire qu'en VBA tu peux écrire quelque chose qui n'a pas déjà été écrit par quelqu'un d'autre.
    Il y a longtemps que la poudre a été inventée, et le fil à couper le beurre aussi ...
    Cordialement,
    Patrice
    Personne ne peut détenir tout le savoir, c'est pour ça qu'on le partage.

    Pour dire merci, cliquer sur et quand la discussion est finie, penser à cliquer sur

  7. #7
    Expert éminent sénior 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
    Points : 32 866
    Points
    32 866
    Par défaut
    Citation Envoyé par Dersou1 Voir le message
    Seul problème, il faut que je repasse mes formules VBA en Excel
    Dans te demande, la formule est inscrite dans le code.
    Si tu ne poses pas la bonne question, tu n'auras pas la bonne réponse.
    Et je sens que ton besoin est totalement différent de ce que tu demandes.

    La solution fonction ne me convient pas, elle est trop facile à lire
    C'est la première fois qu'on reproche à une solution d'être trop facile.
    Mais, de nouveau, si tu ne poses pas la bonne question, tu n'auras pas la bonne réponse.

    Pour faire court, j'essaye de cacher mon programme et j'ai pour cela créé un module d'encryptage/désencryptage.
    Une procédure de protection qui inclut VBA, c'est un gruyère.
    Quand on veut faire une application commerciale, on utilise des outils prévus pour.
    VBA, c'est un merveilleux couteau-suisse pour faciliter la vie mais ce n'est en aucun cas un outils adapté au développement d'applications à vendre.

    Mais si je veux pousser un peu plus l'encryptage, je dois le faire aussi pour les instructions/expressions, d'où ma question.
    Je ne vois pas trop quelle différence il pourrait y avoir entre l'encryptage d'une chaine de caractère et celui d'une formule.
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

  8. #8
    Candidat au Club
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Avril 2020
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2020
    Messages : 6
    Points : 4
    Points
    4
    Par défaut
    Bonjour Menhir,
    Merci de tes réponses.
    Citation Envoyé par Menhir Voir le message
    Dans te demande, la formule est inscrite dans le code.
    Si tu ne poses pas la bonne question, tu n'auras pas la bonne réponse.
    Et je sens que ton besoin est totalement différent de ce que tu demandes.
    Mais j'ai eu la bonne réponse par Philippe Tulliez, encore merci à lui
    Sa réponse résoud mon problème de comment mettre une expression dans une variable.
    Seule difficulté, je dois réécrire les expressions Vba en Excel US.

    Citation Envoyé par Menhir Voir le message
    C'est la première fois qu'on reproche à une solution d'être trop facile.
    Mais, de nouveau, si tu ne poses pas la bonne question, tu n'auras pas la bonne réponse.
    Oui, j'essaye de cacher comment est calculé un code et j'essaye donc que ce soit difficile à trouver.

    Citation Envoyé par Menhir Voir le message
    Une procédure de protection qui inclut VBA, c'est un gruyère.
    Quand on veut faire une application commerciale, on utilise des outils prévus pour.
    VBA, c'est un merveilleux couteau-suisse pour faciliter la vie mais ce n'est en aucun cas un outils adapté au développement d'applications à vendre.
    Je fais ce programme en Excel parce que c'est l'outil de mon entreprise et que les personnes qui vont recevoir ce prog utilisent Excel.
    Les protections de nos pc ne nous laissent rien installer(non admin) et je ne vais pas non plus me remettre à apprendre un nouveau langage.
    Je vois les différents post des experts qui expliquent qu'un programme Excel n'est pas protegeable.
    Mais il y aussi des posts qui expliquent comment rendre son code difficile, voir très difficile à percer.
    Je ne sais pas si mon code tombera un jour entre de mauvaises mains, mais si c'est la cas, alors je souhaite que la comprehension du programme prenne beaucoup de temps

    Citation Envoyé par Menhir Voir le message
    Je ne vois pas trop quelle différence il pourrait y avoir entre l'encryptage d'une chaîne de caractère et celui d'une formule.
    L'encryptage d'une chaîne de caractères se fait simplement en lançant ma procédure d'encryptage.
    Pour encrypter un formule, comme expliqué plus haut, l'utilisation d'Evaluate oblige a traduire le Vba en Excel US avant encryptage.

    Juste comme explication, voici un petit bout de code crypté avec une expression et une constante.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    ' Rajout d'un message sur la feuille FoundNumber
    ' If Year(Date) = 2021 And Month(Date) > 9 Then
    ' AND(YEAR(TODAY())=2021,MONTH(TODAY())>9)
    If Evaluate(DesMF("Þ”Qð^x/èötáô¹8ÿ·ùb¬tØ»à/ªzj|lYh…¢3aýê")) Then
    '   Range("a2") = "This program will stop working at the end of this year"
        Range("a2") = DesMF("ËÚë«Ú¹… (÷ÿ7ò*ÃÇ{L4ì«Ô㶫a*}1–€âbq=*!1ïżϽ‘nr°¿|÷û")
    End If
    Bien entendu, lors de la livraison du programme, l'obfuscation retirera les commentaires

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    If Evaluate(DesMF("Þ”Qð^x/èötáô¹8ÿ·ùb¬tØ»à/ªzj|lYh…¢3aýê")) Then
        Range("a2") = DesMF("ËÚë«Ú¹… (÷ÿ7ò*ÃÇ{L4ì«Ô㶫a*}1–€âbq=*!1ïżϽ‘nr°¿|÷û")
    End If
    Voilà, quelques centaines de lignes de ce type découragerons, je l'espère, une personne qui voudrait casser le code.

  9. #9
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 764
    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 : 12 764
    Points : 28 622
    Points
    28 622
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Si c'est réservé ) l'entreprise et donc au collègue, il me semble encore moins justifié de protéger le code.
    Cela fait plus de 25 ans que je programme en VBA et tout mes codes sont ouverts et peuvent être lu par mes clients mais je doute qu'il y ai eu des curieux.
    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

  10. #10
    Expert confirmé Avatar de Patrice740
    Homme Profil pro
    Retraité
    Inscrit en
    Mars 2007
    Messages
    2 475
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 475
    Points : 5 630
    Points
    5 630
    Par défaut
    Bonjour,

    Comme Philippe , en 25 ans j'ai très, très rarement vu quelqu'un mettre le nez dans le code de mes applications VBA.
    Je ne protège jamais mes codes et je n'utilise jamais de mot de passe sur les feuilles ou le classeur (chacun ses responsabilités).
    Quand c'est arrivé, c'était toujours à cause d'un bug : l'utilisateur essayait de se dépatouiller tout seul.

    Au lieu de se lancer sur des chemins tarabiscotés, il me parait primordial de s'attacher à écrire un code bien architecturé, le plus propre possible et donc en conséquence très simple à lire et à maintenir (même 20 ans après).
    Dans le même temps j'ai vu un tas de codes protégés, difficilement accessibles, qui tombent en désuétude au bout de quelques mois et il suffit de poser la question sur un forum pour trouver une solution alternative.
    Un vieux dicton professionnel : Les cimetières sont pleins de personnes qui se croyaient indispensables.

    Lorsqu'un code est suffisamment brillant pour mériter d'être protégé il existe un moyen très efficace : Le droit d'auteur
    Cordialement,
    Patrice
    Personne ne peut détenir tout le savoir, c'est pour ça qu'on le partage.

    Pour dire merci, cliquer sur et quand la discussion est finie, penser à cliquer sur

  11. #11
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 926
    Points
    55 926
    Billets dans le blog
    131
    Par défaut
    Salut.

    J'ai déjà vu du code obfusqué (c'était un truc en Excel/vba pour créer des itinéraires sur un gps de moto). Dans ce cas, ce qui est obfusqué, ce sont les noms des procédures, fonctions et variables, mais jamais les données elles-mêmes.

    Il existe des logiciels qui obfusquent le code VBA, mis l'obfuscation doit permettre au code de continuer à fonctionner alors qu'il est obfusqué car forcément, dans le cas que tu soulèves, ton code de cryptage/décryptage doit être en clair, ce qui enlève tout l'intérêt du cryptage et un simple STOP dans une procédure permettrait de stopper la macro et de voir tout en clair...

    Je rejoins les autres contributeurs: Soit ton truc en vaut vraiment la peine (ce dont je doute en Excel/VBA*), soit tu perds ton temps


    * Lorsque je dis "je doute que ça en vaille la peine", je ne mets pas en cause ton talent, ton code, etc. J'appuie simplement Patrice lorsqu'il te dit que ce qui devait être inventé l'a déjà été, et partagé de très nombreuses fois sur les forums.
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

Discussions similaires

  1. [Batch] Rechercher une expression dans une variable
    Par pol2095 dans le forum Scripts/Batch
    Réponses: 5
    Dernier message: 23/10/2015, 01h56
  2. Test/expression contenue dans une variable
    Par flogs dans le forum Général Python
    Réponses: 4
    Dernier message: 04/01/2012, 18h14
  3. [XSLT 2.0] Evaluation d'expression mathématique dans une variable string
    Par domas_24 dans le forum XSL/XSLT/XPATH
    Réponses: 5
    Dernier message: 25/01/2011, 14h49
  4. Réponses: 6
    Dernier message: 24/07/2003, 12h39
  5. [langage] Extraire un block dans une variable multiligne
    Par |DUCATI| DesMo dans le forum Langage
    Réponses: 9
    Dernier message: 11/02/2003, 14h56

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