Userform ... Boutton validation

Cap_ou_pas_cap

XLDnaute Junior
Re : Userform ... Boutton validation

Bonjour,

Quand j'applique votre code Vb pour ma lstselect il me met Erreur d'execution "94" utilisation incorrecte de Null
 

Dranreb

XLDnaute Barbatruc
Re : Userform ... Boutton validation

Bonjour.

Effectivement :
La fonction Choose renvoie la valeur Null si index est inférieur à 1 ou supérieur au nombre de choix de la liste.
(Index étant évidemment le 1er paramètre, ici C + 1)

Vous pourriez aussi, je pense, l'écrire :
VB:
For C = 0 To UBound(Ts, 2)
   Ts(Ls, C) = Te(Le, Array(2, 4, 6, 8, …)(C))
   Next C, Ls
Vous auriez "index en dehors des limites" si là non plus vous ne spécifiiez pas suffisamment de colonnes.

Ou bien si, ce qui reviendrait au même dans les deux cas, au Redim Ts(…, la deuxième dimension était encore spécifiée trop grande par rapport à ce que vous voulez mettre dedans.
 
Dernière édition:

Cap_ou_pas_cap

XLDnaute Junior
Re : Userform ... Boutton validation

Donc mon code etant comme le suivant :

Private Sub CL_Résultat(Lignes() As Long)
Dim Te(), Le&, Ts(), Ls&, C&
TLgn = Lignes
Te = CL.PlgTablo.Resize(, 20).Value
ReDim Ts(0 To UBound(TLgn) - 1, 0 To 19)
For Ls = 0 To UBound(Ts, 1)
Le = Lignes(Ls + 1)
For C = 0 To UBound(Ts, 2)
Ts(Ls, C) = Te(Le, Choose(C + 1, 2, 3, 4, 15, 17, 18, 19))
Next C, Ls
Me.LbxSélect.List = Ts
CommandButton1.Enabled = False
End Sub

il faut que je rajoute C+1 au lieu de C dans la ligne ou l'erreur est indiqué ? enfin c'est ce que j'ai compris mais cela me donne le meme resultat...

Cordialement
 

Dranreb

XLDnaute Barbatruc
Re : Userform ... Boutton validation

ReDim Ts(0 To UBound(TLgn) - 1, 0 To 19): 20 éléments prévus, tandis que :
Ts(Ls, C) = Te(Le, Choose(C + 1, 2, 3, 4, 15, 17, 18, 19)): seulement 7 spécifiés.
 

Cap_ou_pas_cap

XLDnaute Junior
Re : Userform ... Boutton validation

Ah oui merci ...

Mais l'erreur reste toujours ... Ts(Ls, C) = Te(Le, Choose(C + 1, 2, 3, 4, 15, 17, 18, 19)): "Erreur d'execution "94" utilisation incorrecte de Null"
 

Dranreb

XLDnaute Barbatruc
Re : Userform ... Boutton validation

Qu'est ce que vous avez mis dans le Redim au lieu de 19 ?
Notez que vous pourriez le replacer par LbxSélect.ColumnCount - 1 si vous avez pris soin de mettre ce ColumnCount à 7 dans la fenêtre de propriété.
 

Cap_ou_pas_cap

XLDnaute Junior
Re : Userform ... Boutton validation

L'erreur bloque si le code Ts(Ls, C) = Te(Le, Choose(C + 1, 2, 3, 4, 15, 17, 18, 19)) ou il met toujours erreur d'excécution 94
 

Dranreb

XLDnaute Barbatruc
Re : Userform ... Boutton validation

Mettez On Error Resume Next devant, vous comprendrez peut être mieux en voyant ce qui vient ou pas dans la ListBox…
Avec le dernier code du poste #108, où vous n'avez pas prévu en premier la colonne 1, il faut 6 comme UBound(Ts, 2) et pas plus, car il n'y a que 7 numéros de colonnes spécifiés, le premier étant 2, derrière l'index C + 1 désiré. Donc ça plante pour C = 7 parce que 7 + 1 = 8.
0C + 1 = 1Choose(1, 2, 3, 4, 15, 17, 18, 19) = 2Ts(Ls, 0) = Te(Le, 2)
1C + 1 = 2Choose(2, 2, 3, 4, 15, 17, 18, 19) = 3Ts(Ls, 1) = Te(Le, 3)
2C + 1 = 3Choose(3, 2, 3, 4, 15, 17, 18, 19) = 4Ts(Ls, 2) = Te(Le, 4)
3C + 1 = 4Choose(4, 2, 3, 4, 15, 17, 18, 19) = 15Ts(Ls, 3) = Te(Le, 15)
4C + 1 = 5Choose(5, 2, 3, 4, 15, 17, 18, 19) = 17Ts(Ls, 4) = Te(Le, 17)
5C + 1 = 6Choose(6, 2, 3, 4, 15, 17, 18, 19) = 18Ts(Ls, 5) = Te(Le, 18)
6C + 1 = 7Choose(7, 2, 3, 4, 15, 17, 18, 19) = 19Ts(Ls, 6) = Te(Le, 19)
7C + 1 = 8Choose(8, 2, 3, 4, 15, 17, 18, 19) = NullPlantage
Finalement vous y arriverez peut être plus facilement avec une demi douzaine d'affectations individuelles telles qu'elles figurent dans la dernière colonne du tableau ci dessus. J'ai eu tort de croire que ça vous serait plus simple d'indiquer la liste des colonnes qu'il vous fallait à partir du second paramètre d'un Choose (vu que le premier c'est simplement l'index).
 
Dernière édition:

Cap_ou_pas_cap

XLDnaute Junior
Re : Userform ... Boutton validation

Bonjour,

Merci pour votre aide ...

Je vais essayer ..

Du coup on peut reprendre le meme schema pour les resultats a affiché sur la feuille exel si je ne veux pas les 15 premier valeurs de la colonne mais plutot choisir comme on le fait pour la listbox ?

Cordialement,
 

Cap_ou_pas_cap

XLDnaute Junior
Re : Userform ... Boutton validation

Je remet en piece joint l'exel est le code pour voir si vous trouvez l'erreur qui se produit ...

Merci,

Cordialement,
 

Fichiers joints

Dranreb

XLDnaute Barbatruc
Re : Userform ... Boutton validation

Bonjour.
Il n'y a pas de '(C)' à mettre à la fin. Ça ce serait avec Array pas Choose. C'est soit Array(…)(C) soit Choose(C+1,…)
Ensuite ça plante en essayant de récupérer Te(Le, 15) alors que vous n'en avez initalisé que 8 colonnes à partir de la plage CL.PlgTablo ! J'ai vraiment l'impressiopn que vous ne chercher pas tu tout à réfléchir à la cohérence de ce que vous faites !
 

Cap_ou_pas_cap

XLDnaute Junior
Re : Userform ... Boutton validation

Desole c'est moi j''ai envoye un mauvais dossier !!!
rivate Sub CL_Résultat(Lignes() As Long)
Dim Te(), Le&, Ts(), Ls&, C&
TLgn = Lignes
Te = CL.PlgTablo.Resize(, 19).Value
ReDim Ts(0 To UBound(TLgn) - 1, 0 To 7)
For Ls = 0 To UBound(Ts, 1)
Le = Lignes(Ls + 1)
For C = 0 To UBound(Ts, 2)
Ts(Ls, C) = Te(Le, Array(1, 2, 3, 4, 13, 15, 16, 17)(C))
Next C, Ls
Me.LbxSélect.List = Ts
CommandButton1.Enabled = False
End Sub

Mon code etant celui ci pour la liste box celui ci marche !!

Mais pour le resultat il ne marche pas :

Private Sub CommandButton1_Click()
Dim Te(), Le&, Ts(), Ls&, C&, N&, Cible As Range
Te = CL.PlgTablo.Resize(, 19).Value
ReDim Ts(1 To 500, 1 To Choose(1, 2, 3, 4, 13, 15, 16, 17))
For N = 0 To LbxSélect.ListCount - 1
If LbxSélect.Selected(N) Then
Le = TLgn(N + 1): Ls = Ls + 1
For C = 1 To Choose(1, 2, 3, 4, 13, 15, 16, 17): Ts(Ls, C) = Te(Le, C): Next C
End If: Next N
Set Cible = PlgUti(Feuil1.[A1])
Cible.Offset(Cible.Rows.Count).Resize(Ls, 8).Value = Ts
End Sub

Car sur la feuille exel il me marque bien les deux premiere colonne mais pour la suite il me mets #N/A
 

Dranreb

XLDnaute Barbatruc
Re : Userform ... Boutton validation

Mais non, vous ne pouvez pas employer le Choose comme ça voyons !
Faites comme dans la CL_Résultat, sauf qu'il faut prendre Array(…)(C - 1). En effet la borne inférieure des dimensions des tableaux définis par Array c'est 0, comme pour les lignes et colonnes de début des propriétés List des ListBox et ComboBox, contrairement à ceux correspondant aux Value des Range, lesquels commencent à 1. Ou alors prenez Choose(C,… pour cette procédure, là c'est bon.
 

Discussions similaires


Haut Bas