Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

VBA - Bug lors de la duplication d'une feuille avec formule matricielle

13 réponses
Avatar
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

Est-ce un bug d'XL?
(version test=E9e : XL 2007)

Merci

10 réponses

1 2
Avatar
isabelle
bonjour izso,

sur excel 2010, j’obtiens le même résultat que toi,
ça m'a l'air d'un un bug d'XL

isabelle

Le 2015-01-27 08:53, Iznogood1 a écrit :
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




Avatar
isabelle
une alternative,

ActiveSheet.Copy After:¬tiveSheet
DoEvents
Application.SendKeys "^%+{F9}", True

isabelle
Avatar
Iznogood1
Merci Isabelle,

j'avais bien tenté "F9", mais sans succès.
La solution est bien CTRL+ALT+F9 !
Avatar
MichD
Bonjour,

Qu'est-ce qui se passe si tu fais comme ceci ?

ActiveSheet.Copy After:¬tiveSheet
ActiveSheet.Calculate
Avatar
isabelle
bonjour Denis,

ActiveSheet.Calculate
ne fonctionne pas
et
Application.CalculateFullRebuild
ne fonctionne pas non plus

http://cjoint.com/?EACozyPWSpH

isabelle


Le 2015-01-28 06:27, MichD a écrit :
Bonjour,

Qu'est-ce qui se passe si tu fais comme ceci ?

ActiveSheet.Copy After:¬tiveSheet
ActiveSheet.Calculate
Avatar
MichD
Merci Isabelle.

Je crois que la méthode "Calculate" ne s'applique pas, car la formule ne
contient que des constantes, elle ne fait pas référence à une ou des plages
de cellules.

Même après que la feuille est copiée, la commande par exemple :
Range("A1").Calculate ne fonctionne pas!
Avatar
Iznogood1
Non seulement ActiveSheet.Calculate ou Application.CalculateFull
ne fonctionne pas, mais provoque des résultats bizarre (matrice originale modifiée).

Pourtant Application.CalculateFull est le code retourné par l'enregistreu r de macro quand on fait CTRL+ALT+F9.

C'est vraiment surprenant.
Avatar
PatrIck
Bonjour,

as-tu posé la question sur le forum:

http://www.excel-downloads.com/forum/forum-excel/

Patrick
Avatar
Patrick
mais il y a le même nom, c'est peut être toi :)



"PatrIck" a écrit dans le message de news:


Bonjour,

as-tu posé la question sur le forum:

http://www.excel-downloads.com/forum/forum-excel/

Patrick



---
L'absence de virus dans ce courrier electronique a ete verifiee par le logiciel antivirus Avast.
http://www.avast.com
Avatar
MichD
Les 2 formules matricielles sont dans une "plage matricielle" c'est-à-dire
que l'on ne peut pas modifier le contenu d'une des cellules de la matrice
A1:B1

Suppose par exemple que tu veuilles évaluer leur formule en vba,
'-------------------------------------------
Dim C As Range
For Each C In Range("A1:b1")
If C.HasArray Then 'Si la formule est matricielle
x = Evaluate(C.FormulaArray)
End If
Next
End Sub
'-------------------------------------------

Dans la feuille de calcul, les cellules affichent 5 et 7.
En VBA, le résultat de chacune des formules est évalué individuellement et
retourne dans les 2 cas 5.


Un autre exemple suppose qu'en VBA tu veux recopier ces formules dans une
autre plage de cellules
'-------------------------------------------
Sub test()
Dim F As String
F = Range("A1").FormulaArray
Range("A3:B3").FormulaArray = F
End Sub
'-------------------------------------------

A3:B3 a les mêmes formules matricielles que la plage "A1:B1" et pourtant les
2 cellules affichent comme résultat 3 exactement après avoir fait une copie
de la feuille dans le même classeur.

Lorsque les formules renferment des plages de cellules au lieu de
constantes, les formules sont calculées correctement.

On peut en "conclure" que la commande "raccourci clavier" utilise un autre
paradigme lorsqu'il s'agit de faire l'évaluation des formules contenues dans
la feuille. 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...
1 2