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

Le
Iznogood1
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:=ActiveSheet)
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
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses Page 1 / 2
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
isabelle
Le #26335919
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




isabelle
Le #26335924
une alternative,

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

isabelle
Iznogood1
Le #26335953
Merci Isabelle,

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

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

ActiveSheet.Copy After:¬tiveSheet
ActiveSheet.Calculate
isabelle
Le #26336009
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
MichD
Le #26336031
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!
Iznogood1
Le #26336334
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.
PatrIck
Le #26336333
Bonjour,

as-tu posé la question sur le forum:

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

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



"PatrIck"

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
MichD
Le #26336348
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...
Publicité
Poster une réponse
Anonyme