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

Question avec Evaluate et Range

4 réponses
Avatar
DesseJ
Bonjour chers Excelliens,

J'ai une petite question par rapport =E0 Evaluate.
Si je suis positionn=E9 sur une feuille autre de celle o=F9 j'ai d=E9fini m=
a
plage, le r=E9sultat est incorrect puisqu'il prend dans le calcul la
plage de donn=E9es de la feuille active. En revanche, par formule voire
en pr=E9cisant la feuille, =E7a marche.

Est-ce normal ou suis-je =E9tourdi/inculte;o))) ?

Merci et bonne journ=E9e
St=E9phane

'=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D

Dim FeuilleCalc As Worksheet
Dim MaR As Range

Set FeuilleCalc =3D Worksheets("Feuil1")
Set MaR =3D FeuilleCalc.Range("A1:A10")
With Sheets("Feuil2")
MsgBox Evaluate("SUM(" & MaR.Address(0, 0) & ")") '=3D=3D=3D=3D=3D=
=3D=3D=3D>
Faux
MsgBox Evaluate("SUM(Feuil1!" & MaR.Address(0, 0) & ")")
'=3D=3D=3D=3D=3D=3D=3D=3D> Faux
.[B2].FormulaLocal =3D "=3DSOMME(" & MaR.Address(0, 0) & ")"
'=3D=3D=3D=3D=3D=3D=3D=3D> Faux
End With

4 réponses

Avatar
michdenis
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" a écrit dans le message de groupe de discussion :

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
Avatar
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
Avatar
michdenis
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" a écrit dans le message de groupe de discussion :

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
Avatar
DesseJ
Merci Denis pour tes explications comme d'habitude très claires.

Bonne journée
Stéphane