VBA : Connaître le nom du formulaire/état et le contrôle actif

Dans la rubrique d’assistance à la maintenance d’application voici un bout de code à coupler à une macro  AutoKeys.

Lorsque vous devez intervenir sur une vieille application ou une application volumineuse, ce code vous rendra le service de ne pas avoir à chercher le formulaire et le contrôle actif parmi les multitudes de bibliothèques et de formulaires ou états. Cerise sur le gâteau si vous ouvrez l’éditeur VBA vous serez automatiquement positionné sur son module.

Son fonctionnement est simple ; Il repère le nom retourné par Screen.Activeform et Screen. Activecontrole et essaye de trouver le code dans le VBE components.

Function msgNameBase() 
' Auteur : Fabrice CONSTANS MVP 
' Description : renvoie le nom : de l'objet, de la base pour l'objet 
' actif 
On Error GoTo Err_msgNomBase 

Dim strNomBase As String 
Dim sCurfrm As String, sExt As String 
Dim sCurControle As String 
Dim i As Integer 

sExt = "form_" ' c'est un formulaire par défaut. 
' recupère le nom du forms, si c'est un report ' il part en erreur (voir traitement des erreurs) 

sCurfrm = Screen.ActiveForm.Name 
sCurControle = Screen.ActiveControl.Name 

' si le nom n'existe pas (voir erreur) 
Curfrm = Application.VBE.VBProjects(i).VBComponents(sExt & _ sCurfrm).Name 
GoTo Exit_msgNomBase Err_msgNomBase: 

' TRAITEMENT POUR UN ETAT. 
If Err = 2475 Then 
   ' ce n'est pas un form (2476 ce n'est pas un report) 
   ' on capture le nom du report sCurfrm = Screen.ActiveReport.Name 
   ' le prefixe pour un report  
   sExt = "Report_" Resume Next 

   ' on continue 
ElseIf Err = 9 Then 
   'Erreur 
   i = i + 1 
   If i > Application.VBE.VBProjects.Count Then 
      MsgBox "Impossible de trouver " & sCurfrm & _ " dans l'application." 
      Exit Function 
   End If 

   Resume 
ElseIf Err > 0 Then 
   MsgBox "Erreur non prévue :" & Err.Number & "---" & _ Err.Description 
   Exit Function 
End If 
Exit_msgNomBase: 
MsgBox IIf(sExt = "form_", "Forms", "Report") & " : " & _ sCurfrm & vbCrLf & _ "Controle : " & sCurControle & vbCrLf & _ "Base : " & Application.VBE.VBProjects(i).Name 

End Function

L’intérêt est évidemment de pouvoir le déclencher n’importe quand dans l’IHM, c’est pour cela qu’il faut le coupler à une macro AutoKeys.

Bonne utilisation !

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *