XL 2016 erreur 381 impossible de définir listindex de table de propriété non valide

dadaze

XLDnaute Nouveau
Bonjour,

Comme l'intitulé l'indique voici le message qui s'affiche lorsque lorsque je lance ma macro "userform.show 0 " et ce après avoir insérer les premières données dans mon onglet "BD" auparavant vide. En d'autre terme une fois mes premières données rentrée, je ne peux plus appeler mon userform sans que le message en objet s'affiche.

je crois avoir déceler le code à l'origine de ce bug le voici "
Set f = Sheets("BD")
dans Useform initialize
Me.ChoixNom.List = f.Range("B2:B" & f.[B65000].End(xlUp).Row).Value
je joins mon fichier pour info ce dernier contient 3 combobox qui se superpose donc j'utilise combobox.visible = true selon l'onglet sollicité

Voilà si l'un d'entre vous peut m'aider, je l'en remercie par avance
 

Pièces jointes

  • BD Encodage OK Fonctionel.xlsm
    230.2 KB · Affichages: 12

vgendron

XLDnaute Barbatruc
Hello

le code est exceptionnellement (et anormalement à mon avis) long !
pour tes tableaux, je te conseille fortement d'utiliser les tables structurées avec des noms adéquats
regarde en PJ
sur le formulaire.. un nombre incroyable de controles tel que je n'ai pas trouvé le combobox qui est rempli en début de procédure "Useform_initialize" (je l'ai modifiée pour te montrer comment charger le combo avec la table strucuturée
 

Pièces jointes

  • BD Encodage OK Fonctionel.xlsm
    222.4 KB · Affichages: 1

vgendron

XLDnaute Barbatruc
ha si.. ca y est.. je l'ai trouvé;. il est planqué derrière 3 autres combobox....
pourquoi utiliser des combo différents selon la feuille??
il y a tellement de controle sur ton formulaire, que je n'arrive meme pas à voir TOUT le useform sur mon écran..
 

dadaze

XLDnaute Nouveau
Hello

le code est exceptionnellement (et anormalement à mon avis) long !
pour tes tableaux, je te conseille fortement d'utiliser les tables structurées avec des noms adéquats
regarde en PJ
sur le formulaire.. un nombre incroyable de controles tel que je n'ai pas trouvé le combobox qui est rempli en début de procédure "Useform_initialize" (je l'ai modifiée pour te montrer comment charger le combo avec la table strucuturée
je te remercie vivement pour ton aide je regarderai tout cela demain car ce foutu bug m'a épuisé peut être ai - je vu trop grand en tout cas je te renouvelle mes remerciements bonne soirée
 

dadaze

XLDnaute Nouveau
Bonjour,

Comme l'intitulé l'indique voici le message qui s'affiche lorsque lorsque je lance ma macro "userform.show 0 " et ce après avoir insérer les premières données dans mon onglet "BD" auparavant vide. En d'autre terme une fois mes premières données rentrée, je ne peux plus appeler mon userform sans que le message en objet s'affiche.

je crois avoir déceler le code à l'origine de ce bug le voici "
Set f = Sheets("BD")
dans Useform initialize
Me.ChoixNom.List = f.Range("B2:B" & f.[B65000].End(xlUp).Row).Value
je joins mon fichier pour info ce dernier contient 3 combobox qui se superpose donc j'utilise combobox.visible = true selon l'onglet sollicité

Voilà si l'un d'entre vous peut m'aider, je l'en remercie par avance

ha si.. ca y est.. je l'ai trouvé;. il est planqué derrière 3 autres combobox....
pourquoi utiliser des combo différents selon la feuille??
il y a tellement de controle sur ton formulaire, que je n'arrive meme pas à voir TOUT le useform sur mon écran..

Hello

le code est exceptionnellement (et anormalement à mon avis) long !
pour tes tableaux, je te conseille fortement d'utiliser les tables structurées avec des noms adéquats
regarde en PJ
sur le formulaire.. un nombre incroyable de controles tel que je n'ai pas trouvé le combobox qui est rempli en début de procédure "Useform_initialize" (je l'ai modifiée pour te montrer comment charger le combo avec la table strucuturée
Je viens de m'y remettre aujourd'hui. Suite à tes modifications en lien avec le chargement de la combobox l'erreur 381 a disparue un grand GRAND merci. Peux tu m'en dire un peux plus sur ton code ci dessous ?
Set f = Sheets("BD")
With f
If .ListObjects("Tab_BD").ListRows.Count <> 0 Then
Me.ChoixNom.List = f.ListObjects("Tab_BD").DataBodyRange.Value
End If
End With
 

vgendron

XLDnaute Barbatruc
Hello
avec quelques commentaires
VB:
Set f = Sheets("BD") 'set de la feuille à la varialbe f
With f 'avec la feuille (pas besoin de l'activer)
If .ListObjects("Tab_BD").ListRows.Count <> 0 Then 'si la table structurée "Tab_BD" n'est pas vide
Me.ChoixNom.List = f.ListObjects("Tab_BD").DataBodyRange.Value 'on place les données dans la list du combo'
End If
End With

un site ici pour visualiser les éléments d'une table structurée
 

vgendron

XLDnaute Barbatruc
Re,

Je suis en train de regarder ton code, et il y a une optimisation (ou deux..) qui apparait
1) il faudrait que TOUS les controles (101) aient leur NOM qui correspond au NOM de la colonne de la feuille BD==> plutot que d'avoir 101 lignes de "textboxmachin = cells(ligne,1)
ca permetttrait d'avoir une boucle (3 lignes de code) du style:
for i=1 to 101
controls(NOMColonne)=sheets("BD").....range(Nomcolonne, i)
next i

est ce que ces noms de colonnes sont figés?
il y a aussi du code redondant..
 

vgendron

XLDnaute Barbatruc
C'est quand meme une bonne usine à gaz...
des select case dans tous les sens.. juste pour dire : if Nom="" then exit sub
des select case mal utilisés==> exemple

select case responsable
case is "Père"
bla bla bla
end select

select case responsalbe
case is "Mère"
bla bla bla
end select

==> autant ne faire qu'un seul select case..

des bouts de code identiques et redondants
ex (101 lignes) dans 4 ou 5 macro différentes==> j'ai modifié pour créer une macro "LoadUSF" et une "SaveUSF"

plus grave.. des Noms de personnel et leur numéro de tel en dur dans le code==>
le jour où un agent change de poste et qu'il est remplacé.. et ou que le numéro de tel change.. tu fais quoi?? tu modifies dans le code??
j'ai créé une table "Structure" dans la feuille "Liste" pour inscrire les données
le code de la macro "ComboBox2Structure_Change" est modifiée pour aller chercher l'info qui va bien



des déclarations de variables en plein milieu du code (au fur et à mesure que tu les utilises)==> normalement les déclarations de font en début de macro

comme je le disais déjà, une indentation inexistante qui rend le code illisible

des macros entières mises en commentaire==> autant les supprimer

des noms de controles totalement ingérables.. label1....2.37... vu que tu gères leur contenu en fonction de certains critères.. il serait bon de leur donner un nom explicite.. j'imagine que tu dois passer des heures à chercher quel label il faut modifier..

des bouts de code pour des controles inexistants....

Bref.. y'a du tri à faire...
 

vgendron

XLDnaute Barbatruc
Quelques questions
1) le CheckBox "réduire"
pourquoi modifier le contenu du formulaire lorsque tu agrandis le formulaire?
mon avis: cette coche ne devrait servir QUE à réduire (pour voir le fichier excel) ou Agrandir le formulare SANS RIEN changer

2) CheckBox "Insérer"
permet de créer une nouvelle entrée?
==> créer un nouveau numéro
==> vide le formulaire
==> active un des trois Combo superposé==> pour quoi faire puisque tu créés une nouvelle entrée

3) Bouton "Basculer" celui à coté de Enfant1
il sert à basculer les infos de l'enfant 2 vers l'enfant1
une fois le basculement effectué, tu n'effaces pas les données de l'enfant 2 ??
 

vgendron

XLDnaute Barbatruc
Hello,

Voici une nouvelle version allégée et beaucoup plus lisible (enfin je pense)

les 2 macros identiques pour remplir les feuilles de préinscription avec des select case à rallonge passent de 980 lignes chacune à UNE seule macro de 180 lignes
Va voir le code, j'y ai mis pas mal de commentaires et questions par ci par la

1) j'ai renomé un grand nombre (95%) de controles avec des noms plus pratiques
règle de nommage utilisée:
les ComboBox ont un nom qui commence par: CBx_
les CommandButton==>CBn_
Les Labels==> Lbl_
les CheckBox==> ChkBx_
Les TextBox==>TBx_ (je n'ai pas renommé tous les textbox==> beacoup sont restés sans le préfixe TBx_)

2) dans le code, j'ai regroupé tous les codes par type de controle

3) plusieurs boutons font la meme chose (Inserer / CDossier& Com1 &Insérer BD / CDossier &Com2 &Insérer BD)==>j'ai regroupé le gros du code dans une macro séparée

4) Reste à simplifier la macro CBx_Statut_F_Change

5) ensuite, je pense que certaines macro sont encore à écrire puisque tous les boutons n'ont pas de code

6) pour la saisie de code postal et numéro de téléphone et dates, on pourrait aussi prévoir de controler la saisie
 

Pièces jointes

  • BD Encodage OK Fonctionel.xlsm
    221.9 KB · Affichages: 0

dadaze

XLDnaute Nouveau
C'est quand meme une bonne usine à gaz...
des select case dans tous les sens.. juste pour dire : if Nom="" then exit sub
des select case mal utilisés==> exemple

select case responsable
case is "Père"
bla bla bla
end select

select case responsalbe
case is "Mère"
bla bla bla
end select

==> autant ne faire qu'un seul select case..

des bouts de code identiques et redondants
ex (101 lignes) dans 4 ou 5 macro différentes==> j'ai modifié pour créer une macro "LoadUSF" et une "SaveUSF"

plus grave.. des Noms de personnel et leur numéro de tel en dur dans le code==>
le jour où un agent change de poste et qu'il est remplacé.. et ou que le numéro de tel change.. tu fais quoi?? tu modifies dans le code??
j'ai créé une table "Structure" dans la feuille "Liste" pour inscrire les données
le code de la macro "ComboBox2Structure_Change" est modifiée pour aller chercher l'info qui va bien



des déclarations de variables en plein milieu du code (au fur et à mesure que tu les utilises)==> normalement les déclarations de font en début de macro

comme je le disais déjà, une indentation inexistante qui rend le code illisible

des macros entières mises en commentaire==> autant les supprimer

des noms de controles totalement ingérables.. label1....2.37... vu que tu gères leur contenu en fonction de certains critères.. il serait bon de leur donner un nom explicite.. j'imagine que tu dois passer des heures à chercher quel label il faut modifier..

des bouts de code pour des controles inexistants....

Bref.. y'a du tri à faire...
Oui pris par le temps et de surcroit pas mes connaissances limitées en VBA j'ai essayé de faire au mieux mais à vouloir aller trop vite on ne fait que complexifier les choses. En tout cas maintenant sa fonctionne et je t'en remercie. Encore une question peut on trier par ordre croissant l'une des colonnes d'un tableau structuré la colonne B par exemple "Conca". Bonne Soirée
 

vgendron

XLDnaute Barbatruc
Salut

Dans la PJ, une version épuré, et lisible
pour comprendre, il faut que tu prennes le temps d'aller voir le code et tous les commentaires que j'y ai mis

pour le tri, c'est l'objet des deux macros "TriBD" et "TriRésiliation"

dans la feuille Listes: des tables qui permettent de ne plus avoir aucun nom de structure et num tel en dur dans le code==> pour la maintenance et le suivi, c'est beaucoup plus sain
 

Pièces jointes

  • BD Encodage OK Fonctionel -Ver 2.xlsm
    214.1 KB · Affichages: 2

Statistiques des forums

Discussions
312 095
Messages
2 085 249
Membres
102 835
dernier inscrit
Alexandrax971