Bonjour,
Mon objectif est de réaliser différentes opérations sur 2 tableaux (MatriceA et MatriceB). Ces opérations sont définies comme étant à réaliser(1) ou non(0) dans un tableau de booléens ProcX().
Je suis arrivé à mes fins, la procédure "Init_Operation" est fonctionnelle mais...
J'aimerais remplacer le "vilain code" de la procédure "Init_Operation" par celui de la procédure "Init_Operation_bis" en utilisant CallByName pour me permettre de gérer les opérations plus proprement.
Evidemment "Init_Operation_bis" ne fonctionne pas comme je veux...
La liste des opérations : (j'ai élagué, le contenu de ces procédures importe peu...)
La procédure qui fonctionne :
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 Sub RotationG(ByRef MatA, MatB, Chg) ... End Sub Sub RotationD(ByRef MatA, MatB, Chg) ... End Sub Sub Inversion(ByRef MatA, MatB, Chg) ... End Sub Sub MirroirHt(ByRef MatA, MatB, Chg) ... End Sub Sub MirroirVt(ByRef MatA, MatB, Chg) ... End Sub
La procédure -que j'aimerais à l'identique- mais qui ne fonctionne pas :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 Sub Init_Operation(ByRef MatriceA, MatriceB, Proc, Change) Dim i As Integer For i = 1 To 11 If Proc(i) Then Select Case i Case 1: Call RotationG(MatriceA, MatriceB, Change) Case 2: Call RotationD(MatriceA, MatriceB, Change) Case 3: Call Inversion(MatriceA, MatriceB, Change) Case 4: Call MirroirHt(MatriceA, MatriceB, Change) Case 5: Call MirroirVt(MatriceA, MatriceB, Change) End Select End If Next End Sub
Quelques initialisations et le lancement des procédures "Init_Operation" et "Init_Operation_bis" :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 Sub Init_Operation_bis(ByRef MatriceA, MatriceB, Proc, Change) For i = 1 To 11 If Proc(i) Then Call CallByName(ActiveSheet, nProc(i), VbMethod, MatriceA, MatriceB, Change) 'Call Application.Run(nProc(i), MatriceA, MatriceB, Change) End If Next End Sub
-L'utilisation de CallByName me renvoie une «erreur 438 : propriété ou méthode non gérée par cet objet»
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
20
21 Dim nProc() As Variant Sub Main() Dim MatriceA() As Variant : Dim MatriceB() As Variant Dim Proc1() As Variant : Dim Proc2() As Variant Dim Change As Boolean MatriceA = Array(Array(1, 2, 3), Array(4, 5, 6), Array(7, 8, 9)) MatriceB = Array(Array(7, 8, 9), Array(4, 5, 6), Array(1, 2, 3)) Proc1 = Array(1, 1, 1, 0, 0) Proc2 = Array(0, 0, 1, 1, 1) Call Operation(MatriceA, MatriceB, Proc1, Change) Call Operation(MatriceA, MatriceB, Proc2, Change) nProc = Array("RotationG", "RotationD", "Inversion", "MirroirHt", "MirroirVt") Call Operation_bis(MatriceA, MatriceB, Proc1, Change) Call Operation_bis(MatriceA, MatriceB, Proc2, Change) End Sub
Le problème doit venir du trop grand nombre d'arguments envoyés (2 tableaux et 1 booléen) dans le CallByName, je ne sais pas faire...
-L'utilisation de Application.Run lance bien l'opération mais ne retourne rien : le ByRef semble ignoré...
Merci pour votre aide
Partager