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 SubBonjour 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 !