Vba - set + sub

Nenesandco

XLDnaute Nouveau
Bonjour à tous,


Est-il possible d'inscrire une procédure SET en dehors d'une procédure SUB ?

Je m'explique : j'ai une variable que je souhaite reprendre dans tous mes modules. Cette variable représente une plage de cellules. J'ai inscrit Public devant la variable.

Enfin j'ai voulu attribuer une plage à cette dite variable en inscrivant Set :

Code:
'Feuille REF:
'Table Lieux de la feuille REF
Public Lieux As Range
    Set Lieux = Sheets(5).Range("A1:H141")

Sub

End Sub

Seulement, quand je lance ma macro, on m'indique "Instruction incorrecte à l'extérieure d'une procédure".

Comment puis-je faire ?

Cela veut-il dire qu'il faudra que je redéfinisse à chaque fois ma plage alors que la variable reste la même ?

Merci pour vos lumières ! :)
 

Dranreb

XLDnaute Barbatruc
Re : Vba - set + sub

Bonjour.
Non, ça signifie qu'une instruction exécutable n'est valide qu'à l'intérieur d'une procédure, qui peut s'exécuter.
Peut être que ce qui irait bien, c'est un nom dans le classeur se référant à cette plage. Il suffirait de le spécifier entre [] dans le code.
 
Dernière édition:

mromain

XLDnaute Barbatruc
Re : Vba - set + sub

Bonjour à tous,

Une solution serait de rajouter une propriété (en lecture seule) au classeur en rajoutant ce code dans le module ThisWorkbook :
VB:
Public Property Get Lieux() As Range:
    Set Lieux = ThisWorkbook.Sheets(5).Range("A1:H141")
End Property
Ainsi, on peut accéder à la Range depuis partout avec ce code :
VB:
ThisWorkbook.Lieux

A+
 

ctiquoi

XLDnaute Nouveau
Re : Vba - set + sub

Bonjour,

Est-il possible d'inscrire une procédure SET en dehors d'une procédure SUB

Code:
'======= Module standard 1

Private m_Lieux As Range

Public Property Set Lieux(argRange As Range)

    Set m_Lieux = argRange

End Property

Public Property Get Lieux() As Range

    Set Lieux = m_Lieux

End Property

Code:
'======= Module standard 2

Public Sub MaPlage()

    Dim x As Range

    Set x = ActiveSheet.Range("A1:A1")

    Set Lieux() = x

    Set x = Lieux()

    Debug.Print x.Value

End Sub

C'est ça ?
 

Staple1600

XLDnaute Barbatruc
Re : Vba - set + sub

Bonsoir à tous


Je suis l'avis de Dranreb
Mettre cette ligne dans WorkBook_Open
Sheets(5).Range("A1:H141").Name = "Lieux"

On peut alors utiliser Lieux partout dans le code
Code:
Sub b()
MsgBox [Lieux].Address
End Sub
Code:
Sub C()
MsgBox [Lieux].Count
End Sub
 

MJ13

XLDnaute Barbatruc
Re : Vba - set + sub

Bonjour à tous

En général, je nomme ma zone sur la feuille zone par exemple puis j'écris dans la macro Range("zone").

A tester :).

De plus, il suffit de taper F5 pour voir et aller vers les zones nommées.
 

Discussions similaires

Réponses
7
Affichages
367
Réponses
2
Affichages
120

Statistiques des forums

Discussions
312 304
Messages
2 087 061
Membres
103 447
dernier inscrit
DamD