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 :

[CONTOURNE]variable changée en integer inopinément


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif Avatar de Ragmaxone
    Homme Profil pro
    Responsable systèmes de distribution
    Inscrit en
    Août 2007
    Messages
    441
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Pologne

    Informations professionnelles :
    Activité : Responsable systèmes de distribution

    Informations forums :
    Inscription : Août 2007
    Messages : 441
    Par défaut [CONTOURNE]variable changée en integer inopinément
    Bonjour,

    Ma variable (dans le module de la feuille de CodeName "wysz") :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Public guz As CommandBar
    Que j'initialise comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Set guz = Application.CommandBars. _
                     Add(Name:="guziki", Position:=msoBarBottom, Temporary:=True)
    Et dès l'utilisation de stop du VB Editor ou simplement la fermeture d'un formulaire par le bouton en haut à droite, guz devient (et les autres variables du même module) passent à Null. Plus intéressant encore, au lancement de la procédure suivante, il passe en Integer... et du coup toutes mes procédures plantent gentillement

    J'ai cherché sur le forum, le FAQ et Google mais rien trouvé... donc je m'en remets à votre savoir, par pitié aidez-moi

    Merci d'avance.


    Rag

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    753
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 753
    Par défaut
    Et si tu place ta variable dans un module standard?

  3. #3
    Membre très actif Avatar de Ragmaxone
    Homme Profil pro
    Responsable systèmes de distribution
    Inscrit en
    Août 2007
    Messages
    441
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Pologne

    Informations professionnelles :
    Activité : Responsable systèmes de distribution

    Informations forums :
    Inscription : Août 2007
    Messages : 441
    Par défaut
    Merci pour ta super rapide réponse, qui de plus est "bonne".

    En effet le fait de les déclarer dans un module standard fait qu'elles ne sont plus annulée n'importe quand.

    Mon problème est que ce sont des objets que je veux associer à mes feuilles.

    Pour contourner ce petit caprice de VBA-E, j'ai supprimé les variables et remplacées pas des appels dynamiques, en utilisant CommandBars("nomBar") et FindControl(Tag:="tag").

    Problème toutefois non résolu (c'est le pourquoi des guillemets) : j'aimerais bien comprendre pourquoi une interruption de procédure réinitialise l'objet appelant... et si il est possible de vivre avec ça, tout en utilisant les variables dans les modules de classe.


    Merci d'avance.


    Rag

  4. #4
    Membre Expert Avatar de Godzestla
    Homme Profil pro
    Chercheur de bonheur
    Inscrit en
    Août 2007
    Messages
    2 403
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de bonheur
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2007
    Messages : 2 403
    Par défaut
    Bonjour,

    a vérifier également la multiple déclaration de Guz (et des autres) qui pourrait affecter gravement l'efficacité et la porté de ta variable.

    d'après ceci :
    Ma variable (dans le module de la feuille de CodeName "wysz") :
    pour moi il est clair que ta variable n'est pas publique car elle n'existe que dans ta feuille (et je pense que tu veux dire formulaire). (un module n'est pas dans une feuille).

    D'ou, si ta feuille ou ton formulaire sont fermés, pas de chance.

  5. #5
    Membre Expert
    Avatar de JackOuYA
    Inscrit en
    Juin 2008
    Messages
    1 040
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 1 040
    Par défaut
    Bonjour, de quel bouton stop parle-tu ..? dans VBA le seul bouton qui pourrai faire croire au bouton stop de magnétoscope, c'est le bouton de réinitialisation du projet .

    voir aide en ligne :
    Réinitialiser <projet>

    Efface les variables de niveau module de pile d'exécution et réinitialise le projet.
    il est bien évident qu'il efface toutes les variables, mais, je sais que c'est pas forcément évident, tu doit prévoir ton code pour ne pas avoir à agir sur ce bouton .

    Ensuite quand tu dis il déclare tout seul en integer, j'aimerai bien voir sur qu'elle ligne de code, tu dois avoir des problémes de "portées" de variables, pour éviter cela ajoute en haut de toutes tes pages de codes :

    qui va t'obliger à déclarer toutes tes variables et ainsi tu éviteras des erreurs d'appréciations sur la portée de tes variables.

  6. #6
    Membre très actif Avatar de Ragmaxone
    Homme Profil pro
    Responsable systèmes de distribution
    Inscrit en
    Août 2007
    Messages
    441
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Pologne

    Informations professionnelles :
    Activité : Responsable systèmes de distribution

    Informations forums :
    Inscription : Août 2007
    Messages : 441
    Par défaut
    Citation Envoyé par JackOuYA Voir le message
    Bonjour, de quel bouton stop parle-tu ..? dans VBA le seul bouton qui pourrai faire croire au bouton stop de magnétoscope, c'est le bouton de réinitialisation du projet .
    Merci pour la précision, c'est bien de ce bouton là que je parlais(je pensais que c'était simplement l'arrêt de procédure)(pourtant le tooltip est clair: "reset"...).
    Le fait est que cela se produit aussi à la fermeture d'un formulaire par le bouton de fermeture de fenêtre (en haut à droite). Il doit également se comporter comme le bouton de réinitialisation du projet. C'est ennuyeux car on ne peut pas vraiment prévoir que personne ne cliquera dessus...

    Pour ce qui est du Integer, j'ai fait tout le Projet, aucune autre déclaration de guz, même avec les explicite.

    Ca ne se produit pas à une ligne en particulier, c'est au moment où il essaie le "set" dessus mais que la barre existe déjà (set qui se produit en raison du bug engendré par la mise à Null...).

    @Godzestla: je parle bien de module de feuille, correspondant au module de ma feuille de calcul, et non à un formulaire. Et la variable est bien public puisqu'elle est déclarée comme telle est accessible depuis n'importe où par
    Donc même si la feuille est "fermée" (inactive?) guz est quand même accessible.

  7. #7
    Membre émérite
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    753
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 753
    Par défaut
    Soit:
    - tu désactives la croix de ton formulaire
    - tu nous montre comment tu gères tes formulaires, car cela me paraît curieux...

  8. #8
    Membre Expert Avatar de Godzestla
    Homme Profil pro
    Chercheur de bonheur
    Inscrit en
    Août 2007
    Messages
    2 403
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de bonheur
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2007
    Messages : 2 403
    Par défaut
    Citation Envoyé par Ragmaxone Voir le message

    @Godzestla: je parle bien de module de feuille, correspondant au module de ma feuille de calcul, et non à un formulaire. Et la variable est bien public puisqu'elle est déclarée comme telle est accessible depuis n'importe où par
    Donc même si la feuille est "fermée" (inactive?) guz est quand même accessible.
    Il faut choisir entre Module et feuille pour la localisation du code.
    Si ton code est dans une feuille (Feuill1 ou Sheet1.... ou...) alors ta variable dite publique n'est pas accessible à tes modules mais uniquement au code de ta feuille.

    Si la variable est déclarée publique au début d'un module, elle est accessible partout.

Discussions similaires

  1. [AC-2007] variable change de valeur en changeant de sub
    Par Alain7751 dans le forum VBA Access
    Réponses: 1
    Dernier message: 04/07/2010, 21h16
  2. [DEBUTANT] Evenement lorsqu'une variable change de valeur
    Par erigoal dans le forum Windows Forms
    Réponses: 11
    Dernier message: 25/05/2009, 00h03
  3. Réponses: 16
    Dernier message: 12/11/2008, 20h36
  4. Pause dans un programme lorsqu'une variable change de valeur.
    Par Jérôme Lambert dans le forum Visual Studio
    Réponses: 5
    Dernier message: 21/10/2008, 11h26
  5. Réponses: 4
    Dernier message: 11/05/2006, 11h28

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