Appel à procédure private sub
Bonjour,
Je viens vers vous pour une vraie question de débutant
J'ai fait une procédure dans laquelle je crée un tableau auquel je me réfère tout au long de ma procédure:
dim nom(2) as string
nom(1) = "premiernom"
nom(2) = "deuxiemenom"je me réfère par la suite plusieurs fois à ce tableau pour manipuler des TCD:
With ActiveSheet.PivotTables(nom(2)).PivotFields("filtre1")
.Orientation = xlPageField
.Position = 1
End Withafin de faire plus "propre" et surtout pour des raisons de travail en équipe et de maintenance je voudrais sortir ce tableau et le mettre dans une procédure à pars du type
private sub nom()
dim nom(2) as string
nom(1) = "premiernom"
nom(2) = "deuxiemenom"
end subet continuer à y faire appel avec nom(i)
est ce possible de faire celà? est ce pertinent (respect de l'encapsulation/ gain en rapidité)? et quelle syntaxe pour y faire appel avec nom (i)? (pour ne pas changer tout mon code).
J'espère avoir été assez clair dans l'explication et vous remercie d'avance de votre aide.
Bonjour,
Ton code n'est pas copié sur un module, car pas mis en forme par VBA...
Cette mise en forme étant un moyen de détection des erreurs, il est toujours souhaitable de toujours copier le code cité dans un module...
Première question : pourquoi Private Sub ? Si tu ne peux répondre précisément à cette question et le justifier, abstiens-toi de définir un proc. comme privée !
Les procédures sont publiques par défaut (ce pourquoi le mot clé Public est toujours inutile), à l'exception (notable) des évènementielles qui sont toujours privées (même sans mentionner Private, le Private qui les précède a plutôt un statut d'information car l'enlever n'y changerait rien, elles sont attachées à un module d'objet et ne peuvent fonctionner que dans ce dernier...)
Dans ton cas, tu souhaites disposer de variables utilisables dans ton code : il te faut donc déclarer ta variable au niveau module : avec Dim si l'utilisation de ta variable sera limitée aux préocédures du module (souhaitable), avec Public (les variables sont privées par défaut, d'où utilisation de Private inutile pour ces dernières) si tu dois y accéder d'ailleurs que du module où elle est déclarée.
Je conseillerais donc, dans un module Standard, lequel accueillera également les procédure susceptibles d'utiliser la variable, déclaration avec Dim.
Dans le même module, une procédure d'initialisation de ta variable, procédure publique elle, déclarée avec Sub.
Dans ta proc. Workbook_Open, tu placeras un lancement de ta proc. d'initialisation, de façon que ta variable soit disponible à l'ouverture.
Et le cas échéant, dans la mesure où il y a toujours un risque de réinitialisation, dans les procédures qui utilisent la variable, mettre la commande concernée sous gestion d'erreur : en cas d'erreur, on relance l'initialisation et on revient sur la ligne en erreur... Eventuellement, il conviendra de tester l'état de la variable pour s'assurer que l'erreur vient de là et éviter d'intercepter une autre erreur.
Autre solution, peut-être plus simple et plus stable : des constantes qui demeureront une fois définies ( mais pas sous forme de tableau dans ce cas).
Cordialement.
Je te remercies pour ta réponse rapide.
J'avais mis private afin de limiter la procédure à mon module et éviter de consommer des ressources.
Du coup je fais une simple déclaration Dim au début sans procédure ni fonction (je ne pensais pas que ça pouvait marcher comme ça)
Merci encore