Variable dans plusieurs Sub sans déclaration Public

Bonjour,

Dans mon code ci-dessous, je déclare ma variable CelluleRecherche avec Dim dans ma procédure Sub EnregistrementMarche().

Au sein de cette procédure, je fais appel à la procédure Sub EnregistrementMarche_Marche() qui elle-même utilise une variable CelluleRecherche.

Je pensais qu'une variable Dim ne pouvait être utilisé que dans sa procédure, or j'ai l'impression que dans ce cas elle continue d'exister dans la deuxième procédure, car sans y être déclarée dans EnregistrementMarche_Marche(), cela ne semble pas poser de problème.

Mon objectif est que chaque procédure est sa propre variable CelluleRecherche, pour avoir un nom de variable par "type" de fonctionnalité et m'y retrouver, et non pas des CelluleRecherche2, 3, etc.

En vous remerciant par avance !

Public ValeurRechercheReferent As Range, ValeurRechercheMarche As Range

Sub EnregistrementMarche()
    'Vérification que toutes les données nécessaires soient renseignées
    If Sheets("Formulaire marché").Range("valida") = False Then
        MsgBox ("Erreur : Vous n'avez pas rempli toutes les données obligatoires (Données avec un '*')")
    'Vérification que le référent soit déjà renseigné dans la base de données
    Else
        Dim CelluleRecherche As Range
        Set ValeurRechercheReferent = Sheets("Formulaire marché").Range("RéférentFormulaire")
        Set CelluleRecherche = Sheets("Données N°Marché").Range("ListeRéférents2").Find(ValeurRechercheReferent, LookIn:=xlValues, lookat:=xlWhole)
        'Si le référent marché est dans la base de données, enregistrement du marché
        If Not CelluleRecherche Is Nothing Then
            Call EnregistrementMarche_Marche
        ' Si nouveau référent, enregistrement dans la base de données puis enregistrement du marché
        Else
                Call EnregistrementMarche_Referent
                Call EnregistrementMarche_Marche
        End If
    End If
End Sub

Sub EnregistrementMarche_Marche()
    'Vérification que le marché n'est pas déjà enregistré
    Set ValeurRechercheMarche = Sheets("Formulaire marché").Range("N°MarchéFormulaire")
    Set CelluleRecherche = Sheets("Données Tiers").Range("EnsembleMarchés").Find(ValeurRechercheMarche, LookIn:=xlValues, lookat:=xlWhole)
    If Not CelluleRecherche Is Nothing Then
        MsgBox ("ERREUR : Le n° marché est déjà enregistré")
    Else
        ' Rattachement du nouveau marché à son référent dans la base de données référents
        Dim Ligne_insertion_marché As Integer
        With Sheets("Données N°Marché")
            Set CelluleRecherche = .Range("ListeRéférents2").Find(ValeurRechercheReferent, LookIn:=xlValues, lookat:=xlWhole)
            Ligne_insertion_marché = .Cells(Rows.Count, CelluleRecherche.Column).End(xlUp).Row + 1
            .Cells(Ligne_insertion_marché, CelluleRecherche.Column) = Sheets("Formulaire marché").Range("N°MarchéFormulaire")
        End With
        'Enregistrement du nouveau marché dans la base de données marchés /EN COURS\
        Dim LastCol As Integer, LastRow As Integer
      End If
End Sub

Bonjour jojowww,

Je pense que tu n'as pas l'option "Option Explicit" en tête du module, de ce fait il n'y a aucune obligation de déclarer les variables mais il n'y a pas non plus de contrôle des déclarations effectué lors de la compilation. Utiliser ou ne pas utiliser l'option "Option Explicit" est une affaire de choix, certains sont pour, d'autres sont contre.

Dans ton cas, la variable "CelluleRecherche" déclarée "as range" dans la procédure "EnregistrementMarche" n'existe que dans cette procédure et même si elle a le même nom que dans la procédure "EnregistrementMarche_Marche" ce ne sont pas les mêmes variables. Dans cette dernière procédure, la variable est auto-déclarée à sa 1ère utilisation (instruction Set CelluleRecherche ...").

Si tu ajoutes l'option "Option Explicit" en tête du module, la compilation génèrera une erreur dans la procédure "EnregistrementMarche_Marche" de même que si tu essaies d'affecter une valeur qui n'est pas compatible avec la déclaration ou si tu fais une faute d'orthographe dans un nom de variable (tu déclares MaVariable et tu écris MaVaribale le compilateur te le signalera). L'option peut être positionnée par défaut dans les options de l'éditeur VBE.

Voilà, c'est à toi de choisir

Cdlt,

Cylfo

C'est plus clair maintenant, merci beaucoup !

Rechercher des sujets similaires à "variable sub declaration public"