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 :

Reinitialisation des variables [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Août 2009
    Messages
    817
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 817
    Par défaut Reinitialisation des variables
    Bonjour,

    J'ai un classeur "menu" avec des boutons qui appellent et lancent des macros dans différents classeurs.

    Quand un classeur appelé et la macro exécutée, je peux relancer la requête par un bouton sur le classeur appelé
    Ou recliquer sur le classeur Menu.

    Ma question, comment dois-je reinitialiser mes variables en cas de relance de l'exécution ?
    J'ai des soucis avec mes variables dernières lignes par exemple qui ne sont pas reinitialisées.

    Est qu'il faut remettre un redim de toutes mes variables en début de macro ? (actuellement mes variables sont en Public donc avant le début de la macro.

    J'ai consulté l'article de Sylkyroad
    http://silkyroad.developpez.com/VBA/LesVariables/
    Mais n'y ai pas trouvé ma réponse.
    Merci pour vos conseils ou lien vers un post sur le sujet.
    Denis

  2. #2
    Membre Expert
    Homme Profil pro
    Ingénieur
    Inscrit en
    Août 2010
    Messages
    692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Août 2010
    Messages : 692
    Par défaut
    Bonjour,

    Pourquoi les déclares-tu en variables globales (en dehors de ta procédure) et non au début de ta procédure? En as-tu vraiment besoin?
    Dans le second cas, elles seront initialisées à chaque appel de la procédure.

  3. #3
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    Ton problème est lié au fait que tu gères mal tes variables publiques, car il signifie que tu les utilises sans en contrôler en amont la valeur et le fait qu'elles soient conformes à l'état qu'elles sont censées avoir lors de leur utilisation.

    Tu expliques qu'une variable stockant la dernière ligne pose problème car elle dispose encore de la dernière valeur qu'on lui a donné. Cela signifie que dans une de tes procédures, tu l'utilises SANS lui affecter une valeur avant usage.


    Si tu as réellement besoin de les déclarer en public pour des question de transport au sein de plusieurs procédures, je te conseille de créer une procédure d'initialisation au sein de laquelle :

    - tu reset les variables qui le nécessitent
    - tu instancies les éventuelles variables qui doivent l'être

    tu lances la procédure initialisation au moment opportun ... sans voir ton code je ne peux pas t'aiguiller plus.

    Ps : une méthode de bourrin, c'est d'utiliser l'instruction End (toute seule) qui va arrêter la macro en cours et reset TOUTES les variables ... attention c'est bourrin^10 et pas très conseillé.

  4. #4
    Membre éclairé
    Inscrit en
    Août 2009
    Messages
    817
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 817
    Par défaut
    Merci Joe pour tes explications, qui m'ont permis de comprendre mes erreurs.
    en effet j'ai variables en Public, car je les utilise dans plusieurs appels imbriqués suivant les à des input box.

    Pourrais tu STP me préciser comment je devrai procéder pour
    - tu reset les variables qui le nécessitent Mavariable1 = "", Mavariable2 = "", Mavariable3 = "" etc ... ?
    - tu instancies les éventuelles variables qui doivent l'être instancier une variable quesaquo?

    Question subsidiaire, les boucles for i = 1 to x, se régènère t elles ? si je met en explicite, il faut que je déclare aussi i as interger ?

    En tous cas, je je comprends déjà mieux.
    merci
    Denis

  5. #5
    Membre émérite
    Homme Profil pro
    Directeur
    Inscrit en
    Avril 2003
    Messages
    724
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur

    Informations forums :
    Inscription : Avril 2003
    Messages : 724
    Par défaut
    Salut,

    Pour reseter les variables(=leur réaffecter leur valeur d'initialisation):
    Si elles sont de type String: => maVariable=""
    Si elle sont de type numérique(Integer, Long, Double, Date, Boolean): => maVariable=0

    Tu peux aussi avoir besoin d'initialiser une variable=lui affecter une valeur particulière, avant son utiisation dans une boucle, par exemple.

    "Instancier une variable": ça ne concerne que les variables de type Objet
    Exemple:

    Dim sh As Worksheet => une variable de type Worksheet, pour référencer une feuille de calcul.

    Bonnes pratiques:
    1- Toujours déclarer les variables et leur affecter un type de donnée
    2- Toujours avoir Option Explicit en en-tête de module: ça force le compilateur à vérifier et signaler toute variable non déclarée.

    Pour l'automatiser, tu peux cocher la case "Déclaration des variables obligatoire", dans Outil/Option...

    Cordialement,

  6. #6
    Membre éclairé
    Inscrit en
    Août 2009
    Messages
    817
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 817
    Par défaut
    Super merci, et à propos de la boucle le fait e dire for I = x, repositionne la variable I à x, je suppose ? même si on est sorti de la boucle ?


    Après c'est tout, je mets en résolu !!!!

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

Discussions similaires

  1. [XL-2010] Reinitialisation des variables
    Par Denis_67 dans le forum Excel
    Réponses: 2
    Dernier message: 28/04/2016, 16h37
  2. Réponses: 4
    Dernier message: 15/12/2002, 04h19
  3. Gestion des variables - mémoire ?
    Par RIVOLLET dans le forum Langage
    Réponses: 4
    Dernier message: 26/10/2002, 12h44
  4. [VB6] [Fichier] Enregistrer des variables de structure
    Par de.bo dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 07/10/2002, 11h09
  5. Réponses: 4
    Dernier message: 18/07/2002, 13h32

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