Bonjour à tous,
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.
Code : Sélectionner tout - Visualiser dans une fenêtre à part 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 la ligne numéro 4 ici:
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).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 formule = "'!I" & i & ":J" & i With ActiveWorkbook.ActiveSheet.Cells(r, 3).Validation .Delete .Add Type:=xlValidateList, Formula1:="='" + NameBDD + formule End With
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.
audit.xlsm
Partager