Set Plage sur une autre feuille que l'active ? VBA
12 réponses
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,
Bonne soirée et bravo encore pour votre patience et pertinence
Sylvie L.
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.
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
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