Microsoft 365 Userform Excel VBA

M

Méli_

Guest
Bonjour,
Je débute en VBA Excel :)
J'essaie d'exécuter le code suivant déniché sur le net dans un Userform que j'ai nommé "fmListeOngletsClasseur".
J'ai créé une combobox nommée "cbListeOngletsClasseur", un bouton Ok nommé "cmdOK" et un bouton Quitter nommé "cmdQuitter".


Private Sub cbListeOngletsClasseur_Change()
cbListeOngletsClasseur.MatchRequired = True
cbListeOngletsClasseur.MatchEntry = fmMatchEntryComplete
End Sub

Private Sub cbListeOngletsClasseur_Click()
Select Case cbListeOngletsClasseur.ListIndex
End Select
End Sub

Private Sub cmdOK_Click()
Num = (cbListeOngletsClasseur.ListIndex) + 1
If Num = 0 Then
MsgBox "Vous n'avez rien sélectionné, RECOMMENCER!!!"
Unload fmListeOngletsClasseur
Call ChoixOnglet
Else
Sheets.Item(Num).Select
Unload fmListeOngletsClasseur
End If
End Sub

Private Sub cmdOK_Enter()
Num = (cbListeOngletsClasseur.ListIndex) + 1
If Num = 0 Then
MsgBox "Vous n'avez rien sélectionné, RECOMMENCER!!!"
Unload fmListeOngletsClasseur
Call ChoixOnglet
Else
Sheets.Item(Num).Select
Unload fmListeOngletsClasseur
End If
End Sub

Private Sub cmdQuitter_Click()
fmListeOngletsClasseur.Hide
Unload fmListeOngletsClasseur
End Sub

Private Sub UserForm_Initialize()
Dim Numfeuille As Integer
Dim NomFeuille As Variant

For Numfeuille = 1 To Worksheets.Count
NomFeuille = Worksheets(Numfeuille).Name
cbListeOngletsClasseur.AddItem "" & NomFeuille
Next Numfeuille
cbListeOngletsClasseur.Style = fmStyleDropDownCombo

End Sub

J'ai également écrit le module suivant :

Sub ChoixOnglet()
Load fmListeOngletsClasseur
fmListeOngletsClasseur.Show
End Sub.

Le problème est que quand j'exécute l'Userform, il affiche "Vous n'avez rien sélectionné, RECOMMENCER!!!" et dès que je clique pour fermer ce message, il réapparait.
Que faire ?

Merci par avance
 
Solution
M
Bonjour à tous,
J'ai enfin trouvé grâce à cet article : https://www.vishalon.net/blog/resolved-method-sheets-of-object-_global-failed.
Il s'agit donc d'un bug car l'userform était ouvert en premier + le fichier était masqué donc l'objet 'Sheets' ne renvoyait à rien.

J'ai également modifié le code :
Private Sub cmdOk_Click()
NUM = (cbListeOngletsClasseur.ListIndex) + 1
If NUM = 0 Then
MsgBox "Vous n'avez rien sélectionné, RECOMMENCER!!!"
Unload fmListeOngletsClasseur
Call ChoixOnglet
Else
ThisWorkbook.Activate
Sheets.Item(NUM).Select
Unload fmListeOngletsClasseur
End If
End Sub

Merci de m'avoir lue :)

moialbert2

XLDnaute Nouveau
Bonjour,
Je débute en VBA Excel :)
J'essaie d'exécuter le code suivant déniché sur le net dans un Userform que j'ai nommé "fmListeOngletsClasseur".
J'ai créé une combobox nommée "cbListeOngletsClasseur", un bouton Ok nommé "cmdOK" et un bouton Quitter nommé "cmdQuitter".


Private Sub cbListeOngletsClasseur_Change()
cbListeOngletsClasseur.MatchRequired = True
cbListeOngletsClasseur.MatchEntry = fmMatchEntryComplete
End Sub

Private Sub cbListeOngletsClasseur_Click()
Select Case cbListeOngletsClasseur.ListIndex
End Select
End Sub

Private Sub cmdOK_Click()
Num = (cbListeOngletsClasseur.ListIndex) + 1
If Num = 0 Then
MsgBox "Vous n'avez rien sélectionné, RECOMMENCER!!!"
Unload fmListeOngletsClasseur
Call ChoixOnglet
Else
Sheets.Item(Num).Select
Unload fmListeOngletsClasseur
End If
End Sub

Private Sub cmdOK_Enter()
Num = (cbListeOngletsClasseur.ListIndex) + 1
If Num = 0 Then
MsgBox "Vous n'avez rien sélectionné, RECOMMENCER!!!"
Unload fmListeOngletsClasseur
Call ChoixOnglet
Else
Sheets.Item(Num).Select
Unload fmListeOngletsClasseur
End If
End Sub

Private Sub cmdQuitter_Click()
fmListeOngletsClasseur.Hide
Unload fmListeOngletsClasseur
End Sub

Private Sub UserForm_Initialize()
Dim Numfeuille As Integer
Dim NomFeuille As Variant

For Numfeuille = 1 To Worksheets.Count
NomFeuille = Worksheets(Numfeuille).Name
cbListeOngletsClasseur.AddItem "" & NomFeuille
Next Numfeuille
cbListeOngletsClasseur.Style = fmStyleDropDownCombo

End Sub

J'ai également écrit le module suivant :

Sub ChoixOnglet()
Load fmListeOngletsClasseur
fmListeOngletsClasseur.Show
End Sub.

Le problème est que quand j'exécute l'Userform, il affiche "Vous n'avez rien sélectionné, RECOMMENCER!!!" et dès que je clique pour fermer ce message, il réapparait.
Que faire ?

Merci par avance
Le pb c'est que a l'ouverture de ton form tu modifies le contenu de la liste donc tu produit l'évènement change et l'évènement enter du bouton OK évènement qui je pense ne sert à rien tu as l'évènement click qui devrait suffire. De plus dans la sub choixOnglet la ligne load ne sert a rien la méthode show execute le Load.
Sinon essaie de modifier la sub suivante:
Private Sub UserForm_Initialize()
Dim Numfeuille As Integer
Dim NomFeuille As Variant
application.EnableEvents =false
For Numfeuille = 1 To Worksheets.Count
NomFeuille = Worksheets(Numfeuille).Name
cbListeOngletsClasseur.AddItem "" & NomFeuille
Next Numfeuille
cbListeOngletsClasseur.Style = fmStyleDropDownCombo
application.EnableEvents =true
End Sub
 
M

Méli_

Guest
Le pb c'est que a l'ouverture de ton form tu modifies le contenu de la liste donc tu produit l'évènement change et l'évènement enter du bouton OK évènement qui je pense ne sert à rien tu as l'évènement click qui devrait suffire. De plus dans la sub choixOnglet la ligne load ne sert a rien la méthode show execute le Load.
Sinon essaie de modifier la sub suivante:
Private Sub UserForm_Initialize()
Dim Numfeuille As Integer
Dim NomFeuille As Variant
application.EnableEvents =false
For Numfeuille = 1 To Worksheets.Count
NomFeuille = Worksheets(Numfeuille).Name
cbListeOngletsClasseur.AddItem "" & NomFeuille
Next Numfeuille
cbListeOngletsClasseur.Style = fmStyleDropDownCombo
application.EnableEvents =true
End Sub
Merci beaucoup, ça fonctionne parfaitement à présent !
 
M

Méli_

Guest
Bonjour, je réouvre le sujet car tout fonctionnait à merveille mais j'ai commencé à avoir des erreurs au bout de plusieurs ouvertures/fermetures du document. Ce qui pose problème ce sont les Sheets et les Worksheets.

J'ai donc modifié la partie suivante :

Private Sub UserForm_Initialize()
Dim NomFeuille As Variant
Dim wsh As Worksheet

Application.EnableEvents = False

For Each wsh In ThisWorkbook.Worksheets
NomFeuille = wsh.Name
cbListeOngletsClasseur.AddItem "" & NomFeuille
Next wsh
cbListeOngletsClasseur.Style = fmStyleDropDownCombo
Application.EnableEvents = True
End Sub

Cela a résolu une partie du problème mais il reste encore une erreur sur ce bout de code :

Private Sub cmdOk_Click()
NUM = (cbListeOngletsClasseur.ListIndex) + 1
If NUM = 0 Then
MsgBox "Vous n'avez rien sélectionné, RECOMMENCER!!!"
Unload fmListeOngletsClasseur
Call ChoixOnglet
Else
Sheets.Item(NUM).Select
Unload fmListeOngletsClasseur
End If

L'erreur est sur Sheets et indique "Erreur d'execution 1004 La méthode Sheets de l'object _Global a échoué.
Je pense que c'est un tout petit truc à changer mais je n'arrive pas à trouver. Des idées ?

Merci par avance.
 

ChTi160

XLDnaute Barbatruc
Bonjour Méli
Bonjour le Fil ,le Forum
un petit fichier (anonymisé) serait le bien venu .........
il manque aussi une procédure "ChoixOnglet" !
il manque aussi un End If en fin de procédure "cmdOk_Click"
attendons de voir si "moialbert2" passe par là !
Bonne journée
jean marie
 
Dernière édition:

ChTi160

XLDnaute Barbatruc
Re
j'ai trouvé la partie qui manque elle était en début de Fil.
VB:
Private Sub cmdOk_Click()
NUM = (cbListeOngletsClasseur.ListIndex) + 1
If NUM = 0 Then
MsgBox "Vous n'avez rien sélectionné, RECOMMENCER!!!"
Unload fmListeOngletsClasseur' 'après ca
Call ChoixOnglet 'ceci n'est pas exécuté et pourquoi si pas de sélection faire ca ?
Else
'Worksheets(cbListeOngletsClasseur.Text).Select
Sheets.Item(NUM).Select
Unload fmListeOngletsClasseur
End If
End Sub
Sub ChoixOnglet()
Load fmListeOngletsClasseur
fmListeOngletsClasseur.Show
End Sub
si non pas d'erreur constaté dans le fichier que j'ai crée
jean marie
 
M

Méli_

Guest
Je remet donc tout le code :

Private Sub cbListeOngletsClasseur_Change()
cbListeOngletsClasseur.MatchRequired = True
cbListeOngletsClasseur.MatchEntry = fmMatchEntryComplete
End Sub

Private Sub cbListeOngletsClasseur_Click()
Select Case cbListeOngletsClasseur.ListIndex
End Select
End Sub

Private Sub cmdOk_Click()
NUM = (cbListeOngletsClasseur.ListIndex) + 1
If NUM = 0 Then
MsgBox "Vous n'avez rien sélectionné, RECOMMENCER!!!"
Unload fmListeOngletsClasseur
Call ChoixOnglet
Else
Sheets.Item(NUM).Select 'l'erreur 1004 est ici sur 'Sheets'
Unload fmListeOngletsClasseur
End If
End Sub

Private Sub cmdQuitter_Click()
fmListeOngletsClasseur.Hide
Unload fmListeOngletsClasseur
End Sub

Private Sub Label1_Click()

End Sub

Private Sub UserForm_Initialize()
Dim NomFeuille As Variant
Dim wsh As Worksheet

Application.EnableEvents = False

For Each wsh In ThisWorkbook.Worksheets
NomFeuille = wsh.Name
cbListeOngletsClasseur.AddItem "" & NomFeuille
Next wsh
cbListeOngletsClasseur.Style = fmStyleDropDownCombo
Application.EnableEvents = True
End Sub
 
M

Méli_

Guest
Bonjour à tous,
J'ai enfin trouvé grâce à cet article : https://www.vishalon.net/blog/resolved-method-sheets-of-object-_global-failed.
Il s'agit donc d'un bug car l'userform était ouvert en premier + le fichier était masqué donc l'objet 'Sheets' ne renvoyait à rien.

J'ai également modifié le code :
Private Sub cmdOk_Click()
NUM = (cbListeOngletsClasseur.ListIndex) + 1
If NUM = 0 Then
MsgBox "Vous n'avez rien sélectionné, RECOMMENCER!!!"
Unload fmListeOngletsClasseur
Call ChoixOnglet
Else
ThisWorkbook.Activate
Sheets.Item(NUM).Select
Unload fmListeOngletsClasseur
End If
End Sub

Merci de m'avoir lue :)
 

Discussions similaires

Réponses
77
Affichages
5 K

Statistiques des forums

Discussions
311 729
Messages
2 081 970
Membres
101 852
dernier inscrit
dthi16088