Forum Bonsoir
Lorsque je protège le code VBA, du mon classeur je rencontre systématiquement une erreur d'exécution "50289" indiquant qu'il est impossible d'effectuer certaines opérations tant que le projet VBA est protégé.
Je suspecte que le module ci-dessous soit à l'origine de ce problème, car il fonctionne correctement lorsque le VBA n'est pas protégé, mais affiche cette erreur lorsqu'il est protégé.
Voici le module
VB:
Sub AffichageUserForm()
Dim USF As Object
Dim Target As Range
'Set Target = ActiveSheet.Range("AM6") ' Vous pouvez spécifier une autre feuille ou une autre cellule si nécessaire
Set Target = ThisWorkbook.Sheets("CRT").Range("AM6")
If Intersect(Target, Range("AM6")) Is Nothing Then Exit Sub
With Sheets("Jours fériés")
For I = 2 To 46
If .Range("I" & I) = Target Then
NomUsf = .Range("J" & I)
For Each USF In ThisWorkbook.VBProject.VBComponents
If USF.Name = NomUsf Then
VBA.UserForms.Add(NomUsf).Show
End If
Next USF
End If
Next I
End With
End Sub
Pourriez-vous m'apporter votre assistance dans la résolution de ce problème ? Seriez-vous en mesure de m'éclairer sur l'origine de cette erreur ?
A+
Je cherche toujours à comprendre le truc, car je ne connais pas du tout ces manipulations de UserForm.
Mes questions sont donc, non pas des conseils, mais bien de vraies questions dont je n'ai pas les réponses.
Pourquoi scanner tous les UserForm jusqu'à trouver celui qui porte le nom désiré, puis afficher le UserForm qui porte ce nom ?
Vu qu'on a déjà le nom, autant l'afficher tout de suite. Non ?
Ca donnerait ça :
VB:
Sub AffichageUserForm()
'
'Dim USF As Object
Dim Target As Range
' Set Target = ActiveSheet.Range("AM6") ' Vous pouvez spécifier une autre feuille ou une autre cellule si nécessaire
Set Target = ThisWorkbook.Sheets("CRT").Range("AM6")
' If Intersect(Target, Range("AM6")) Is Nothing Then Exit Sub
With...
Bonsoir
Pourriez-vous fournir davantage d'explications concernant cette observation, s'il vous plaît ?
NB: À titre informatif, il semble que vous ayez une expertise dans ce domaine. Si je remplace ce code par un autre et que je protège le VBA, il devrait fonctionner. Je tiens à noter que j'ai déjà tenté une approche différente en le désactivant, et cela a fonctionné sans afficher de messages d'erreur.
Que voulez vous que je vous dises de plus, l'accès à un composant VBA n'est pas possible sur un projet protégé.
Pourquoi ce que vous voulez faire ne vous parait pas possible avec un seul UserForm ?
Que voulez vous que je vous dises de plus, l'accès à un composant VBA n'est pas possible sur un projet protégé.
Pourquoi ce que vous voulez faire ne vous parait pas possible avec un seul UserForm ?
Re
La structure de mon projet exige cette architecture. Cependant, si des modifications sont nécessaires, je serais ouvert à postuler votre proposition.
Merci
Re
J'ai créé des images dédiées pour chaque jour férié de l'année, chacune étant intégrée dans un UserForm spécifique.
Le défi principal que je rencontre lors de l'exécution est d'afficher ces images via les UserForms, d'autant plus que plusieurs jours fériés peuvent survenir au cours d'un même mois.
Pourquoi ?
Ce serait possible même s'ils devaient être affichés simultanément en non modal. Un UserForm est un module de classe muni d'une interface d'affichage avec MSForms.
Pourquoi ?
Ce serait possible même s'ils devaient être affichés simultanément en non modal. Un UserForm est un module de classe muni d'une interface d'affichage avec MSForms.
Je ne suis pas certain de bien comprendre, d'une part le code, et d'autre part le but dudit code.
VB:
NomUsf = .Range("J" & i)
For Each USF In ThisWorkbook.VBProject.VBComponents
If USF.Name = NomUsf Then VBA.UserForms.Add(NomUsf).Show
Next USF
L'instruction VBA.UserForms.Add(NomUsf).Show crée-t-elle un nouveau UserForm ?
Si oui, ça ne me semble pas logique de scanner tous les UserForm existant et quand on en trouve un qui porte le nom désiré, alors on crée un nouveau UserForm avec ce nom ?!?...
Bonsoir
Ce code a pour objectif d'afficher dynamiquement un UserForm en fonction de la valeur d'une cellule spécifique de la feuille de calcul "CRT" donc ce code recherche un mois spécifique dans la feuille "Jours fériés" en fonction de la valeur de la cellule "AM6" de la feuille "CRT". Si un mois correspondant est trouvé, il extrait le nom de l'UserForm associé et l'affiche. Le code s'arrête s'il n'y a pas de correspondance ou si la cellule "Target" est différente de AM6.est ce que c'est clair ?
A+