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 :

[VBA-E]problème de pile pleine


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    74
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2005
    Messages : 74
    Par défaut [VBA-E]problème de pile pleine
    bonjour,
    je voudrais faire en sorte qu'un bouton dans une feuille excel change de couleur quand la souris passe dessus.
    Je récupère sans problème les coordonnées X e Y de la souris. Pour tester régulièrement ces valeurs, je fais appelle à la procédure suivante :
    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
    Option Explicit
     
    Private Sub CommandButton1_Click()
        CouleurBouton
    End Sub
    '**************************************
    Sub CouleurBouton()
    Dim PauseTime, Start, Finish, TotalTime
    Dim pos As POINTAPI
     
        PauseTime = 0.01   ' Définit le pas du temps.
        Start = Timer   ' Définit l'heure de début.
     
        'test des valeurs de X et Y
        GetCursorPos pos
        'les coordonnées sont affichées
        Label1.Caption = pos.X
        Label2.Caption = pos.Y
        'puis testées
        If ((pos.X > 881) And (pos.X < 1040)) And ((pos.Y > 540) And (pos.Y < 567)) Then
            CommandButton1.BackColor = 4966415
        Else
            CommandButton1.BackColor = 4990415
        End If
     
        Do While Timer < Start + PauseTime
                DoEvents    ' Donne le contrôle à d'autres
                            ' processus.
        Loop
        'on relance
        CouleurBouton
    End Sub
    Mon code marche mais au bon de quelques secondes, j'ai le message d'erreur suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Erreur d'exécution '28':
    Espace pile insuffisant
    Avez vous des pistes?
    Merci d'avance.

  2. #2
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Je pense que ça vient de ta ligne "CouleurBouton"
    A ta place, je définirais "Finish" as boolean et je ferais une boucle "Do -> While not finish" plutôt que relancer la macro en boucle. Une seule déclaration de variables et la boucle qui commence après.
    Et définis tes variables
    A+

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    74
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2005
    Messages : 74
    Par défaut
    Merci pour l'astuce. Il me semble que c'est bon.
    Voici mon 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
    Sub CouleurBouton()
    Dim Finish As Boolean
    Dim PauseTime As Double
    Dim Start As Single
    Dim pos As POINTAPI
     
        Finish = False
        Do
           PauseTime = 0.01   ' Définit le pas du temps.
           Start = Timer   ' Définit l'heure de début.
     
           'test des valeurs de X et Y
           GetCursorPos pos
           'les coordonnées
           Label1.Caption = pos.X
           Label2.Caption = pos.Y
           If ((pos.X > 881) And (pos.X < 1040)) And ((pos.Y > 540) And (pos.Y < 567)) Then
               CommandButton1.BackColor = 4966415
           Else
               CommandButton1.BackColor = 4990415
           End If
     
           Do While Timer < Start + PauseTime
                   DoEvents    ' Donne le contrôle à d'autres
                               ' processus.
           Loop
        Loop While Not Finish
    End Sub
    En revanche, je ne comprends pas très bien quand tu dis :
    Et définis tes variables
    Que veux tu dire et à quoi ça sert?

    Stos

  4. #4
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Déjà, si tu précises le type de tes variables, tu te serais aperçu que dans ton 1er code, Finish était inutile
    Je l'ai utilisé en tant que boolean.
    Ensuite, si tu te trompes de définition, VBA s'en apercevra et te permettra d'identifier une éventuelle erreur
    Enfin, selon les types, les variables prendront + ou - de place... et autant ajuster les besoins plutôt qu'alourdir la charge mémoire.
    Pour indication, une variable sans type déclaré est de type variant par défaut.
    A toutes fins utiles
    A+

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    74
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2005
    Messages : 74
    Par défaut
    Merci de ces précisions.
    Stos

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

Discussions similaires

  1. [VBA-E] Problème Action "Autofill"
    Par beurnoir dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 02/11/2005, 15h38
  2. [VBA-A] Problème Suppression enreg en cours
    Par _developpeur_ dans le forum Access
    Réponses: 2
    Dernier message: 17/10/2005, 20h08
  3. VBA ... CurrentRecord ... Problème d'utilisation
    Par snoopy69 dans le forum Access
    Réponses: 7
    Dernier message: 17/10/2005, 10h53
  4. [VBA] [WORD] problèmes avec NUMPAGES
    Par meufeu dans le forum VBA Word
    Réponses: 9
    Dernier message: 08/08/2005, 16h24
  5. VBA Importation problème d'INUPUT BOX
    Par snoopy69 dans le forum Access
    Réponses: 8
    Dernier message: 21/12/2004, 16h36

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