Impossible d'afficher un userForm - Erreur 361
Bonjour,
J'ai crée un nouveau UserForm dans une application qui fonctionne parfaitement en mode création lorsqu'il est lancé via la commande Executer (F5). Comme tous les autres UserForm de mon application. En revanche, lorsque j'essaye d'ouvrir cette fenêtre à l'aide des instructions suivantes :
Load frmPimsleur
FrmPimsleur.Show
Dès l'instruction Load j'obtiens l'erreur d'exécution 361 suivante :
J'ai récrée un autre Userform et faire un copier/coller des contrôles du UserForm qui ne fonctionne pas. Et ce dernier marche sans aucun problème.
J'aimerai malgré tout comprendre qu'est-ce qui causerait ce problème à ce UserForm.
La seule piste que j'ai est que dans le code lorsqu'on je saisi un point à la suite du nom du formulaire, le menu contextuel affiche des sous commandes à l'exception de la comme Show (FrmPimsleur.Show). Pour tous les autres UserForm dès que je tape le point, cette commande Show apparait dans la liste. C'est comme si l'objet n'est pas reconnu comme un UserForm. Il ya du code dans l'évènement initialize mais que je commente ou pas ce code, le problème persiste et si j'exécute la Form de façon autonome en mode création ça marche.
Je ne peux malheureusement pas fournir le code exemple car cela ne se produit que dans mon application.
Voici en revanche le seul code qui est dans ce formulaire:
Private Sub UserForm_Initialize()
Dim CategWrks As Worksheet, rg As Range, rg1 As Range, idx As Integer, i As Integer
Dim j As Integer, k As Integer, l As Integer, m As Integer, n As Integer, o As Integer
Dim tbl As ListObject, tblCateg As ListObject
Me.Height = 340
Me.Width = 678
lblDate1 = "": lblDate2 = "": lblDate3 = "": lblDate4 = "": lblDate5 = "": lblDate6 = ""
lblDate1.BackColor = &HC0C0C0: lblDate1.ForeColor = &HC00000
lblDate2.BackColor = &HC0C0C0: lblDate2.ForeColor = &HC00000
lblDate3.BackColor = &HC0C0C0: lblDate3.ForeColor = &HC00000
lblDate4.BackColor = &HC0C0C0: lblDate4.ForeColor = &HC00000
lblDate5.BackColor = &HC0C0C0: lblDate5.ForeColor = &HC00000
lblDate6.BackColor = &HC0C0C0: lblDate6.ForeColor = &HC00000
'On récupère dans la table CATEGORY la liste des onglets (feuilles ou tables)
Set CategWrks = ThisWorkbook.Sheets("SUIVI_EVAL")
Set tblCateg = CategWrks.ListObjects("TAB_SUIVI_EVAL")
Set rg = tblCateg.DataBodyRange
j = 0: k = 0: l = 0: m = 0: n = 0: o = 0
If Not rg Is Nothing Then
For idx = 1 To rg.Rows.Count
If Trim(rg(idx, 5).Value) = "PIMSLEUR" And Trim(rg(idx, 8).Value) = "JEU_1" Then
lstJeuxMots.AddItem
lstJeuxMots.List(j, 0) = rg(idx, 2).Value
j = j + 1
If lblDate1.Caption = "" Then lblDate1.Caption = rg(idx, 6).Value
ElseIf Trim(rg(idx, 5).Value) = "PIMSLEUR" And Trim(rg(idx, 8).Value) = "JEU_2" Then
lstJeuxMots.List(k, 1) = rg(idx, 2).Value
k = k + 1
If lblDate2.Caption = "" Then lblDate2.Caption = rg(idx, 6).Value
ElseIf Trim(rg(idx, 5).Value) = "PIMSLEUR" And Trim(rg(idx, 8).Value) = "JEU_3" Then
lstJeuxMots.List(l, 2) = rg(idx, 2).Value
l = l + 1
If lblDate3.Caption = "" Then lblDate3.Caption = rg(idx, 6).Value
ElseIf Trim(rg(idx, 5).Value) = "PIMSLEUR" And Trim(rg(idx, 8).Value) = "JEU_4" Then
lstJeuxMots.List(m, 3) = rg(idx, 2).Value
m = m + 1
If lblDate4.Caption = "" Then lblDate4.Caption = rg(idx, 6).Value
ElseIf Trim(rg(idx, 5).Value) = "PIMSLEUR" And Trim(rg(idx, 8).Value) = "JEU_5" Then
lstJeuxMots.List(n, 4) = rg(idx, 2).Value
n = n + 1
If lblDate5.Caption = "" Then lblDate5.Caption = rg(idx, 6).Value
ElseIf Trim(rg(idx, 5).Value) = "PIMSLEUR" And Trim(rg(idx, 8).Value) = "JEU_6" Then
lstJeuxMots.List(o, 5) = rg(idx, 2).Value
o = o + 1
If lblDate6.Caption = "" Then lblDate6.Caption = rg(idx, 6).Value
End If
Next
End If
'Mettre en évidence les jeux activés ou débloqués
If Trim(lblDate1.Caption) <> "" Then _
If Date >= CDate(lblDate1.Caption) Then lblDate1.BackColor = vbGreen ': lblDate1.ForeColor = vbWhite
End SubMerci d'avance au cas où quelqu'un aurait une idée quant à la cause et la résolution de ce type de problème.
Bonjour cheickna,
Peux-tu essayer ceci :
- Exporte ton formulaire dans un fichier .frm ;
- Supprime tous les objets (« controls ») qu’il contient ;
- Supprime toutes les macros liées aux objets dans ton formulaire ;
- Lance-le depuis ton autre macro.
Cette même erreur revient-elle ?
Essaye ensuite de réimporter le formulaire depuis le fichier exporté. Cela corrige-t-il le problème ?
Bonjour,
A+
Bonjour
Un exemple du fichier serait bien pratique pour résoudre le problème
Cordialement
Bonjour cheickna,
Si tu enlèves simplement l'instruction "Load frmPimsleur" et ne laisse que "FrmPimsleur.Show", cela ne fonctionne pas mieux ?
Cdlt,
Cylfo
Bonjour Cheickna,
J’ai importé ton formulaire dans un nouveau fichier Excel, tous les éléments y sont bien présents. L’erreur que j’obtiens est liée au fait que la macro UserForm_Initialize cherche des données dans des feuilles que je n’ai pas…
C’est vrai que si partageais ton fichier, on pourrait mieux t’aider à trouver…
UserForm_Initialize
Bonjour à tous,
Merci pour vos retours.
Le problème persiste toujours même si j'enlève l'instruction Load pour faire directement le Show.
@Valky68: Effectivement c'est normal l'erreur que vous obtenez car il vous manque l'onglet SUIVI_EVAL qui contient des données. Mais comme je l'avais dit au départ, même en mettant en commentaire le code de la macro UserForm_Initialize le problème existe. C'est pour cela que j'ai créé un autre UserForm pour copier/coller les éléments et qui fonctionne. Cette erreur m'intrigue particulièrement même si j'ai pu la contourner par ce nouveau formulaire mais cela ne me satisfait clairement pas. L' erreur est très contextuelle car c'est la seule Form qui a ce problème sur 57 que contient le projet dont 7 ont été créées après sans problème.
Je comprends bien que sans fournir l'exemple concret c'est difficile que vous puissiez m'aider mais je ne peux faire fournir tout le projet qui contient 57 forms, plus de 150 macros, plus de 80 onglets et des données qui sont en plus liées à deux bases de données externes (Access). Sans toute la configuration locale qui fait partie de mon projet il vous sera impossible de lancer l'application.
Je vais néanmoins créer un nouveau projet en important uniquement ce formulaire ainsi que l'onglet manquant et si j'ai le même problème je vous reviendrais avec cet exemple.
Bien à vous
Cheickna
Bonjour,
Tu colles un point d'arrêt dans ton initialize dès la première ligne et tu exécutes ton code ensuite ligne par ligne jusqu'à détecter la ligne qui plante...
A+
Bonjour Galopin01,
C'est ce que j'ai fait en premier mais l'erreur d'exécution intervient avant même d'entrer dans cet évènement.
Finalement je viens de supprimer tous les objets et code du projet global en gardant uniquement le formulaire à problème, puis j'ai crée un userForm simple avec un seul bouton qui ouvre le UserForm qui pose des soucis. L'idée c'est d'éviter l'expot/import et de tester la feuille initiale. Plus aucun problème car l'affichage est parfait.
Ce qui veut dire que le problème vient probablement d'un élément extérieur à ce UserForm.
Voici le mini projet. Il suffit de cliquer sur le bouton Afficher, ce qui ne marche pas dans mon programme principal même après avoir tester le code d'affichage à partir de 3 autres Forms différents dans le projet.
