SUB ou FUNCTION non définie dans code du UserForm
Bonjour,
Ma question va peut-être être un peu basique, mais je me heurte à un sujet récurrent dans ma programmation : où installer les procédures, dans les feuilles, dans le UserForm, dans Module 1, ..... ??? Et comment appeler des procédures d'une feuille à une autre, ou depuis un UserForm alors que la procédure n'est pas codée dans le UF.
Voici mon problème :
J'ai un fichier Excel avec 2 feuilles. De nombreuses procédures SUB sont codées et attachées dans la page de code 'Feuil1' car c'est là que tout se passe.
Dans la feuille 1, j'ai inséré un UserForm qui s'ouvre en cliquant sur un CommandButton.
Lors de la fermeture de ce UF, en cliquant sur le bouton "valider" (Sub CB_VALIDER_Click() ), une série de procédures sont appelées et doivent s'exécuter.
Ces procédures sont codées et sont malheureusement placées dans le module de code associé à la Feuil1 car je dois les utiliser également dans cette feuille.
Ca plante, et apparait une fenêtre d'erreur "SUB ou FUNCTION non définie" et ça surligne "RECHERCHE_LIGNE_TS".
En effet, cette procédure, comme les suivantes (voir code ci-dessous) sont stockées dans Feuil1.
Pour info, ces différentes SUB recherchent une certaine ligne, et renvoie une variable 'LIGNE' qui doit être comparée à la valeur 'BAS'
Pourquoi ce plantage ?
Si je place la procédure "RECHERCHE_LIGNE_TS" (ainsi que d'autres) dans Module 1 au lieu de Feuil1, rien ne fonctionne.
Donc ... je ne sais pas comment appeler depuis un UserForm des procédures qui ne sont pas déclarées et stockées dans le code du UF.
Dois-je également dupliquer ces procédures et les placer en doublon dans le code du UserForm ? ça ne me parait pas logique et surtout lourdingue ....
Merci pour votre aide.
Ci-dessous le code exécuté lorsque je clique sur le bouton 'VALIDER' du UserForm, et qui ferme ce UF. Ces lignes sont bien sûr insérées dans le UserForm, pas dans la 'Feuil1'
Sub CB_VALIDER_Click()
'Efface tous les extras, avant de les réécrire avec les nouvelles quantités :
RECHERCHE_LIGNE_TS
If LIGNE = BAS + 1 Then
RECHERCHE_LIGNE_PARK
If LIGNE = BAS + 1 Then
RECHERCHE_LIGNE_PDJ
If LIGNE = BAS + 1 Then
RECHERCHE_LIGNE_CHAMBRE
End If
End If
End If
Range(Cells(LIGNE, 1), Cells(BAS, 10)) = ""
..............
'Fermeture du UserForm_Extras
Unload USF_EXTRAS
End SubBonjour,
Ce qu'il y a de plus basique dans ta question, c'est ton fichier...
Sinon, comme dirait ma boule de cristal, tu avais des Sub dans tes Feuil...
Pour appeler une procédure, il faut d'une part qu'elle soit dans un module standard, et surtout, qu'elle ne soit pas précédée d'un "Private"....
Bonne apm
Merci pour ton message, mais je suis désolé de ne pas vraiment comprendre ta réponse.
"Ce qu'il y a de plus basique dans ta question, c'est ton fichier..." .... que veux-tu dire par là ? Mon code est peut-être basique, mais ce n'est pas l'objet de ma question. J'ai juste besoin de comprendre pourquoi la procédure que je souhaite lancer n'est pas reconnue.
Aucune de mes SUB n'est précédé de PRIVATE, qu'elles soient installées dans 'Feuil1', dans le UserForm, ou dans 'Module 1'
De plus, que veux-tu dire par "module standard" ? ... car si je mets les SUB dans le 'module 1' et non dans 'Feuil1', rien n'est appelé et mes macros ne tournent pas.
Re-,
Quand je dis que ton fichier "exemple" est des plus basiques, c'est peut-être qu'il n'y en a pas...
Donc, j'ai répondu à l'aveugle, ne sachant ce que contenait ton code...
Si tu peux mettre un fichier, reproduisant ce ou ces problèmes, on pourrait t'aider plus efficacement
Bonne soirée
Mon code est édité dans la partie basse de mon premier message
Bonjour,
Oui, vu ton code, mais ne sachant comment est structuré tout ton code, un fichier réel, ne comprenant aucune information personnelle, est préférable.
Donc, si tu pouvais fournir ce fichier, on pourrait t'aider bien plus efficacement.
Bonne journée
Salut,
Sans l'entièreté du code c'est pas évident, mais, si tes fonctions sont dans le module de la feuille 1 elles sont donc privées à ce module.
Fait précéder l'appel aux fonctions du nom de la feuille Feuil1.RECHERCHE_LIGNE_TS et ceci pour toutes les fonctions ou bien utilises With exemple :
Sub CB_VALIDER_Click()
'Efface tous les extras, avant de les réécrire avec les nouvelles quantités :
With Feuil1
.RECHERCHE_LIGNE_TS
If LIGNE = BAS + 1 Then
.RECHERCHE_LIGNE_PARK
If LIGNE = BAS + 1 Then
.RECHERCHE_LIGNE_PDJ
If LIGNE = BAS + 1 Then
.RECHERCHE_LIGNE_CHAMBRE
End If
End If
End If
.Range(Cells(LIGNE, 1), Cells(BAS, 10)) = ""
End With
'..............
'Fermeture du UserForm_Extras
Unload USF_EXTRAS
End SubNe pas oublier les points devant les fonctions et devant Range(......