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 Sub

Bonjour,

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 Sub

Ne pas oublier les points devant les fonctions et devant Range(......

Rechercher des sujets similaires à "sub function definie code userform"