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...
Re
Tout à fait, un simple `.Show` pourrait être utilisé , mais dans notre cas, nous avons besoin de gérer plusieurs images (entre 1 et 3) qui s'affichent successivement avec tempo, en fonction des conditions spécifiques que nous avons définies précédemment.
Je suis ton projet de fil en fil, mais ça me semble toujours aussi flou.
Comme le dit Bernard ici, pourquoi ne pas avoir un seul UserForm ?
Ce UserForm afficherait les images les unes à la suite des autres avec une tempo entre chaque.
Re
Je suis tout à fait d'accord si cela est réalisable. Comme je l'ai mentionné précédemment, si nous devons revoir ce code, je suis prêt à le faire. Je vous remercie pour votre aide et vos suggestions par avance
si non Je vais prendre un moment de repos pour me concentrer davantage sur ce sujet. À cette heure, je pense qu'il serait difficile de réfléchir efficacement, d'autant plus que je dois me préparer mentalement pour la journée de travail qui m'attend demain.
NB: Je tiens à exprimer ma gratitude envers chacun d'entre vous pour cette précieuse discussion.
Je suis tout à fait d'accord si cela est réalisable. Comme je l'ai mentionné précédemment, si nous devons revoir ce code, je suis prêt à le faire. Je vous remercie pour votre aide et vos suggestions par avance
Ben moi je n'aide pas vraiment ici, je cherche surtout à comprendre comment ça fonctionne les UserForm... et du coup je ne suis pas près de faire une suggestion.
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 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
Mais l'utilisation d'un seul UserForm avec les images et une tempo doit être mieux.
Bonjour TooFatBoy
je vous remercie beaucoup ! Tout est impeccable, l'erreur a complètement disparu.
Je vous suis infiniment reconnaissant pour tout ce que vous avez accompli.
A+
Attention, la proposition en #21 n'est qu'un début de piste... si le UserForm n'existe pas tu auras une erreur, donc il faut ajouter une gestion d'erreur pour ce cas.
Attention, la proposition en #21 n'est qu'un début de piste... si le UserForm n'existe pas tu auras une erreur, donc il faut ajouter une gestion d'erreur pour ce cas.