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

XL 2016 Erreur 381

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

R1-

XLDnaute Junior
Bonjour,

Je bute sur une erreur 381 à laquelle je ne trouve pas de solution.
En lançant le débogage, l'erreur est indiquée dans le module d'initialisation de l'userform à la ligne 12.
Je pense que cela dépasse tout simplement mes compétences.
De plus en réouvrant le formulaire, j'ai une erreur 9 qui apparait et m'indique que la liste de ma combobox est vide... bref la galère.
Vous trouverez un fichier anonymisé en pièce jointe.

Merci d'avance pour votre aide
 

Pièces jointes

Solution
Bon voici qui est beaucoup mieux :
VB:
Private Sub userform_initialize()

Label_error_ref.Visible = False

ComboBox_client.MatchEntry = fmMatchEntryNone
ListClients = Application.Transpose(Sheets(2).Range("B1:B" & Sheets(2).[B1048576].End(xlUp).Row).Value)
If Not IsArray(ListClients) Then ReDim ListClients(1 To 1): ListClients(1) = Sheets(2).Range("B1")
ComboBox_client.List = ListClients

ComboBox_ref.MatchEntry = fmMatchEntryNone
ListRefs = Application.Transpose(Sheets("ref").Range("A1:A" & Sheets("ref").[A1048576].End(xlUp).Row).Value)
If Not IsArray(ListRefs) Then ReDim ListRefs(1 To 1): ListRefs(1) = Sheets("ref").Range("A1")
ComboBox_ref.List = ListRefs
Me.ComboBox_ref.SetFocus

End Sub
Comme on le voit quand la liste n'est pas un Array on le...
Bon alors... j'ai trouvé le problème en fait la partie du code qui s'occupe de chercher la dernière cellule non
vide :
VB:
Application.Transpose(Sheets(2).Range("B1:B" & Sheets(2).[B1048576].End(xlUp).Row).Value)

Bug lorsqu'il n'y a qu'une seul ligne dans le tableau (ce qui est le cas ici car il n'y a qu'un client). Cependant je ne sait pas si cela est dû au fait qu'il faut forcement 2 cellules distinctes pour définir une plage ou si cela est dû au fait que cette ligne de code compte à partir de 0 et non pas de 1.
Je ne sais pas non plus comment résoudre cette erreur de manière intelligente ( sans passer par un IF ou pars 20 lignes de code etc...).
Si quelqu'un a une idée ou peut m'expliquer à quoi est dû cette erreur techniquement (c'est toujours intéressant pour ne pas reproduire l'erreur);

Merci par avance et merci Patty c'est grâce à ton message que j'ai eu un éclaire de génie.
 
Bonjour R1-,

Avec la propriété .List il faut que la plage source comporte au moins 2 cellules.

Sinon la liste n'est pas un Array et il y a bug.

Pour y remédier vous pouvez compléter avec AddItem :
VB:
Private Sub userform_initialize()

Label_error_ref.Visible = False

ComboBox_client.MatchEntry = fmMatchEntryNone
ListClients = Application.Transpose(Sheets(2).Range("B1:B" & Sheets(2).[B1048576].End(xlUp).Row).Value)
If IsArray(ListClients) Then ComboBox_client.List = ListClients Else ComboBox_client.AddItem ListClients

ComboBox_ref.MatchEntry = fmMatchEntryNone
ListRefs = Application.Transpose(Sheets("ref").Range("A1:A" & Sheets("ref").[A1048576].End(xlUp).Row).Value)
If IsArray(ListRefs) Then ComboBox_ref.List = ListRefs Else ComboBox_ref.AddItem ListRefs
Me.ComboBox_ref.SetFocus

End Sub
Vous devrez revoir aussi les 2 macros Change.

Edit : salut patty58, pas rafraîchi.

A+
 
Dernière édition:
Bon voici qui est beaucoup mieux :
VB:
Private Sub userform_initialize()

Label_error_ref.Visible = False

ComboBox_client.MatchEntry = fmMatchEntryNone
ListClients = Application.Transpose(Sheets(2).Range("B1:B" & Sheets(2).[B1048576].End(xlUp).Row).Value)
If Not IsArray(ListClients) Then ReDim ListClients(1 To 1): ListClients(1) = Sheets(2).Range("B1")
ComboBox_client.List = ListClients

ComboBox_ref.MatchEntry = fmMatchEntryNone
ListRefs = Application.Transpose(Sheets("ref").Range("A1:A" & Sheets("ref").[A1048576].End(xlUp).Row).Value)
If Not IsArray(ListRefs) Then ReDim ListRefs(1 To 1): ListRefs(1) = Sheets("ref").Range("A1")
ComboBox_ref.List = ListRefs
Me.ComboBox_ref.SetFocus

End Sub
Comme on le voit quand la liste n'est pas un Array on le recrée.

Pas besoin de modifier les macros Change.

Juste dans combobox_client_change remplacez ListRefs par ListClients 🙄
 
Réactions: R1-
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…