[VBA] Variables utilisables dans plusieurs macros d'un classeur

Coucou, c'est encore moi!

Toujours sur mon petit projet, qui avance bien.

Ce n'est pas un souci de macro, puisque, techniquement, je sais comment contourner le problème que je vais vous exposer.

J'ai cherché sur le forum, mais je n'ai pas trouvé de réponses. Si la réponse existe, n'hésitez pas à me mettre le lien!

J'ai une Variable A et une Variable B qui dépend directement de A.

Je fais appel à ces deux variables dans plusieurs macro. Je peux écrire à chaque fois, en début de macro, le code suivant :

A = Worksheets("DB").Range("I2")
    If A = 12 Or A = 18 Then
        B = 3
    Else
        If A = 16 Or A = 24 Or A = 32 Then
            B = 4
        Else
            If A = 20 Or A = 30 Or A = 30 Then
                B = 5
            Else
                If A = 36 Then
                    B = 6
                Else
                    If A = 42 Then
                        B = 7
                    Else
                        B = 8
                    End If
                End If
            End If
        End If
    End If

Outre le fait que c'est moche, c'est aussi une source d'erreur, même dans le cas d'un copier/coller.

Ma question explicite est la suivante : comment puis-je faire pour que ce bout de code soit "accessible" à l'ensemble des macros comme lorsqu'on définit :

Public A As Byte
Public B As Byte

Vous remerciant par avance de vos réponses et du temps consacré!

Bonjour,

La déclaration des variables dans le module, hors procédure, les rend accessibles dans chaque procédure. Sinon, comme B est fonction de A, il suffit donc d'écrire une fonction et de l'appeler au besoin :

Function DetermineB(A As Byte) As Byte

Select Case A
    Case 12, 18
        DetermineB = 3
    Case 16, 24, 32
        DetermineB = 4
    Case 20, 30, 40
        DetermineB = 5
    Case 36
        DetermineB = 6
    Case 42
        DetermineB = 7
    Case Else
        DetermineB = 8
End Select

End Function

Pour l'appeler dans une procédure :

A = CByte(Worksheets("DB").Range("I2"))
B = DetermineB(A)

Merci Pedro22!

Non seulement ça marche parfaitement, mais tu m'as appris comment alléger mes macros!!

Content d'avoir pu t'aider ! Bonne fin de journée.

Salut, salut!

Bon, je n'avais pas vraiment eu l'occasion de me pencher sur la fonction qui m'avait été gentiment proposée par Pedro22.

J'ai suivi toutes les instructions : créer une fonction et intégrer les deux lignes proposées pour appeler la fonction en question.

Seul bémol : lorsque je lance la macro, cette dernière me met le message d'erreur suivant, en sélectionnant DetermineB

MsgBox a écrit :

Erreur de compilation :

Nom ambigu détecté : ~

Je comprends ce que signifie le message, en français, mais je ne parviens pas à saisir ce qui bloque après.

Une âme charitable pour m'apporter des éclaircissements?

Ce message indique qu'il y a plusieurs variables et/ou fonctions avec le meme nom

Bonjour,

Abstenez vous de nommer de telles variables publiques avec une seule lettre.

Utilisez au moins 3 lettres distinctes et combinaisons aisément détectables avec l'outil de recherche (p.e : "agg, bii, bzh"... en évitant soigneusement de leur donner un aspect équivoque ni à plus forte raison un mot réservé. (pas de "row, col, str, var..."

Réservez les variables à lettre unique aux cas suivants :

"i, k, x" pour les compteurs de boucle (For... Next) à l'intérieur d'une procédure.

réservez "a,b,c, o" pour des variables complexes array ou objets pour des déclarations lapidaires et limitées à l'intérieur d'une procédure, ou à l’extrême rigueur à l'intérieur de certaines procédures rares du type "Tri QuickSort" et qui sont tellement connus qu'on ne les examine plus (parce qu'elle sont très souvent cachées...)

"Y" pour une variable privée booléenne à l'intérieur d'une procédure.

Pour les autres variables (tant que vous ne serez pas un programmeur expérimenté) utilisez des noms expressifs de moins de 10 caractères en utilisant la casse à bonne escient. (préférable à l'underscore qui n'apprend rien.)

Il existe sur Google de nombreuses pages de convention de nommages des variables, malheureusement toutes trop complexes pour l'usage des débutants, ou carrément trop superficielles, cependant vous pouvez également vous en inspirer utilement...

A+

Bonjour et merci Galopin pour ces conseils.

Je suis actuellement en train de lire les conventions mais je me pose une question. Pourquoi eviter les underscores ?

Ça n'apprend rien et ça bouffe de la place inutilement.

iLastRow est tout aussi compréhensible que i_last_row non ?

Sub mon_beau_sapin()

ou

Sub MonBeauSapin()

Après on fait comme on aime... mébon si tu regardes des pages de codes de programmeurs expérimentés tu te rendras compte que ce underscore n'a pas la cote !

A+

Merci pour cette réponse très précise et très instructive, Galopin01.

Je m'en vais appliquer immédiatement ces conseils.

Rechercher des sujets similaires à "vba variables utilisables macros classeur"