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

Set Plage sur une autre feuille que l'active ? VBA

12 réponses
Avatar
SylVBA
Bonsoir =E0 vous,

Je cherche des explications afin de mieux comprendre le
fonctionnement:

Mon but =E9tant de d=E9finir une Plage qui est variable, qui ne comporte
JAMAIS de valeur sur la premi=E8re ligne (commence toujours vers la
sixi=E8me ou septi=E8me ligne de la colonne A).
Range(Range("A1").End(xlDown), Range("A65536").End(xlUp)).select fait
l'affaire pour tester la formule, ensuite je n'utilise pas le .select
dans la commande bien sur !

Les imp=E9ratifs :
Je me trouve sur la feuil1 qui est la feuille active
Je souhaite d=E9finir une plage sur la feuille 2, dans mon code la
msgbox me donne bien l'adresse de la plage sans faire r=E9f=E9rence =E0 la
feuille, je change de feuille (.select et/ou .activate) et la je pense
pouvoir =AB tromper =BB le programme en lui demandant un traitement sur la
plage et non il fait le traitement sur la Feuil1, et sur la plage
d=E9finie avant (set Plage =3D)

Comment peut on faire pour d=E9finir une Plage (set Plage=3D) sur une
feuille qui n'est pas active ?
Peut on ensuite faire un traitement sur cette plage sans activer la
feuille (additionner tel le code ou faire un tri ?)

Sub Macro1()
Dim Plage As Range
Set Plage =3D Range(Range("A1").End(xlDown), Range("A65536").End(xlUp))
MsgBox Plage.Address 'la plage est bonne
With Sheets("Feuil2")
For Each C In Plage
C.Value =3D C.Value + 1
Next C
End With
End Sub

Mon id=E9al existe t'il: Set Plage =3D LaFeuille.LaRange variable..........
For each c in Plage
Faire ceci
Next c
Un grand merci aux contributeurs,

SylVBA

2 réponses

1 2
Avatar
SylVBA
Bsr,

je suis de retour et ca marche parfait !!

Merci à vous 2,

Bonne soirée et bravo encore pour votre patience et pertinence

Sylvie L.
Avatar
anonymousA
Content de voir que ca t'a été.

Tant que j'y pense, je peux aussi te proposer une autre manière de voir
les choses :

Tu écris dans le module de feuille "toto" , les instructions suivantes

Property Get LaRange() As Range

With Me
Set LaRange= .Range(.Range("A1").End(xlDown), .Range("A65536").End(xlUp))
End With

End Property

Puis dans tes modules standard ou d'autres feuilles d'ailleurs, si ta
feuille "toto" porte le codename Feuil1 ( attention pour écrire ce qui
est ci-dessous, il FAUT revenir au codename de feuille ), tu peux
utiliser la propriété rng de la feuille , exemple

Msgbox Feuil1.LaRange.address te renverra l'adresse de la plage utilisée
de la feuille "toto" même si tu n'es pas sur la feuille toto.

Tu vois qu'on est formellement de + en + proche de ton souhait initial
qui était d'écrire Set Plage = LaFeuille.LaRange. Si tu renommes de code
name de la feuille "toto" en LaFeuille tu pourras alors écrire
Set Plage = LaFeuille.LaRange , sinon il faudra écrire Set Plage =
Feuil1.LaRange

A+

Bsr,

je suis de retour et ca marche parfait !!

Merci à vous 2,

Bonne soirée et bravo encore pour votre patience et pertinence

Sylvie L.




1 2