VBA - Bug lors de la duplication d'une feuille avec formule matricielle
13 réponses
Iznogood1
Bonjour,
Exemple simpliste =E0 fin d'illustration :
Soit la formule matricielle =3D{SOMME(INDEX({1\2;4\5};0;{1\2}))}
sur 2 cellules adjacentes (valid=E9e par shift + entr=E9e)
qui renvoie la somme de chaque colonne, soit la matrice {5\7}
(1+4 =3D 5 et 2+5 =3D7).
Quand je duplique la feuille manuellement, tout est OK.
Si je la duplique par VBA (ActiveSheet.Copy After:=3DActiveSheet)
la formule n'est pas "calcul=E9e/mise =E0 jour" et renvoie {3\3} !
Voir la d=E9mo ci-jointe http://cjoint.com/?EABpczObRmH
Suppose que tu as en A1 ceci : 1+2+3+4 (sans le symbole =") et que tu veux faire la somme à partir d'une autre cellule, peux-tu le faire même en utilisant la fonction "Indirect()" ? Tu vas avoir besoin d'une fonction personnalisée ressemblant à ceci : '----------------------------------------------- Function Eval(Rg As Range) Eval = Evaluate("sum(" & Rg & ")") End Function '-----------------------------------------------
et dans une cellule la formule : =Eval(A1)
Pourtant, En VBA, c'est relativement facile : Msgbox Evaluate("sum(" & Range("A1") & ")")
Encore une fois, il y a des différences entre ce que le code peut faire et ce que la feuille sait faire!
Un autre petit exemple :
Suppose que tu as en A1 ceci : 1+2+3+4 (sans le symbole =") et que tu
veux faire la somme à partir d'une autre cellule, peux-tu le faire même en
utilisant la fonction "Indirect()" ? Tu vas avoir besoin d'une fonction
personnalisée ressemblant à ceci :
'-----------------------------------------------
Function Eval(Rg As Range)
Eval = Evaluate("sum(" & Rg & ")")
End Function
'-----------------------------------------------
et dans une cellule la formule : =Eval(A1)
Pourtant,
En VBA, c'est relativement facile : Msgbox Evaluate("sum(" & Range("A1") &
")")
Encore une fois, il y a des différences entre ce que le code peut faire et
ce que la feuille sait faire!
Suppose que tu as en A1 ceci : 1+2+3+4 (sans le symbole =") et que tu veux faire la somme à partir d'une autre cellule, peux-tu le faire même en utilisant la fonction "Indirect()" ? Tu vas avoir besoin d'une fonction personnalisée ressemblant à ceci : '----------------------------------------------- Function Eval(Rg As Range) Eval = Evaluate("sum(" & Rg & ")") End Function '-----------------------------------------------
et dans une cellule la formule : =Eval(A1)
Pourtant, En VBA, c'est relativement facile : Msgbox Evaluate("sum(" & Range("A1") & ")")
Encore une fois, il y a des différences entre ce que le code peut faire et ce que la feuille sait faire!
GL
Le 30/01/2015 12:37, MichD a écrit :
Les créateurs (programmeurs) de la feuille et du code VBA ne sont pas les mêmes et je suppose qu'ils répondent à des prérogatives propres à leur environnement et qu'il y a des différences...
Ah ! Mamamia ! Si seulement Micro$oft pouvait n'avoir jamais inventé le Basic !!!
Le 30/01/2015 12:37, MichD a écrit :
Les créateurs (programmeurs) de la feuille et
du code VBA ne sont pas les mêmes et je suppose qu'ils répondent à des
prérogatives propres à leur environnement et qu'il y a des différences...
Ah ! Mamamia !
Si seulement Micro$oft pouvait n'avoir jamais inventé le Basic !!!
Les créateurs (programmeurs) de la feuille et du code VBA ne sont pas les mêmes et je suppose qu'ils répondent à des prérogatives propres à leur environnement et qu'il y a des différences...
Ah ! Mamamia ! Si seulement Micro$oft pouvait n'avoir jamais inventé le Basic !!!
Patrick
re,
ici aussi il y a des spécialistes :) http://www.mrexcel.com/forum/forum.php
Patrick
"Iznogood1" a écrit dans le message de news:
Bonjour,
Exemple simpliste à fin d'illustration :
Soit la formule matricielle ={SOMME(INDEX({12;45};0;{12}))} sur 2 cellules adjacentes (validée par shift + entrée) qui renvoie la somme de chaque colonne, soit la matrice {57} (1+4 = 5 et 2+5 =7).
Quand je duplique la feuille manuellement, tout est OK. Si je la duplique par VBA (ActiveSheet.Copy After:¬tiveSheet) la formule n'est pas "calculée/mise à jour" et renvoie {33} !
Voir la démo ci-jointe http://cjoint.com/?EABpczObRmH
Est-ce un bug d'XL? (version testée : XL 2007)
Merci
--- L'absence de virus dans ce courrier electronique a ete verifiee par le logiciel antivirus Avast. http://www.avast.com
re,
ici aussi il y a des spécialistes :)
http://www.mrexcel.com/forum/forum.php
Patrick
"Iznogood1" <izsobad1@gmail.com> a écrit dans le message de news:
39d504a8-e37d-45a7-8a0c-0cc4ad795565@googlegroups.com...
Bonjour,
Exemple simpliste à fin d'illustration :
Soit la formule matricielle ={SOMME(INDEX({12;45};0;{12}))}
sur 2 cellules adjacentes (validée par shift + entrée)
qui renvoie la somme de chaque colonne, soit la matrice {57}
(1+4 = 5 et 2+5 =7).
Quand je duplique la feuille manuellement, tout est OK.
Si je la duplique par VBA (ActiveSheet.Copy After:¬tiveSheet)
la formule n'est pas "calculée/mise à jour" et renvoie {33} !
Voir la démo ci-jointe http://cjoint.com/?EABpczObRmH
Est-ce un bug d'XL?
(version testée : XL 2007)
Merci
---
L'absence de virus dans ce courrier electronique a ete verifiee par le logiciel antivirus Avast.
http://www.avast.com
ici aussi il y a des spécialistes :) http://www.mrexcel.com/forum/forum.php
Patrick
"Iznogood1" a écrit dans le message de news:
Bonjour,
Exemple simpliste à fin d'illustration :
Soit la formule matricielle ={SOMME(INDEX({12;45};0;{12}))} sur 2 cellules adjacentes (validée par shift + entrée) qui renvoie la somme de chaque colonne, soit la matrice {57} (1+4 = 5 et 2+5 =7).
Quand je duplique la feuille manuellement, tout est OK. Si je la duplique par VBA (ActiveSheet.Copy After:¬tiveSheet) la formule n'est pas "calculée/mise à jour" et renvoie {33} !
Voir la démo ci-jointe http://cjoint.com/?EABpczObRmH
Est-ce un bug d'XL? (version testée : XL 2007)
Merci
--- L'absence de virus dans ce courrier electronique a ete verifiee par le logiciel antivirus Avast. http://www.avast.com