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

XL 2016 Erreur 381

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

  • module commande ECI V2 - Copie.xlsm
    34 KB · Affichages: 10
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...

R1-

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

job75

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

job75

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

Discussions similaires

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