Question avec Evaluate et Range

Le
DesseJ
Bonjour chers Excelliens,

J'ai une petite question par rapport à Evaluate.
Si je suis positionné sur une feuille autre de celle où j'ai défini m=
a
plage, le résultat est incorrect puisqu'il prend dans le calcul la
plage de données de la feuille active. En revanche, par formule voire
en précisant la feuille, ça marche.

Est-ce normal ou suis-je étourdi/inculte;o))) ?

Merci et bonne journée
Stéphane

'=
=

Dim FeuilleCalc As Worksheet
Dim MaR As Range

Set FeuilleCalc = Worksheets("Feuil1")
Set MaR = FeuilleCalc.Range("A1:A10")
With Sheets("Feuil2")
MsgBox Evaluate("SUM(" & MaR.Address(0, 0) & ")") '
>
Faux
MsgBox Evaluate("SUM(Feuil1!" & MaR.Address(0, 0) & ")")
'==> Faux
.[B2].FormulaLocal = "=SOMME(" & MaR.Address(0, 0) & ")"
'==> Faux
End With
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
michdenis
Le #20500761
Bonjour,

Essaie ceci : Si ton code est dans un module feuille autre que
la "feuil1", utilise ceci si tu veux additionner la plage de
la feuil1!A1:A10

'------------------------------
With Sheets("Feuil2")
MsgBox Evaluate("SUM(Feuil1!" & MaR.Address(0, 0) & ")")
End With
'------------------------------

Il ne faut jamais oublier que les plages désignées dans un module de classe "Feuille"
sont réputées appartenir à la feuille d'où le code est écrit sauf si on prend soin
de faire référence à la feuille d'où la plage provient.





"DesseJ"
Bonjour chers Excelliens,

J'ai une petite question par rapport à Evaluate.
Si je suis positionné sur une feuille autre de celle où j'ai défini ma
plage, le résultat est incorrect puisqu'il prend dans le calcul la
plage de données de la feuille active. En revanche, par formule voire
en précisant la feuille, ça marche.

Est-ce normal ou suis-je étourdi/inculte;o))) ?

Merci et bonne journée
Stéphane

'========================
Dim FeuilleCalc As Worksheet
Dim MaR As Range

Set FeuilleCalc = Worksheets("Feuil1")
Set MaR = FeuilleCalc.Range("A1:A10")
With Sheets("Feuil2")
MsgBox Evaluate("SUM(" & MaR.Address(0, 0) & ")") '========>
Faux
MsgBox Evaluate("SUM(Feuil1!" & MaR.Address(0, 0) & ")")
'========> Faux
.[B2].FormulaLocal = "=SOMME(" & MaR.Address(0, 0) & ")"
'========> Faux
End With
DesseJ
Le #20501471
Merci MichDenis pour les précisions.

je n'avais pas été assez explicite, le code était dans une feuille
Module et non de Feuille et j'essayais de corriger la dernière ligne
du code plus bas

Merci Stéphane


Sub MonTest()
Dim FeuilleCalc As Worksheet
Dim MaR As Range
Set FeuilleCalc = Worksheets("Feuil1")
Set MaR = FeuilleCalc.Range("A1:A10")
With Sheets("Feuil2")
.Activate
MsgBox Evaluate("SUM(Feuil1!" & MaR.Address(0, 0) & ")")
'========> OK
[B2].FormulaLocal = "=SOMME(" & MaR.Address(0, 0) & ")"
'========> OK
MsgBox Evaluate("SUM(" & MaR.Address(0, 0) & ")") '===== ===>
Faux
End With
End Sub
michdenis
Le #20501711
Si la commande est dans un module standard, elle
additionnera la plage A1:A10 de la feuil1, comme
tu as défini tes variables même si la feuille active
n'est pas la Feuil1
MsgBox Evaluate("SUM(" & MaR.Address(0, 0) & ")")

Cependant, si tu veux que "MaR.Address(0, 0)" fasse référence
à la feuil2 et de ce fait tienne compte du With Sheets("Feuil2")
il te faut écrire quelque chose comme :

With Sheets("Feuil2")
MsgBox Evaluate("SUM(" & .Name & "!" & MaR.Address(0, 0) & ")")
End With



"DesseJ"
Merci MichDenis pour les précisions.

je n'avais pas été assez explicite, le code était dans une feuille
Module et non de Feuille et j'essayais de corriger la dernière ligne
du code plus bas

Merci Stéphane


Sub MonTest()
Dim FeuilleCalc As Worksheet
Dim MaR As Range
Set FeuilleCalc = Worksheets("Feuil1")
Set MaR = FeuilleCalc.Range("A1:A10")
With Sheets("Feuil2")
.Activate
MsgBox Evaluate("SUM(Feuil1!" & MaR.Address(0, 0) & ")")
'========> OK
[B2].FormulaLocal = "=SOMME(" & MaR.Address(0, 0) & ")"
'========> OK
MsgBox Evaluate("SUM(" & MaR.Address(0, 0) & ")") '========>
Faux
End With
End Sub
DesseJ
Le #20519111
Merci Denis pour tes explications comme d'habitude très claires.

Bonne journée
Stéphane
Publicité
Poster une réponse
Anonyme