Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Excel > Macros et VBA Excel
Macros et VBA Excel Vos questions relatives aux macros Excel, à l'utilisation de VBA et à l'automatisation de vos classeurs Excel.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 20/12/2011, 17h07   #1
Membre habitué
 
Avatar de issoram
 
Homme Zeco
Développeur informatique
Inscription : janvier 2009
Messages : 219
Détails du profil
Informations personnelles :
Nom : Homme Zeco
Localisation : France, Saône et Loire (Bourgogne)

Informations professionnelles :
Activité : Développeur informatique
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : janvier 2009
Messages : 219
Points : 121
Points : 121
Envoyer un message via MSN à issoram
Par défaut Problème avec Evaluate

Bonsoir,

Je n'arrive pas à faire fonctionner la fonction Evaluate avec la fonction Array:
Pour simplifier cela se résume à l'exemple si dessous:
Code :
1
2
3
Dim temp As Variant
temp = Evaluate("Array(1,2)")
Debug.Print UBound(temp)
J'obtiens l'erreur 2029 et l'aide microsoft sur ce type d'erreur ne correspond pas à mon problème.

Merci d'avance de votre aide.
issoram est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/12/2011, 17h35   #2
Expert Confirmé Sénior
 
Avatar de jfontaine
 
Homme Jérôme FONTAINE
Contrôleur de Gestion
Inscription : juin 2006
Messages : 3 918
Détails du profil
Informations personnelles :
Nom : Homme Jérôme FONTAINE
Âge : 38
Localisation : France, Sarthe (Pays de la Loire)

Informations professionnelles :
Activité : Contrôleur de Gestion

Informations forums :
Inscription : juin 2006
Messages : 3 918
Points : 7 231
Points : 7 231
Bonjour,

Utiliser evaluate comme cela
je ne pense pas que ce soit possible.

Quel est la finalité de ton code?

Peut être quelque chose comme cela
Code :
1
2
3
4
5
6
7
8
Dim Temp() As String
Dim str As String
 
str = "10,20,30"
 
Temp = Split(str, ",")
 
MsgBox Temp(2)
__________________
Jérôme

Citation:
"Ils ne savaient pas que c'était impossible, alors ils l'ont fait" - Marc Twain
Si la réponse répond à votre besoin, votre vote nous encouragera.
Dans le cas ou la réponse mérite, à vos yeux, un , nous faire partager la raison de ce vote, pourrait nous permettre de nous améliorer.
jfontaine est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/12/2011, 18h03   #3
Membre habitué
 
Avatar de issoram
 
Homme Zeco
Développeur informatique
Inscription : janvier 2009
Messages : 219
Détails du profil
Informations personnelles :
Nom : Homme Zeco
Localisation : France, Saône et Loire (Bourgogne)

Informations professionnelles :
Activité : Développeur informatique
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : janvier 2009
Messages : 219
Points : 121
Points : 121
Envoyer un message via MSN à issoram
Merci de ta réponse jfontaine,

Effectivement je me prends tellement le chou sur evaluate que je n'ai pas pensé à split qui peut être une bonne alternative.
Citation:
Utiliser evaluate comme cela
je ne pense pas que ce soit possible.
C'est ce que j'aimerais bien savoir, car par exemple ceci fonctionne:
Code :
1
2
3
Dim temp As Variant
temp = Evaluate("Exp(1)")
Debug.Print temp
Si quelqu'un a la réponse je suis preneur.
issoram est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/12/2011, 09h00   #4
Membre Expert
 
Avatar de ZebreLoup
 
Homme Sebastien L
Ingénieur Financier
Inscription : mars 2010
Messages : 880
Détails du profil
Informations personnelles :
Nom : Homme Sebastien L
Âge : 33
Localisation : France, Val de Marne (Île de France)

Informations professionnelles :
Activité : Ingénieur Financier
Secteur : Finance

Informations forums :
Inscription : mars 2010
Messages : 880
Points : 1 867
Points : 1 867
Evaluate sert à récupérer en VBA un objet Excel. Dans l'exemple que tu prends, EXP correspond à la fonction Excel (qui par hasard, est la même dans VBA cette fois). ARRAY n'est pas une fonction ou un objet Excel.
__________________
« Compter en octal, c’est comme compter en décimal, si on n’utilise pas ses pouces » - Tom Lehrer
« Il est assez difficile de trouver une erreur dans son code quand on la cherche. C’est encore bien plus dur quand on est convaincu que le code est juste. » - Steve McConnell
ZebreLoup est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/12/2011, 09h08   #5
Membre habitué
 
Avatar de issoram
 
Homme Zeco
Développeur informatique
Inscription : janvier 2009
Messages : 219
Détails du profil
Informations personnelles :
Nom : Homme Zeco
Localisation : France, Saône et Loire (Bourgogne)

Informations professionnelles :
Activité : Développeur informatique
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : janvier 2009
Messages : 219
Points : 121
Points : 121
Envoyer un message via MSN à issoram
Merci Zebreloup,

Y a-t-il alors une autre fonction que "evaluate" pour effectuer ce traitement?

Cordialement.
issoram est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/12/2011, 09h24   #6
Membre Expert
 
Avatar de ZebreLoup
 
Homme Sebastien L
Ingénieur Financier
Inscription : mars 2010
Messages : 880
Détails du profil
Informations personnelles :
Nom : Homme Sebastien L
Âge : 33
Localisation : France, Val de Marne (Île de France)

Informations professionnelles :
Activité : Ingénieur Financier
Secteur : Finance

Informations forums :
Inscription : mars 2010
Messages : 880
Points : 1 867
Points : 1 867
Quel traitement ? Tu veux faire quoi ?
Pour ton premier code,
Code :
1
2
3
Dim temp As Variant
temp = Array(1, 2)
Debug.Print UBound(temp)
fonctionne très bien
__________________
« Compter en octal, c’est comme compter en décimal, si on n’utilise pas ses pouces » - Tom Lehrer
« Il est assez difficile de trouver une erreur dans son code quand on la cherche. C’est encore bien plus dur quand on est convaincu que le code est juste. » - Steve McConnell
ZebreLoup est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/12/2011, 09h38   #7
Membre habitué
 
Avatar de issoram
 
Homme Zeco
Développeur informatique
Inscription : janvier 2009
Messages : 219
Détails du profil
Informations personnelles :
Nom : Homme Zeco
Localisation : France, Saône et Loire (Bourgogne)

Informations professionnelles :
Activité : Développeur informatique
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : janvier 2009
Messages : 219
Points : 121
Points : 121
Envoyer un message via MSN à issoram
Pour évaluer une fonction passée sous forme d'une chaine de caractères, de manière générale.

L'equivalent de
sous forme:
Code :
fonction_eval("fonction(argument)")
Le split proposé par jfontaine est pertinent pour mon problème. Je pose la question plus pour ma culture perso.

Cordialement.
issoram est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/12/2011, 10h02   #8
Membre Expert
 
Avatar de ZebreLoup
 
Homme Sebastien L
Ingénieur Financier
Inscription : mars 2010
Messages : 880
Détails du profil
Informations personnelles :
Nom : Homme Sebastien L
Âge : 33
Localisation : France, Val de Marne (Île de France)

Informations professionnelles :
Activité : Ingénieur Financier
Secteur : Finance

Informations forums :
Inscription : mars 2010
Messages : 880
Points : 1 867
Points : 1 867
Du coup j'ai creusé un peu en me disant que les fonctions VBA étaient aussi en fait des objets Excel et le code suivant fonctionne
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Option Explicit
 
Public Function donneNombre1() As Integer
    donneNombre1 = 8
End Function
Public Function donneNombre2() As Integer
    donneNombre2 = 15
End Function
 
Public Sub test()
    Dim indexTest As Integer
 
    indexTest = 1
    MsgBox Evaluate("donneNombre" & indexTest & "()")
 
    indexTest = 2
    MsgBox Evaluate("donneNombre" & indexTest & "()")
End Sub
Ca doit même marcher avec des variables globales publiques.

Je n'ai jamais eu besoin de travailler de cette manière, mais je le garde dans un coin de ma tête on ne sait jamais. D'ailleurs, ça me fait penser que ça pourrait être la solution à un post que j'ai vu il y a quelques jours, je vais essayer de le retrouver...

EDIT : Ça ne fonctionne pas avec les variables globales publiques, ce n'est pas un vrai équivalent du eval de certains langages.
__________________
« Compter en octal, c’est comme compter en décimal, si on n’utilise pas ses pouces » - Tom Lehrer
« Il est assez difficile de trouver une erreur dans son code quand on la cherche. C’est encore bien plus dur quand on est convaincu que le code est juste. » - Steve McConnell
ZebreLoup est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 21/12/2011, 16h16   #9
Membre habitué
 
Avatar de issoram
 
Homme Zeco
Développeur informatique
Inscription : janvier 2009
Messages : 219
Détails du profil
Informations personnelles :
Nom : Homme Zeco
Localisation : France, Saône et Loire (Bourgogne)

Informations professionnelles :
Activité : Développeur informatique
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : janvier 2009
Messages : 219
Points : 121
Points : 121
Envoyer un message via MSN à issoram
Citation:
EDIT : Ça ne fonctionne pas avec les variables globales publiques, ce n'est pas un vrai équivalent du eval de certains langages.
Mais du coup on peut feinter un peu!
Code :
1
2
3
4
5
6
7
8
9
10
11
Function Array_bis(a As Variant, b As Variant) As Variant
    Array_bis = Array(a, b)
End Function
 
Sub test()
    Dim temp As Variant
    temp = Evaluate("Array(1,2)")       'plante...
    Debug.Print TypeName(temp)          'affiche Error
    temp = Evaluate("Array_bis(1, 2)")  'fonctionne!!
    Debug.Print TypeName(temp)          'affiche Variant()
End Sub
Merci pour tes recherches en tous cas ZebreLoup!
issoram est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 20h38.


 
 
 
 
Partenaires

Hébergement Web