Etrange problème d'OLEObject et autres

Bonjour à tous,

Ayant ouvert un topic sur le site developpez sans réponse pour le moment, je me permets de faire de même ici.

Je rencontre depuis quelques jours un souci plutôt étrange avec VBA:

Il y a 2 mois, j'ai créé un classeur VBA permettant de charger une base de donnée de questions, de générer un formulaire en fonction de certains critères, de mixer toutes les réponses et de les envoyer dans un document Word.

Tout fonctionnait à merveille mais, ayant rencontré déjà quelques incohérences, mon code n'était pas super propre.

Il y a quelques jours quand j'ai re-ouvert ce classeur plus rien ne fonctionnait.

La base de donnée se chargeait mais il m'était impossible de créer le formulaire.

Normalement aucun souci, si la feuille "Questionnaire" est bien présente dans mon classeur (en feuille masquée) et si l'utilisateur rempli le nom/prénom puis clique sur le bouton de validation, la feuille se créer sous son nom.

Il peut même en créer plusieurs à la fois en cliquant sur le + dans le form qui rajoutera des champs, mais bon j'en demande pas autant.

J'ai donc essayé d'isoler le problème et je me suis rendu compte qu'Excel n'aimait pas que je crée des feuilles en ayant un form ouvert.

Très étrange car le programme a toujours fonctionné ainsi...

Je sauvegarde donc désormais le nom de mes feuilles à créer dans des cellules puis quand mon form se ferme je les crée.

Mais là deuxième problème: La feuille se crée jusqu'à l'implantation de la combobox.

J’insère dans chaque feuille créée une combobox permettant de choisir la fonction de la personne questionnée. Ma fonction a l'air correcte puisqu'en épurant mon fichier pour le poster ici, l'erreur "Propriété ou méthode non gérée par cet objet" 438 n'apparait que lors de la création d'une seule feuille. En créant plusieurs feuilles le programme réagi bien.

Par contre sur mon fichier entier, c'est lors de la création de la première feuille qui plante, même si on choisi de créer plusieurs feuille.

Comment expliquer que cette ligne marche dans certain cas mais pas d'autres, sachant que ce n'est pas la feuille (Worksheets(sh)) qui pose problème.

Set MyCB = ActiveWorkbook.Worksheets(sh).OLEObjects.Add(classtype:="Forms.Combobox.1", Left:=610, Top:=80, Width:=150, Height:=20)

D'abord appelé juste après chaque feuilles créée, dans une boucle, j'ai déplacer la fonction pour qu'elle soit appelé une fois toutes les feuilles créée. Je suis quand même obligé de l'appeler dans une boucle au cas ou j'en ai plusieurs à créer.

Bref, rien à faire. En allant plus loin (sur mon fichier entier) et en essayant d'utiliser la combobox sur les feuilles où elle a bien voulu se créer, j'ai rencontrer encore un autre problème sur ".Add Type:=xlValidateList, Formula1:="='" + NameBDD + formule" ici:

 formule = "'!I" & i & ":J" & i
                      With ActiveWorkbook.ActiveSheet.Cells(r, 3).Validation
                         .Delete
                         .Add Type:=xlValidateList, Formula1:="='" + NameBDD + formule
                      End With

Cette fonction n'est pas dans le fichier que j'ai partagé, c'était simplement pour montrer que ce n'est pas normal qu'il plante seulement maintenant sur ça. Si je résume, mon programme qui fonctionnait parfaitement y'a 2 mois a rencontré maintenant des problèmes sur les formulaires et la création de feuilles, les OLEObject et sur les cellules de validation (je ne sais pas quel est le terme).

J'ai procédé à plusieurs désinstallation et réinstallation d'office, j'ai aussi il me semble coché les bonnes références, j'ai essayé sur d'autres machines...

Je vous remercie d'avance du temps accordé à mon problème.

Bonjour,

Ta méthode ne me paraît pas très économique : lorsqu'on veut générer des feuilles élaborées, on le fait généralement par duplication à partir d'un modèle, ce qui permet de le faire au moyen d'une procédure réduite, rapide et fiable...

Cela m'apparaît donc comme un type d'exercice gratuit, dont l'intérêt se limite à la réalisation de l'exercice (il peut m'arriver d'en faire, mais jamais pour une utilisation opérationnelle...)

Je n'ai survolé ton code que de loin, mais (outre que ton indentation fantaisiste ne me convient pas , j'aurais tendance à être de plus en plus maniaque sur ce point depuis que j'ai fait quelques mesures de temps à lire un même code selon qu'il était indenté dans les règles ou pas), la présence de deux procédures avec le même nom, le fait que tu ne sembles pas savoir qu'une variable non typée individuellement n'est pas typée (ce qui fait partie des bases les plus élémentaires de VBA), l'utilisation de + comme opérateur de concaténation (qui a toujours été déconseillée)... ne m'incite pas à aller jusqu'à tester...

Si ton projet doit être utilisée, je renouvelle mon conseil de revenir à une méthode sans doute plus classique, mais dont l'efficacité sera garantie.

Cordialement.

Bonsoir,

quand j'ai vu le problème hier, je n'ai pas eu le temps de répondre...

Mais ce que dit MFerrand est ce que j'allais vous répondre :

Si vous créez une nouvelle feuille dans laquelle vous écrivez un code dedans(ceci dit en essayant votre classeur j'ai eu le droit a une erreur avertissement, comme quoi un code essayait de modifier le code - pas très sécuritaire !!!!), le plus simple est de créer une feuille "vierge" qui représente ce que vous souhaitez au final, dans laquelle les lignes de codes seront déjà inscrites, il vous suffira alors de faire un copier coller de cette feuille et le tour est joué : copie des boutons, des codes des mises en formes......

C'est d'autant plus simple et en plus c'est plus sécuritaire, non ?

Bonsoir Maréchal

@ bientôt

LouReeD

Salut LouReed !

Rechercher des sujets similaires à "etrange probleme oleobject"