IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Appel de procédure d'un module dans un autre module [XL-2019]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    instituteur
    Inscrit en
    Juillet 2018
    Messages
    615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : instituteur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2018
    Messages : 615
    Par défaut Appel de procédure d'un module dans un autre module
    bonjour à tous...
    j'ai suivi quelques exemples d'appel de procédures de modules. j'ai essayé de comprendre et l'appliquer.
    j'ai donc créé un module1 dans lequel j'ai inséré ce code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    Option Explicit
    Public Xligne As Long
     
    Sub Ajouter_données()
    With Sheets("Base de données")
        If T_nom1 <> "" Or T_mat1 <> "" Or T_date1 <> "" _
        Or C_fction1 <> "" Or T_ecole1 <> "" Or C_classe1 <> "" Or C_secteur1 <> "" Then
            If MsgBox("Voulez-vous enregistrer" & " " & T_nom1 & " " & T_pre1 & " dans la base de données?" _
            , vbQuestion + vbYesNo) = vbNo Then Exit Sub
        Xligne = .Range("A" & Rows.Count).End(xlUp).Row
        .ListObjects("Tab_Prim").ListRows.Add
        .Range("A" & Xligne) = T_nom1
        .Range("B" & Xligne) = T_pre1
        .Range("C" & Xligne) = T_mat1
        .Range("D" & Xligne) = T_codi1
        .Range("E" & Xligne) = T_date1
        .Range("F" & Xligne) = T_lieu1
        .Range("G" & Xligne) = C_emploi1
        .Range("H" & Xligne) = C_fction1
        .Range("I" & Xligne) = C_genre1
        .Range("J" & Xligne) = T_dren1
        .Range("K" & Xligne) = T_date_iep1
        .Range("L" & Xligne) = T_post1
        .Range("M" & Xligne) = T_fp1
        .Range("N" & Xligne) = T_ecole1
        .Range("O" & Xligne) = C_classe1
        .Range("P" & Xligne) = T_num1
        .Range("Q" & Xligne) = T_mail1
        .Range("R" & Xligne) = T_iep1
        .Range("S" & Xligne) = T_code_iep1
        .Range("T" & Xligne) = C_secteur1
        Else
        MsgBox "veuillez renseignez tous les champs SVP", vbExclamation, "Champs non saisis"
        End If
    End With
     
    End Sub
    et dans le module principal de l'userform( la procédure du control Bouton), j'ai mis ce code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub BT_new1_Click()
    Call Module1.Ajouter_données
    End Sub
    lors de l'appel de la procédure, il est mentionné variable non définit et le nom du textbox( T_nom1) est surligné en jaune.
    j'aimerais comprendre le problème. merci à vous

  2. #2
    Expert confirmé Avatar de Patrice740
    Homme Profil pro
    Retraité
    Inscrit en
    Mars 2007
    Messages
    2 475
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 475
    Par défaut
    Bonjour,

    C'est simple, dans le module1, T_nom1 n'existe pas. C'est un contrôle de l'userform.
    Il faut toujours préciser la parentalité (et c'est bien aussi de préciser la propriété).

    De même, seules les feuilles de calcul contiennent des objets Range.
    Dans ce contexte, cette ligne est incorrecte :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    With Sheets("Base de données")
    La bonne syntaxe est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    With Worksheets("Base de données")

  3. #3
    Membre Expert Avatar de Thumb down
    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2019
    Messages
    1 574
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juin 2019
    Messages : 1 574
    Par défaut
    Bonsoir,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Sub Ajouter_données(Usf as Object)
    If Usf.T_nom1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub BT_new1_Click()
    Call Module1.Ajouter_données(Me)
    End Sub
    Notes que préciser Module1 ne présente d'intérêt que si tu disposes d'une autre méthode Ajouter_données dans un autre module !

  4. #4
    Membre éclairé
    Homme Profil pro
    instituteur
    Inscrit en
    Juillet 2018
    Messages
    615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : instituteur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2018
    Messages : 615
    Par défaut
    merci à vous deux pour l'explication.
    il me semble que le premier code n'est pas complet
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Sub Ajouter_données(Usf as Object)
    If Usf.T_nom1
    .

  5. #5
    Membre éclairé
    Homme Profil pro
    instituteur
    Inscrit en
    Juillet 2018
    Messages
    615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : instituteur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2018
    Messages : 615
    Par défaut
    reponse Thumb Down...
    j'ai compris ce que voulez me faire comprendre. si je comprends bien, devant le nom de chaque controle je dois mettre Usf?

  6. #6
    Membre Expert Avatar de Thumb down
    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2019
    Messages
    1 574
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juin 2019
    Messages : 1 574
    Par défaut
    Je n'avais pas l'intention de réécrire tout ton code, mais j'imagine que tu as compris !
    If Usf.T_nom1 <> "" Or Usf.T_mat1 etc...

  7. #7
    Membre Expert Avatar de Thumb down
    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2019
    Messages
    1 574
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juin 2019
    Messages : 1 574
    Par défaut
    Exactement.

    Dans ta Sub Ajouter_données je défini un paramètre Usf
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sub Ajouter_données(Usf as Object)
    Me représente le Userform !

    Ici j'appelle la méthode Ajouter_données en fournissant le Userform !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Call Module1.Ajouter_données(Me)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Exécution d'une procédure qui se trouve dans un autre classeur
    Par enchanté dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 24/07/2007, 09h31
  2. Appels de procédures d'un module
    Par patbeautifulday1 dans le forum Access
    Réponses: 1
    Dernier message: 17/01/2007, 10h56
  3. Appeler une procédure stockée a partir d'une autre
    Par wodel dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 29/11/2006, 14h07
  4. appel d'une fonction qui est dans une autre page
    Par guppy33 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 02/08/2006, 12h05
  5. Réponses: 4
    Dernier message: 11/02/2006, 10h28

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo