Déclaration unique de valeurs fixes pour tout un classeur

Hello, j'essaie de déclarer des valeurs fixes comme ci-dessous (mais ça ne fonctionne pas) dans un module (public par défaut ?) afin que je puisse utiliser ces valeurs dans tous mes modules sans avoir à les redéclarer chaque fois. Remplacer les déclarations multiples par juste l'appel à Initvariables et ainsi après si je veux la feuille Acheteur, je met f2 tout simplement !
L'idée étant de mettre TOUTES mes valeurs fixes dans un seul module

Option Explicit
    Public f1 As Worksheet, f2 As Worksheet, f3 As Worksheet, f4 As Worksheet, f5 As Worksheet, f6 As Worksheet

Public Sub Initvariables()
    Set f1 = Sheets("Générale")
    Set f2 = Sheets("Acheteur")
    Set f3 = Sheets("VendeurOK")
    Set f4 = Sheets("VendeurNon")
    Set f5 = Sheets("Clé-Lot")
    Set f6 = Sheets("Alpha-tél")
End Sub

Bonjour,

Normalement, ça devrait marcher dans un module standard...

Le mieux serait d'avoir ensuite :

'DANS LE MODULE THISWORKBOOK
private sub workbook_open()
Call Initvariables 'initialisation des variables à l'ouverture
end sub

private sub workbook_beforeclose(Cancel as boolean)
Call Libvariables 'liberation variables à la fermeture
end sub

'DANS LE MEME MODULE (NORMAL) QUE Sub Initvariables
sub Libvariables()
Set f1 = nothing: Set f2 = nothing: Set f3 = nothing
Set f4 = nothing: Set f5 = nothing: Set f6 = nothing
end sub

Cdlt,

Bonjour,

Si ce n'est que pour des références de feuilles, pourquoi ne pas simplement les renommer comme sur la capture d'écran ?

Les noms d'onglets sont conservés et les noms de feuilles sont f1,f2...

Ecrire f1ou f2 suffit ensuite pour faire référence à cette feuille.

Cordialement

capture feuille

@3GB, j'ai ajouté ce que tu proposes en laissant ce que j'avais comme code dans mon 1er post, fermé le classeur et rouvert, exécution d'une macro et voici l'erreur générée

initvariable

J'ai mis en remarques toutes les déclarations pour tester et la macro se plante sur DerLig_f14 !
Si je survole f14.Range, j'ai ce message <Variable objet ou variable de bloc With non définie>
Pour tester si c'est juste cette ligne qui coince, je l'ai mise en remarque et j'obtiens exactement la même erreur sur la ligne suivante sur f2.Range

Sub Acheteur_Clients()
'    Dim f2 As Worksheet, f14 As Worksheet, f1 As Worksheet
    Dim DerLig_f14 As Long, i As Long
    Dim Ligne As Integer
    Application.ScreenUpdating = False
'    Set f2 = Sheets("Acheteur")
'    Set f14 = Sheets("clients")
'    Set f1 = Sheets("Générale")
    DerLig_f14 = f14.Range("A" & Rows.Count).End(xlUp).Row
    Ligne = Application.WorksheetFunction.Match(f2.Range("A1"), f1.Range("C1:C204"), 0)

@haonv : merci, bonne idée que je retiens, mais dans ce classeur je vais ensuite ajouter encore d'autres constantes et qui ne sont pas des feuilles :)

Salut Bifrons,

Je trouve que l'idée de haonv est bonne et probablement la meilleure dans ton cas, à moins que tu ne prévois d'avoir une centaine de feuilles...

C'est le principe de nommer tant qu'on le peut pour faire référence simplement à des noms.

Sinon, pour ma proposition, je suis embarrassé. Il faut bien avoir dans un module standard les variables f1 à f6 déclarées en public en tête de module et la macro Initvariables.

Cette macro est alors appelée à l'ouverture par la macro évènementielle private sub workbook_open (qui se trouve dans le module thisworkbook). A priori ça devrait fonctionner. Je vais quand même faire un essai...

Cdlt,

Je viens de refaire un test en déclarant f14 dans la macro, je l'exécute et elle se plante à la ligne suivante, la valeur de DerLig_f14 est juste !

Oui mais de mémoire, ton exemple comprenait 6 variables worksheet : f1 à f6. Donc, si f14 n'est pas initialisée à l'ouverture comme je l'imagine, forcément ça plante.

Edit : et le code serait mieux comme ça :

Sub Acheteur_Clients()

DerLig_f14 = f14.Range("A" & f14.Rows.Count).End(xlUp).Row
Ligne = Application.Match(f2.Range("A1"), f1.Range("C1:C204"), 0)

'....

J'avais raccourci la liste, mais f14 est aussi déclaré :)
Je viens de tester la solution à HAONV = parfait en tout cas pour toutes mes feuilles, MERCI

Me restera à voir pour les quelques autres constantes que j'ai comme des définitions de plages de cellules par exemple

Je vais pouvoir faire de l'ordre dans toutes les redondances que j'ai dans mes macros

Rechercher des sujets similaires à "declaration unique valeurs fixes tout classeur"