Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Général VBA
Général VBA Forum général VBA . Pour les logiciels spécifiques (Access, Excel, Word, ...), postez dans les bons sous forums.
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 15/03/2007, 10h23   #1
Candidat au titre de Membre du Club
 
Inscription : mars 2007
Messages : 41
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 41
Points : 11
Points : 11
Par défaut [VBA] Evaluation d'expression (PHP)

Salut za tous. Apapremment, notre ami vba ne veut pas de ce code suivant:

Code :
1
2
3
4
5
6
7
For i = 0 To 3
 
' Appelle la procédure en fct de i
 
Call "proc" & i
 
Next i
Certains crieront à l'infamie car Call ne prend pas de String en argument...oui mais alors comment appeler dynamiquement des fonctions Sub, un peu à la manière de PHP ?

Thanis guys pour vos réponses!!!
Scritch852 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/03/2007, 10h35   #2
Inactif
 
Avatar de ouskel'n'or
 
Inscription : février 2005
Messages : 12 466
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 12 466
Points : 11 930
Points : 11 930
Où t'as vu ça ?
ouskel'n'or est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/03/2007, 10h50   #3
Candidat au titre de Membre du Club
 
Inscription : mars 2007
Messages : 41
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 41
Points : 11
Points : 11
euh...Pas compris la réponse. En tout cas, ce que tu as écris ne fonctionne pas...
Scritch852 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/03/2007, 10h57   #4
Inactif
 
Avatar de ouskel'n'or
 
Inscription : février 2005
Messages : 12 466
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 12 466
Points : 11 930
Points : 11 930
Alors, c'est parce que tu as pris LeMot pour un mot, pas pour une variable. Faut pas prendre le mot au pied de la lettre...
Code :
1
2
LeMot = "J'ai pas compris ton problème..."
Call LaProc(LeMot)
Et dans la sub LaProc
Code :
1
2
3
Sub LaProc(QuoiLeMot)
     Msgbox QuoiLeMot
End sub
C'est mieux ?
A moinse que tu parles de fonction... Que veux-tu faire ?
ouskel'n'or est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/03/2007, 11h02   #5
Candidat au titre de Membre du Club
 
Inscription : mars 2007
Messages : 41
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 41
Points : 11
Points : 11
Non, mon probleme n'est pas au niveau de l'argument.

En fait j'ai plusieurs sub:

Code :
1
2
3
4
5
6
7
8
9
10
11
Sub routine_1
 
End Sub
 
Sub routine_2
 
End Sub
 
Sub routine_3
 
End Sub
Et je dois les appeler les unes après les autres. Je pourrais faire un :

Code :
1
2
3
4
5
6
7
8
9
10
Select Case nb
 
Case 1
Call routine_1
 
Case 2
Cass routine_2
 
etc.
End Select
Mais j'ai simplifié le problème. Ce que jecehrche a faire, c'est un truc du style:

Code :
1
2
3
4
5
For i = 1 to 3
 
Call routine_ & i
 
Next i
Il appellerait les routine dynamiquement, donc. En Action script, cela est possible en utilisant:

tout simplement!
Comment est-ce donc en VBA ?
Scritch852 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/03/2007, 11h07   #6
Inactif
 
Avatar de ouskel'n'or
 
Inscription : février 2005
Messages : 12 466
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 12 466
Points : 11 930
Points : 11 930
Code :
1
2
3
4
Sub RunLaProc()
LaSub = "LaProc" & i
     Application.Run "'Classeur.xls'!" & LaSub
End Sub
ouskel'n'or est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/03/2007, 18h50   #7
Membre Expert
 
Inscription : novembre 2006
Messages : 1 465
Détails du profil
Informations personnelles :
Âge : 49

Informations forums :
Inscription : novembre 2006
Messages : 1 465
Points : 1 411
Points : 1 411
tiens, j'y arrivais pas avec l'exemple de ouskel, j'ai donc adapté, ça ça marche aussi. mais c'e'st bien la même.
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Sub proc0()
MsgBox "0"
End Sub
Sub proc1()
MsgBox "1"
End Sub
Sub proc2()
MsgBox "2"
End Sub
Sub Proceduresenboucle()
For i = 0 To 2
procedure = "Proc" & i
     Application.Run procedure
     Next i
End Sub
alsimbad est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/03/2007, 18h53   #8
Membre Expert
 
Inscription : novembre 2006
Messages : 1 465
Détails du profil
Informations personnelles :
Âge : 49

Informations forums :
Inscription : novembre 2006
Messages : 1 465
Points : 1 411
Points : 1 411
hé même pour info, ça marche aussi
Code :
1
2
3
4
5
Sub Proceduresenboucle()
For i = 0 To 2
     Application.Run "Proc" & i
     Next i
End Sub
c'est bien le run le mot magique
alsimbad est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/03/2007, 19h10   #9
Inactif
 
Avatar de ouskel'n'or
 
Inscription : février 2005
Messages : 12 466
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 12 466
Points : 11 930
Points : 11 930
Citation:
Envoyé par alsimbad
tiens, j'y arrivais pas avec l'exemple de ouskel, j'ai donc adapté, ça ça marche aussi. mais c'e'st bien la même.
Code :
1
2
3
4
Sub proc0()
procedure = "Proc" & i
     Application.Run procedure
End Sub
Heureusement qu'on t'a et que tu as précisé qu'il fallait donner une valeur à i
ouskel'n'or est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/03/2007, 19h17   #10
Membre Expert
 
Inscription : novembre 2006
Messages : 1 465
Détails du profil
Informations personnelles :
Âge : 49

Informations forums :
Inscription : novembre 2006
Messages : 1 465
Points : 1 411
Points : 1 411
oops
alsimbad est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/03/2007, 19h21   #11
Membre Expert
 
Inscription : novembre 2006
Messages : 1 465
Détails du profil
Informations personnelles :
Âge : 49

Informations forums :
Inscription : novembre 2006
Messages : 1 465
Points : 1 411
Points : 1 411
Citation:
alsimbad a écrit :
tiens, j'y arrivais pas avec l'exemple de ouskel, j'ai donc adapté, ça ça marche aussi. mais c'e'st bien la même.

Code :
Sub proc0()
procedure = "Proc" & i
Application.Run procedure
End Sub


Heureusement qu'on t'a et que tu as précisé qu'il fallait donner une valeur à i

hé attend, je vois pas pourquoi je dis oups, j'ai jamais écris ça tel que tu le marque
alsimbad est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/03/2007, 19h35   #12
Inactif
 
Avatar de ouskel'n'or
 
Inscription : février 2005
Messages : 12 466
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 12 466
Points : 11 930
Points : 11 930
ouskel'n'or est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/03/2007, 17h17   #13
Candidat au titre de Membre du Club
 
Inscription : mars 2007
Messages : 41
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 41
Points : 11
Points : 11
je reviens pour ce petit problème qui est maintenant étendu.

Disons que j'aie 3 tableaux de strings déclarés par:

Code :
1
2
3
Dim tabl_1(10) As String
Dim tabl_2(10) As String
Dim tabl_3(10) As String
je voudrais les appeler par le code, mais en utilisant une évaluation d'expression, c'est a dire un truc du style:

Code :
1
2
3
For i = 1 To 3
[ "tabl" & i ](1) = "hello"
Next i
Ce qui aurait pour effet de mettre pour les 3 tableaux du haut la chaine "hello" dans l'indice 1.

Cela est-il possible dans VBA ??
Scritch852 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/03/2007, 17h35   #14
Inactif
 
Avatar de ouskel'n'or
 
Inscription : février 2005
Messages : 12 466
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 12 466
Points : 11 930
Points : 11 930
Regarde
Regarde en bas du code comment ça s'utilise
ouskel'n'or est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 21h05.


 
 
 
 
Partenaires

Hébergement Web