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 :

Problème de variables dans un module


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Septembre 2008
    Messages
    40
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Septembre 2008
    Messages : 40
    Par défaut Problème de variables dans un module
    Bonjour,

    J'aimerai utiliser une fonction dans un module.
    Cette fonction fait plus de 300 lignes et je devrais l'appeler plusieurs fois dans une feuille de mon program principal.

    Lorsque cette fonction est dans la feuille du programme principal, tout se deroule bien.
    Mais lorsque je la copie colle dans le module et que je l'appelle dans le programme principal, j'ai une erreur de type '1004' (application-defined or object-defined error)

    Dans cette fonction que je veux mettre dans le module, je recupere des variables du programme principale.
    Je presume qu'il faut faire quelquechose pour que ces variables soient compatibles dans le module et le programme principal.
    Mais je ne sait pas ce quoi faire.

    Pouvez-vous m'aidez merci.

  2. #2
    Membre Expert
    Avatar de zazaraignée
    Profil pro
    Étudiant
    Inscrit en
    Février 2004
    Messages
    3 174
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2004
    Messages : 3 174
    Par défaut
    Lors de l'appel de la procédure en question, tu dois spécifier le nom du module. Si la procédure est déclarée Private, ça ne marchera pas. Il faut qu'elle soit Public (par défaut si non spécifié). Exemple d'appel:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Module1.maProcedure [etSesArguments]
    [edit]
    après vérification, il n'est pas nécessaire de spécifier le nom du module où se trouve la procédure. Mais celle-ci doit être publique.

    Par contre, pour appeler depuis un module une procédure se trouvant dans un UserForm, il faut non seulement que celle-ci soit Publique, mais il faut aussi spécifier le nom du UserForm.

  3. #3
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Bonjour

    Je ne comprends pas bien les termes programme principal, feuille du programme principal et je la copie colle dans le module.

    Normalement, les fonctions et procédures "générales" (non attachées à un objet particulier) sont placées dans un module standard (Insertion/module). En les plaçant là, on les met, par défaut, à disposition de tout le code de l'ensemble du projet.

    Si ta fonction a besoin de variables pour être utilisée, tu as trois solutions:
    1. Passer les paramètres désirés à la fonction lorsque tu l'appelles
    2. Rendre toutes tes variables publiques en les déclarant dans un module standard, avant toute procédure ou fonction (Pas très conseillé)
    3. Faire un mix des deux (encore plus déconseillé)

    Si tu choisis l'option 2, tu auras peut-être besoin d'utiliser dans ta fonction des variables attachées à des objets précis (feuille, classeur, dans une moindre mesure Userform), tu devras alors préfixer ta variable du nom de l'objet dont elle est une propriété.

    Pourquoi choisir l'option 1, puisque je ne conseille pas les autres? Parce que c'est ce qui va t'amener à écrire une fonction propre, et surtout portable (réutilisable ailleurs)

    Tu pourras utilement lire le chapitre III-C de ce tutoriel de Morgane. Il concerne Outlook mais est transposable sur Excel
    J'espère t'avoir aidé
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  4. #4
    Membre Expert
    Avatar de zazaraignée
    Profil pro
    Étudiant
    Inscrit en
    Février 2004
    Messages
    3 174
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2004
    Messages : 3 174
    Par défaut
    Le temps que je modifie mon message, Pierre a eu le temps de donner une explication complète... Je deviens lente... ça veut dire qu'il est temps que je quitte. Allez! À demain tout l'monde!

  5. #5
    Membre averti
    Inscrit en
    Septembre 2008
    Messages
    40
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Septembre 2008
    Messages : 40
    Par défaut
    Merci d'avoir repondu.
    J'ai pas tres bien compris les reponses (je suis pas un familier de vba)

    Mais pour porter des clarification.
    quand j'utilise le terme programme principal je parle du dossier xls.
    le terme feuille du programme principal se trouve etre une feuille du dossier xls, (pour le moment j'en ai six) qui est appellé Microsoft Excel Objects sous vba.
    et enfin pour le copie colle... je voulais dire que je passe des lignes de codes qui etaient avant dans une feuille (Object) dans un module (içi sous module 1).

    Serait-il possible de m'expliquer le terme
    Passer les paramètres désirés à la fonction lorsque tu l'appelles
    car je pense que c'est que je cherche a faire. Mais je ne saisis pas vraiment.
    Sinon pour le lien vers un tutoriel, je sais qu'il faut que je passe mes variables en public.

    Mais j'ai des variables de meme noms dans d'autres procedures mais qui n'ont pas la meme fonction, et je les redefini a chaque debuts de procedures. Y-a-t'il un risque de probleme de declaration pour ces variables ?


    Je m'explique:
    J'ai la variable J qui est un compteur dans une procedure1, dans la procedure2 J correspond au numero d'une ligne. et j'ai besoin aussi de recuperer la valeur de J pour un module.


    merci pour toutes reponses.
    Si ce n'est pas tres clair, n'hesitez pas à me demander une clarification.

  6. #6
    Membre chevronné
    Profil pro
    Inscrit en
    Février 2007
    Messages
    491
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 491
    Par défaut
    bonjour,

    Peut tu nous montrer ton code.

  7. #7
    Membre averti
    Inscrit en
    Septembre 2008
    Messages
    40
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Septembre 2008
    Messages : 40
    Par défaut
    mon code fait a peu pres 500 lignes.
    donc c'est un peu difficile de le montrer.

    deplus le sujet est confidentiel.

    désolé.

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

Discussions similaires

  1. Problème de variable dans un foreach
    Par VolaiL dans le forum XSL/XSLT/XPATH
    Réponses: 5
    Dernier message: 18/05/2006, 16h57
  2. [MySQL] Problme de variables dans requete
    Par eown dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 11/04/2006, 17h05
  3. Réponses: 8
    Dernier message: 23/03/2006, 19h30
  4. problème de variable dans formulaire
    Par chienlou dans le forum Langage
    Réponses: 4
    Dernier message: 20/03/2006, 06h53
  5. [VB.NET] [Débutant] Probléme de variable dans les requettes
    Par Silvia12 dans le forum Windows Forms
    Réponses: 3
    Dernier message: 07/03/2005, 13h13

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