Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

XL 2013 (RESOLU) Erreur d'exécution "50289"

chaelie2015

XLDnaute Accro
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+
 
Dernière édition:
Solution
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...

chaelie2015

XLDnaute Accro
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.
 

chaelie2015

XLDnaute Accro
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
 

chaelie2015

XLDnaute Accro
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.
 

TooFatBoy

XLDnaute Barbatruc
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.
 

TooFatBoy

XLDnaute Barbatruc
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.
 

Discussions similaires

Réponses
2
Affichages
303
Réponses
32
Affichages
888
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…