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 :

Déclaration de variables en mode Public (utilisation dans un userform et pls modules)


Sujet :

Macros et VBA Excel

  1. #1
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Novembre 2013
    Messages
    111
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Secteur : Bâtiment

    Informations forums :
    Inscription : Novembre 2013
    Messages : 111
    Par défaut Déclaration de variables en mode Public (utilisation dans un userform et pls modules)
    Bonjour à tous,

    J'aimerais utiliser les données de variables dans plusieurs modules.
    J'ai lu pas mal d'infos à propos du mode PUBLIC ou PRIVATE mais je n'arrive manifestement pas à les implémenter.

    Mon code d'un userform est le suivant :

    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
     
    Option Explicit
    Public Cem1 as long
     
    Public Sub Volume_Change()
     
    Dim Ligne As Long
    Dim Plage As Range
     
    Set Plage = Range("A2:kb2")
     
    Ligne = Me.Recette.Value + 4 'Recette correspond à une valeur encodée dans une textbox
     
        Cem1 = Cells(Ligne, Application.Match("Cem1", Plage, 0)).Value
     
    End Sub
    J'enregistre donc une valeur pour ma variable Cem1.

    J'ai ensuite un autre code, toujours dans le code de mon userform :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Public Sub Cem1_Change()
        Call Module1.CfC10
    End Sub
    Dans ce dernier, je fais donc appel à mon Module1 qui comporte le calcul suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Public Function CfC10()
     
    Cem1 + 10
     
    End Function
    J'ai alors l'erreur suivante :

    "Erreur de compilation :
    Le membre existe déjà dans un module objet dont le présent module est dérivé."

    Pourriez-vous m'éclairer à ce sujet svp ?

    Merci d'avance

  2. #2
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    re
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Public Function CfC10()
     
    Cem1=Cem1 + 10
     
    End Function
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  3. #3
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Novembre 2013
    Messages
    111
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Secteur : Bâtiment

    Informations forums :
    Inscription : Novembre 2013
    Messages : 111
    Par défaut
    Bonjour Patrick,


    Citation Envoyé par patricktoulon Voir le message
    re
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Public Function CfC10()
     
    Cem1=Cem1 + 10
     
    End Function
    Merci pour ton message. J'ai effectivement retranscrit une erreur dans mon message mais ce n'est pas l'origine du problème.
    Désolé, j'ai voulu résumer mon code mais ai été trop vite.
    Voici en un peu plus long :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Public Function CfC10()
     
    If (Cem1 * 100) < 10 Then
        CfC1 = "CF"
    Else: CfC1 = "NCF"
    End If
     
    End Function
    ce code fonctionne lorsque je le laisse dans le code de mon userform mais pas lorsqu'il est dans un module.

    merci pour ton aide !

  4. #4
    Membre Expert
    Avatar de Igloobel
    Homme Profil pro
    Développeur ERP - VBA et Formateur bureautique
    Inscrit en
    Septembre 2005
    Messages
    1 871
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur ERP - VBA et Formateur bureautique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 871
    Billets dans le blog
    1
    Par défaut
    Bonjour,

    Les sub et Public subs fonctionnent de la même manière

    c'est plutôt les variables qu'il faut déclarer par Dim ou Public (et on passe sous silence Global et Static)


    pour le plus courant voici un tuto qui regroupe les principales déclarations et surtout leurs positions dans le code

    https://silkyroad.developpez.com/VBA/LesVariables/#LV

    N'hesite pas si c'est pas suffisament clair

    A bientôt

  5. #5
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    re
    en voila une nouvelle c'est quoi cette variable cf elle vient d'ou on la vois pas dans ton code de depart
    si elle est dans le userform c'est pas etonnant c'est dans le module qu'elle doit etre et en public
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  6. #6
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Novembre 2013
    Messages
    111
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Secteur : Bâtiment

    Informations forums :
    Inscription : Novembre 2013
    Messages : 111
    Par défaut
    Merci pour vos réponses.

    J'ai bien le tuto mais je ne parviens toujours pas à saisir mon erreur.

    J'ai effectivement aussi déclaré mes variables Cf dans le module.

    Une question sur le tuto, qu'appelle-t-on par module standard (voir ci-après repris du tuto) ?


    "Pour que la variable soit utilisable dans toutes les macros du projet, il faut utiliser l'instruction Public et la variable doit impérativement être placée en tête d'un module standard."


    En gros, j'ai trois endroits où déclarer mes variables :
    - ThisWorkbook
    - userform
    - module

    J'ai essayé de le faire sur les 3 mais il n'en est rien, même avec un "public"

    Merci

  7. #7
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Novembre 2013
    Messages
    111
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Secteur : Bâtiment

    Informations forums :
    Inscription : Novembre 2013
    Messages : 111
    Par défaut
    petite question au passage :

    Puis-je donner à mes variables le nom donné à mes textbox ?

    j'aurai donc quelque part dans mon code par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Public Cem1 as String
     
    Sub Test1 ()
     
    Cem1 = 3+5
     
    End Sub
    -> ceci en code de base.

    Dans un autre module :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Sub Calcul ()
     
    Cem1 = Cem1 + 2
     
    End Sub
    Et enfin dans le premier module :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Sub Cem1_change ()
     
    Call Calcul
     
    MsgBox Cem1
     
    End Sub

    Dans mon cas, Cem1 prend au départ une valeur de 8 (3+5) mais perd sa valeur lorsqu'il change de module...

    J'espère que c'est plus clair ainsi.
    L'idée est bien entendu de sortir les calculs de mon code de base pour les rappeler ultérieurement dans d'autre procédures.

  8. #8
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    re
    ben non justement les nom doivent distincts
    plus ca va moins je te comprends
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  9. #9
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut
    [QUOTE=thomanneca;10750435]petite question au passage :

    Puis-je donner à mes variables le nom donné à mes textbox ?

    j'aurai donc quelque part dans mon code par exemple :

    ca c'est une variable text utilisable dans tout le classeur !!!!!
    ca c'est une sub qui peut fonctionner dans n'importe quel module (thiwotkbook/userfom/module/classe)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Sub Test1 ()
     
    Cem1 = 3+5
     
    End Sub


    Dans un autre module :
    ca c'est une sub aussi qui peut fonctionner dans n'importe quel module (thiwotkbook/userfom/module/classe)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Sub Calcul ()
     
    Cem1 = Cem1 + 2
     
    End Sub
    Et enfin dans le premier module :
    HEU... ca non !!! cem1 est une variable et donc n'a pas d'evenement(change ou autre)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Sub Cem1_change ()
     
    Call Calcul
     
    MsgBox Cem1
     
    End Sub
    sincerement plus ca va plus on s' éloigne de lseulement la comprehention de ce que tu souhaite
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  10. #10
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Bonjour
    En gros, j'ai trois endroits où déclarer mes variables :
    - ThisWorkbook
    - userform
    - module

    J'ai essayé de le faire sur les 3 mais il n'en est rien, même avec un "public"
    "sur les trois" : en même temps ? (j'espère que non).
    La déclaration doit se faire dans un module standard (insertion --->> module) et uniquement lui.

  11. #11
    Membre Expert
    Avatar de Igloobel
    Homme Profil pro
    Développeur ERP - VBA et Formateur bureautique
    Inscrit en
    Septembre 2005
    Messages
    1 871
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur ERP - VBA et Formateur bureautique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 871
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par thomanneca Voir le message
    ...
    Une question sur le tuto, qu'appelle-t-on par module standard (voir ci-après repris du tuto) ?


    "Pour que la variable soit utilisable dans toutes les macros du projet, il faut utiliser l'instruction Public et la variable doit impérativement être placée en tête d'un module standard."


    En gros, j'ai trois endroits où déclarer mes variables :
    - ThisWorkbook
    - userform
    - module

    J'ai essayé de le faire sur les 3 mais il n'en est rien, même avec un "public"

    Merci
    Un "Module Standard" est différent de "Module de Classe"
    Certe il s'appelle "Module" tout court mais c'est pour bien le différencier des modules de Classes qui sont fait pour la programmation des Objets.

    Je ne comprends pas ce que tu ne comprends dans :
    "Pour que la variable soit utilisable dans toutes les macros du projet, il faut utiliser l'instruction Public et la variable doit impérativement être placée en tête d'un module standard."

  12. #12
    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 le fil,

    Citation Envoyé par thomanneca Voir le message
    J'aimerais utiliser les données de variables dans plusieurs modules.
    J'ai lu pas mal d'infos à propos du mode PUBLIC ou PRIVATE mais ...
    Je te conseille de limiter la portée de tes variables au strict minimum nécessaire.
    Cela veut dire éviter les variables publiques qui sont souvent sources d'erreurs liées à leur affectation.
    En général il est préférable déclarer les variables au niveau procédure et de les passer en argument des procédures ou des fonctions appelées, quelque soit le module où elles se trouvent.

  13. #13
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Novembre 2013
    Messages
    111
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Secteur : Bâtiment

    Informations forums :
    Inscription : Novembre 2013
    Messages : 111
    Par défaut
    Bonsoir Messieurs,

    Pour commencer, veuillez m'excuser pour le délai de réaction suite à vos réponses.

    Sur base de tous vos commentaires, j'ai effectivement mieux compris le sens des déclarations.

    Me reste encore à approfondir les modules de classe mais pour l'instant, mon code fonctionne à présent "parfaitement".

    Mon erreur fût effectivement d'utiliser les mêmes noms, forcément source d'erreur !

    Encore merci pour votre aide ;-)

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

Discussions similaires

  1. [XL-2007] Ou stocker des images pour les utiliser dans un USERFORM?
    Par ThamAL dans le forum Macros et VBA Excel
    Réponses: 12
    Dernier message: 08/11/2013, 20h55
  2. Variable Public utilisation dans un thread ?
    Par altahir007 dans le forum VB.NET
    Réponses: 0
    Dernier message: 31/12/2012, 14h21
  3. Réponses: 4
    Dernier message: 10/03/2009, 14h05
  4. Réponses: 3
    Dernier message: 16/01/2008, 09h07
  5. [VBA-E] Récupérer variable excel et l'utiliser dans word
    Par a.dequidt dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 05/10/2007, 16h38

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