Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Déclaration d'une variable "Public"

Magic_Doctor

XLDnaute Barbatruc
Bonjour,

En début de module (sous "Option Explicit", pour ceux qui le mettent d'office) je déclare une variable "Public" que je nomme "BigPlage".

J'écris :

Option Explicit
Public BigPlage As Range

Or "BigPlage", c'est TOUJOURS Union([AC46], [AM46], [AW46], [AX46])

Évidemment, en écrivant :
Public BigPlage As Range = Union([AC46], [AM46], [AW46], [AX46])
ça ne marche pas.

Comment s'y prendre alors ?
 

ChTi160

XLDnaute Barbatruc
Bonjour Magic_Doctor
Bonjour Le Fil ,Le Forum
peut être en mettant ?
VB:
Const BigPlage As String = "AC46, AM46, AW46, AX46"
Sub test()
MsgBox Range(BigPlage).Address
End Sub

Bonne journée
Amicalement
Jean marie
 
Dernière édition:

job75

XLDnaute Barbatruc
Bonjour Magic_Doctor, ChTi60, cp4,

Le plus classique est d'initialiser dans la Workbook_Open la variable déclarée Public (dans un Module standard).

Une autre solution consiste à utiliser un nom défini au lieu d'une variable VBA.

A+
 

Magic_Doctor

XLDnaute Barbatruc
Bonsoir job,

Bien qu'en fait je ne pense pas que cela puisse me servir pour résoudre un autre problème, j'ai tenté ta 2ème solution ne serait-ce que par curiosité.
Je suis allé à Formule/Administrateur de noms (je traduis...), et là :
Nom : tartampion
Fait référence à : =Union(Range("AC46"); Range("AM46"); Range("AW46"); Range("AX46"))

Dans une petite routine j'écris :
[tartampion].Select ---> ne marche pas

Mais nom de scrogneugneu, où me suis-je donc encore planté ?
 

Staple1600

XLDnaute Barbatruc
Bonsoir le fil, le forum

Ceci fonctionne, mais cela n'apporte pas grand chose en terme de praticité
(à tester avec deux feuilles)
VB:
Public BigRange As Range
Sub test1()
Dim f As Worksheet: Set f = Sheets(1)
Set BigRange = Union(f.[AC46], f.[AM46], f.[AW46], f.[AX46])
MsgBox BigRange.Parent.Name & Chr(13) & BigRange.Address(0, 0)
End Sub
Sub test2()
Dim f As Worksheet: Set f = Sheets(2)
Set BigRange = Union(f.[AC46], f.[AM46], f.[AW46], f.[AX46])
MsgBox BigRange.Parent.Name & Chr(13) & BigRange.Address(0, 0)
End Sub
Fais ensuite ce test avec ces modifs, tu verras la différence
VB:
Sub test3()
Dim f As Worksheet: Set f = Sheets(1)
Set BigRange = Union(f.[AC46], f.[AM46], f.[AW46], f.[AX46])
MsgBox BigRange.Parent.Name & Chr(13) & BigRange.Address(0, 0)
End Sub
Sub test4()
Dim f As Worksheet: Set f = Sheets(2)
MsgBox BigRange.Parent.Name & Chr(13) & BigRange.Address(0, 0)
End Sub
 

Magic_Doctor

XLDnaute Barbatruc
Bonjour Staple,

Et oui, ça finit par devenir très compliqué tout ça.

Je pense que la solution la plus ergonomique est celle de job.
Je viens de me rendre compte que j'ai mélangé VBA avec le langage "débile" d'Excel. TOUT devrait être en anglais pour ces histoires-là !
Bref, plein d'optimisme, j'écris cette fois :
Nom : tartampion
Fait référence à : =AC46; AM46; AW46; AX46

Dans la routine j'écris :
[tartampion].Select ---> ne marche toujours pas... ¡MIERDA!
 

Staple1600

XLDnaute Barbatruc
Re

@Magic_Doctor
Je ne te parle pas de formules, mais de noms
Fais ce test sur un classeur vierge avec 4 ou 5 feuilles
VB:
Sub Macro1()
Dim ws As Worksheet
For Each ws In Worksheets
ActiveWorkbook.Names.Add Name:=ws.Name & "!TITI", RefersToR1C1:="=" & ws.Name & "!R1C2"
Next
End Sub
Puis va voir dans le gestionnaire de noms
 

job75

XLDnaute Barbatruc
Re,

Pour nommer une plage multiple, il suffit de sélectionner les cellules avec la touche Ctrl enfoncée.

Ensuite aller dans le Gestionnaire de noms pour créer le nom : la référence est affichée en bas.

A+
 

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…