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 :

Evaluate renvoie le nom passé comme argument !


Sujet :

Macros et VBA Excel

  1. #1
    Membre chevronné
    Avatar de Bigalo
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    445
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 445
    Par défaut Evaluate renvoie le nom passé comme argument !
    Bonsoir à tous.

    Cela fait longtemps que je ne suis pas passé ici !

    J'ai développé il y a longtemps une application pour un client, sous Mac OS : la première version doit avoir une quinzaine d’années et avait été écrite avec les macros Excel 4 (le langage qui a précédé VBA).

    J'ai ensuite fait un portage en VBA sous Excel 98 (homologue de la version 97 sous Windows), et des compléments ont été développés depuis. Depuis de nombreuses années, la version utilisée était Excel X (la première version pour Mac OS 10). Cette version avait été conservée car sous Excel 2004, VBA est beaucoup + instable. Quant à Excel 2008, elle ne comporte pas VBA !

    Je suis intervenu à plusieurs reprises en faisant des tests avec la version 2007 qui fonctionnait sans problème.

    J'ai récemment conseillé au client de passer sous Excel 2011 (homologue de la version 2010 sous Windows). Cette version comporte à nouveau VBA, et pour la première fois, une version Mac repose sur VB6, et non plus VB5.

    Tout ce que j’avais lu semblait indiquer qu’un même code tournait à l’identique sous Excel 2010 et 2011 (sauf les éléments spécifiques à Windows, faisant appel à des dll, ou à VBScript.

    Or après avoir installé Office 2011, plus rien ne marche.

    Le problème a été identifié, c'est Evaluate dont le comportement est aberrant ; voici un test :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        ActiveWorkbook.Names.Add "PlafondURSSAF", 2946
        MsgBox ActiveSheet.Evaluate("PlafondURSSAF")
    affiche PlafondURSSAF au lieu de 2946 !

    Quelqu'un a-t-il été confronté au même problème ? Je n'ai pas pu tester sous Excel 2010, aucun de mes clients ne l’ayant, et moi non plus.

    Quelqu'un a-t-il rencontré ce même comportement ?

    Merci d’avance !

  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 187
    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 187
    Billets dans le blog
    53
    Par défaut
    Bonsoir Michel,
    Je n'ai pas de MAC mais par contre j'ai testé le code sous Excel 2007 et 2010 (version pro) et il n'y a aucun problème. Il affiche bien 2946
    Philippe Tulliez
    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é
    Avatar de Bigalo
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    445
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 445
    Par défaut
    Bonsoir corona,

    Merci pour la confirmation en ce qui concerne la version 2010.

    Joyeuses fêtes !

  4. #4
    Modérateur
    Avatar de AlainTech
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2005
    Messages
    4 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2005
    Messages : 4 235
    Par défaut
    Bonjour,

    Je ne peux pas tester sur Mac non plus mais j'ai fait ce test sous 2003:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        MsgBox ActiveSheet.Evaluate([PlafondURSSAF])
    La bonne valeur est renvoyée.

    Peux-tu faire l'essai?

    D'un autre côté, je relève une incohérence dans ton code.
    Tu ajoutes le Name à ActiveWorkbook et tu le lis dans ActiveSheet.
    Mais je suppose que tu as fait ce petit bout de code pour l'exemple...
    N'oubliez pas de cliquer sur quand vous avez obtenu ou trouvé vous-même la réponse à votre question.
    Si vous trouvez seul, pensez à poster votre solution. Elle peut servir à d'autres!
    Pensez aussi à voter pour les réponses qui vous ont aidés.
    ------------
    Je dois beaucoup de mes connaissances à mes erreurs!

  5. #5
    Membre chevronné
    Avatar de Bigalo
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    445
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 445
    Par défaut
    Bonsoir,

    Peux-tu faire l'essai ?
    C’est inutile; Cela fait longtemps que j’utilise Evaluate, avec de nombreuses versions d’Excel (97, 2000, 2002, 2003 et 2007 sous Windows, 98, X et 2004 sur Mac). Je n’ai jamais eu le moindre problème.

    C’est pour cela que je tombe des nues avec ce résultat sous 2011.

    D'un autre côté, je relève une incohérence dans ton code.
    Tu ajoutes le Name à ActiveWorkbook et tu le lis dans ActiveSheet.
    Mais je suppose que tu as fait ce petit bout de code pour l'exemple...
    Ce n’est pas vraiment une incohérence : la méthode Evaluate n’est pas disponible pour l’objet Workbook.

    L’emploi de ActiveSheet revient à définir le nom "PlafondURSSAF ", de niveau classeur, et à en tester la valeur associée, en entrant la formule "= PlafondURSSAF" dans une cellule de l’une des feuilles du classeur.

    Il ne pourrait y avoir de problème que si le même nom était défini à la fois au niveau classeur et au niveau feuille, en faisant référence à des éléments distincts. Ce n’est pas le cas, car comme tu l’as deviné, j’ai fait ce bout de code pour l’exemple.

    PS - Je suis également un peu surpris par ton code :

    Pourquoi écrire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        MsgBox ActiveSheet.Evaluate([PlafondURSSAF])
    alors que

    suffit ? C’est la première fois que je vois quelqu’un utiliser à la fois Evaluate ET des crochets. En principe, les crochets sont un raccourci qui permet de se passer d’Evaluate, ce qui permet d’écrire les choses de façon + concise. Si on les utilise, Evaluate est inutile.

    Personnellement, je préfère Evaluate pour 2 raisons : je trouve désagréable l’emploi des crochets avec un clavier français (que ce soit sous Windows ou sur Mac), et surtout parce que c’est plus souple : on peut concaténer différents éléments dont des variables définies dans le code VBA, ce qui n’est pas possible avec les crochets.

    J’ai acheté Office 2011, et je vais l’installer sur un Mac, pour voir si j’aboutis à la même aberration, en ce qui concerne Evaluate.

    Je vous tiens au courant.

    Merci quand même, d’avoir tenté de m’aider, et bon Noël !

Discussions similaires

  1. Réponses: 2
    Dernier message: 13/11/2009, 14h34
  2. Récupérer un nom de variable passé en argument
    Par supertino7 dans le forum Langage
    Réponses: 6
    Dernier message: 14/10/2008, 19h12
  3. Réponses: 7
    Dernier message: 22/06/2008, 01h05
  4. Affichage bizzare d'une url passée comme argument
    Par Bruno.C dans le forum Langage
    Réponses: 3
    Dernier message: 30/01/2008, 19h39
  5. Réponses: 6
    Dernier message: 06/04/2007, 22h20

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