XL 2010 Erreur 13 incompatibilité de type

Neofalken

XLDnaute Junior
Bonjour le forum,

J'ai un petit souci avec un programme qui fonctionnait très bien jusqu'au jour où j'ai eu à mettre à jour des valeurs dans mon tableau.
Depuis j'ai un bug à l'ouverture.
Pourriez-vous m'aider svp ?
Merci d'avance
 

Pièces jointes

  • Masse-ventilateurs2.xls
    407.5 KB · Affichages: 24

Dranreb

XLDnaute Barbatruc
Bonjour.
Le problème vient de ce que l'UserForm_Initialize change la ComboBox1 avant que Tbl ne soit initialisé. Or la Sub ComboBox1_Change veut y accéder.

Utilisez donc mon objet ComboBoxLiées: Il n'y a plus à s'occuper des ComboBox sauf pour les lui faire prendre en charge, et la programmation du reste s'en trouve considérablement simplifiée.
 

Neofalken

XLDnaute Junior
Bonjour.
Le problème vient de ce que l'UserForm_Initialize change la ComboBox1 avant que Tbl ne soit initialisé. Or la Sub ComboBox1_Change veut y accéder.

Utilisez donc mon objet ComboBoxLiées: Il n'y a plus à s'occuper des ComboBox sauf pour les lui faire prendre en charge, et la programmation du reste s'en trouve considérablement simplifiée.

euh....Merci pour la réponse mais du coup je dois faire quoi ? je ne comprends pas la deuxième partie non plus "Utilisez donc mon objet ComboBoxLiées"?
 

Dranreb

XLDnaute Barbatruc
Initialisez Tbl avant d'exécuter la boucle qui modifie la ComboBox1 pour établir une liste sans doublon (même pas classée…)
Un objet ComboBoxLiées est un type d'objet défini par un module de classe du même nom qui prend en charge toute la gestion des listes et des choix.
Il décrète aussi des évènements lors de ceux ci, qui renvoient notamment à l'UserForm la liste des numéros de lignes dans la base où tous correspondent.
 

Pièces jointes

  • CBxLiéesNeofalken.xlsm
    109.3 KB · Affichages: 35

Neofalken

XLDnaute Junior
Initialisez Tbl avant d'exécuter la boucle qui modifie la ComboBox1 pour établir une liste sans doublon (même pas classée…)
Un objet ComboBoxLiées est un type d'objet défini par un module de classe du même nom qui prend en charge toute la gestion des listes et des choix.
Il décrète aussi des évènements lors de ceux ci, qui renvoient notamment à l'UserForm la liste des numéros de lignes dans la base où tous correspondent.
Ok, je vais essayer ça. Merci pour ton aide.
 

herve62

XLDnaute Barbatruc
Supporter XLD
Dranreb !! pourrais tu te mettre au niveau de notre ami Neo... car même pour moi ton truc c'est de la haute voltige de VBA !!!!! difficile à comprendre , et ton fichier n'a plus aucun rapport avec le sien !
Il va être paumé ... et en fait il cherche une aide ici ; Merci à toi car il a bien joint SON CLASSEUR .. comme tu le stipules dans ta signature !!!
 

Dranreb

XLDnaute Barbatruc
Oui mais ses ComboBox s'appelle ComboBox1, ComboBox2 etc. Et il y a plein de Frame inutiles.
Pas eu envie de lui faire sa UserForm_Initialize avec mise en route d'un CL, objet ComboBoxLiées.
Mais c'est vraiment très facile, si, si, et ça marche toujours du premier coup.
Après bon, pour l'interfaçage avec le reste de la programmation de l'UserForm, il faut sélectionner CL dans la liste de gauche qui surmonte la fenêtre de code, exactement comme on y sélectionne le nom d'un contrôle en vue de traiter son évènement Change.
Et, de toute façon, il faut aller jeter un coup d’œil dans le module de classe ComboBoxLiées: tout y est expliqué du point de vue de celui qui est en train de développer le code de son UserForm.
Et puis il y a aussi eu une petite confusion avec cette discussion où le demandeur n'avait pas joint de classeur, mais j'avais déjà joint le mien quand je m'en suis aperçu. De toute façon je pense que serait mieux que les demandeurs se l'écrivent, comme ça ils n'aurait pas besoin de se familiariser avec celui que je leur écris toujours, sempiternellement.
 
Dernière édition:

Neofalken

XLDnaute Junior
Bonjour à vous deux qui vous êtes gentiment penché sur mon problème.
Mon programme n'est pas très "propre c'est vrai mais pour ma décharge c'était mon tout premier lors de ma découverte de vba réalisé avec des bouts de programme pris à droite et à gauche selon mes besoins.
Je ne programme pas régulièrement et je n'ai pas le vocabulaire.
Dranreb : si je comprends bien ta proposition des combobox liées est pour simplifier mon programme et le rendre plus ingérable ? j'essaierai de m'en servir si j dois renouveler le même type de programme car cela me plait bien mais pour l'instant je n'ai pas le temps matériel de tout modifier même si c'est pour le rendre plus simple dans le fond, mais pour l'instant c'est la forme qui m'intéresse.
Moi ce que je ne comprends pas c'est qu'il fonctionnait très bien et que le jour où j'ai modifié ou ajouté des lignes, il n'a plus fonctionné et m'a fait une erreur 13 en surlignant
For I = 1 To UBound(Tbl, 1)

Quand je dis que je n'ai pas le vocabulaire, je ne vois ce que ça veut dire "initialiser tbl", j'ai essayé de trouver ce que cela pouvait vouloir dire, mais je dois avouer que ça m'échappe.
Au cas où je vous joints le premier fichier qui fonctionne, avant mes modifications de valeurs dans le tableau.
C'est pas beau, mais ça fonctionne. Et comme vous pouvez le voir le programme est identique. J'ai juste les données qui sont sur la première page ald'un onglet "données"(mais même quand j'ai modifié les valeurs sur la première page, il me faisait la même erreur). Pourquoi fonctionnait-il avant et plus maintenant ?

Autre chose : Pourquoi dis tu que mon classeur n'était pas joint dès le début de la conversation ? Je l'ai joints dès mon premier msg, il y a une manip supplémentaire à faire ? J'ai zappé q chose ?

Merci d'avance
 

Pièces jointes

  • Masse-ventilateurs3.xls
    425 KB · Affichages: 21

Dranreb

XLDnaute Barbatruc
Bonjour
Ah, ok. Initialiser ça veut souvent dire affecter une expression. Je parlais donc du Tbl = quelque chose, il est plus loin, alors au moment de la boucle, qui est avant, Tbl est encore vide.
Dans le dernier classeur joint on ne passe jamais par toutes les conditions où ça plante.
Mettez un point d'arrêt dans la UserForm_Initialize (cliquez dans la marge grise à gauche de la 1ère instruction exécutable) puis déroulez en pas à pas quand il est arrêté dessus (touche F8), vous verrez.

Mais si ça ne marche pas comme vous l'avez fait, pourquoi n'essayeriez vous pas de laissez faire la chose à un CL ? Il le fait bien, vous savez ! Il faut juste trainer du projet vba de mon classeur vers celui du votre le module MSujetCBx et les deux modules de classe CombBoxLiées et ComboBoxMmbr.

Non, non pas de problème, je répondais à hervé62 en lui parlant d'une autre discussion.
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 193
Messages
2 086 062
Membres
103 110
dernier inscrit
Privé