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 :

Mon code bloque mes autres macros


Sujet :

Macros et VBA Excel

  1. #1
    Membre éprouvé
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Septembre 2007
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 896
    Par défaut Mon code bloque mes autres macros
    Bonjour,

    J'ai mis en place ce code qui permet entre autre que le message qui apparait clignote.
    Mais lorsque je clique sur le bouton "Oui", les formulaires se ferment bien, mais les autres macros sont bloquées, je ne peux plus aller sur le gestionnaire de macro "Alt + F11".

    Pouvez-vous m'indiquer l'erreur que j'ai fait dans ma programmation ?
    Je vous en remercie par avance

    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
     
    Private Sub CNon_Click() 'Je clique sur non, le formulaire se ferme
    Unload Me
    End Sub
     
    Private Sub CoK_Click() 'Je clique sur oui, les 2 formulaires se ferment
    Unload Me
    Unload FrmAdhé
    End Sub
     
    Private Sub UserForm_Activate()
    'clignote
    Dim a As String
    a = Timer
    Do
    Do Until a + 0.6 <= Timer
    DoEvents
    Loop
    If Label1.Visible = True Then Label1.Visible = False Else Label1.Visible = True
    a = Timer
    Loop
    End Sub

  2. #2
    Membre Expert Avatar de aalex_38
    Inscrit en
    Septembre 2007
    Messages
    1 631
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 631
    Par défaut
    Bonjour,

    J'ai testé le code et si tu met un point d'arret sur le "clique oui" tu verras ensuite
    que tu ne sorts jamais de la boucle principale :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Private Sub UserForm_Activate()
    'clignote
    Dim a As String
    a = Timer
    Do ' Boucle principale dont on ne sort jamais ! 
        Do Until a + 0.6 <= Timer
        DoEvents
        Loop
    If Label1.Visible = True Then Label1.Visible = False Else Label1.Visible = True
    a = Timer
    Loop
    End Sub

  3. #3
    Membre éprouvé
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Septembre 2007
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 896
    Par défaut
    Bonjour aalex 38,

    Je ne comprends pas ce que tu veux me dire. Le code que tu as joint est identique au mien.
    Que dois-je faire exactement ?

  4. #4
    Membre Expert Avatar de aalex_38
    Inscrit en
    Septembre 2007
    Messages
    1 631
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 631
    Par défaut
    Excuse moi Nec, je n'ai pas apporté de correction à ton code, je t'ai juste signalé que tu étais dans une boucle infinie.
    Je regarde pour une solution

    Même s'il doit y avoir plus élégant ceci fonctionne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    If UserForm1.Visible = False Then
             Exit Sub
    End If
    Voila, en espérant que ça t'aide.

  5. #5
    Membre éprouvé
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Septembre 2007
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 896
    Par défaut
    Ok aalex 38.
    Je cherche également de mon côté. Si un autre internaut connaît une solution, qu'il n'hésite pas. Pour l'instant j'ai supprimé le code de mon appli car c'est vraiement trop bloquant

  6. #6
    pgz
    pgz est déconnecté
    Expert confirmé Avatar de pgz
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Août 2005
    Messages
    3 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Office VBA
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2005
    Messages : 3 692
    Par défaut
    Bonjour

    Je te propose une autre façon de faire.
    Dans le module du formulaire
    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
    Private Sub CNon_Click() 'Je clique sur non, le formulaire se ferme
    bBlink = False
    Unload Me
    End Sub
     
    Private Sub CoK_Click() 'Je clique sur oui, les 2 formulaires se ferment
    bBlink = False
    Unload Me
    Unload FrmAdhé
    End Sub
     
    Private Sub UserForm_Activate()
    bBlink = True
    Application.OnTime Now + TimeValue("00:00:01"), "subBlink"
    End Sub
    Et dans un module standard
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Public bBlink As Boolean
     
    Public Sub subBlink()
    If bBlink Then
        UserForm1.Label1.Visible = Not (UserForm1.Label1.Visible)
        Application.OnTime Now + TimeValue("00:00:01"), "subBlink"
    Else
        UserForm1.Label1.Visible = True
    End If
    End Sub
    Le clignotement sera plus lent, mais il n'y a plus de boucle d'attente, ce qui est nettement mieux.

    PGZ

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 17
    Par défaut
    Citation Envoyé par aalex_38 Voir le message
    Bonjour,

    J'ai testé le code et si tu met un point d'arret sur le "clique oui" tu verras ensuite
    que tu ne sorts jamais de la boucle principale :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Private Sub UserForm_Activate()
    'clignote
    Dim a As String
    a = Timer
    Do ' Boucle principale dont on ne sort jamais !  ''CONDITION ICI
        Do Until a + 0.6 <= Timer
        DoEvents
        Loop
    If Label1.Visible = True Then Label1.Visible = False Else Label1.Visible = True
    a = Timer
    Loop ''OU CONDITION ICI
    End Sub
    Comme te la stipulé aalex tu à un probleme de boucle si tu regarde bien sur ton premier Do Loop il n'y a aucune condition de sortie de boucle.

    Donc tu auras beau continuer tout ça tu ne sortiras jamais

  8. #8
    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
    Il est en effet important de souligner ces points:
    -VB/VBA ça marche comme le C/C++ ou bon nombre de langages: un seul code exécuté à la fois; d'ailleurs si quelqu'un connaît un langage où plusieurs codes peuvent être exécutés en même temps je suis curieux de connaître, car je pense pas que ça existe.
    -lorsque l'on a l'impression que plusieurs programmations sont réalisées en même temps (dans les jeux vidéo notamment), en réalité ce n'est que du code linéaire codé en boucle qui s'exécute à très grande vitesse, avec un timer d'attente à la fin de chaque boucle, ce qui donne un rafraichissement de l'écran (ou autre) à peu près constant et donne l'impression que plusieurs codes fonctionnent simultanément
    -tu n'as toujours qu'un seul programme géré à la fois par le processeur, et sur le même principe que le jeu vidéo, c'est non pas plusieurs programmes exécutés à la fois, mais chacun l'un après l'autre en utilisant chacun un temps processeur plus ou moins long: quand ton gestionnaire des taches dit que ton programme utilise 1% du processeur, ça veut dire qu'il occupe le processeur au max de ses capacités (il sait faire que du tout ou rien), mais seulement 1% du temps. Si tu as déjà fait un programme lourd, tu auras sans doute remarqué que celui-ci utilisait 100% du processeur (ou de l'un des processeurs si tu as plusieurs coeurs: moi ça me fait 50% vu que j'ai un dual core sur le PC de bureau).

    Bref tout ça pour te dire: ne jamais espérer faire fonctionner 2 codes en même temps et un code à la fois.

    En l'occurence, ici, le code de pgz se termine après le ontime. Après, comment ça relance une procédure: ça c'est Excel qui gère, et ça ne tient plus du VBA.

    Désolé d'avoir sorti un pavé pour expliquer un des principes fondamentaux de la prog, mais bon un peu de culture ça ne peut pas faire de mal.

  9. #9
    Membre éprouvé
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Septembre 2007
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 896
    Par défaut
    Ouah! que de choses apprises. Je suis novice en matière de programmation et je n'en connaît pas toutes les subtilités. J'ai pu m'apercevoir que sur ce site il y a des experts en la matière. Je tatonne et souvent je me plante.

    Je vais mettre en place les propositions qui me sont faites. Je vous tiens au courant.

    Super ça marche. L'accès aux outils de programmation n'est plus bloquée.
    Merci à tous pour votre aide
    A+

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

Discussions similaires

  1. [Débutant] Erreur sur mon code avec mes methodes.
    Par solaar dans le forum Silverlight
    Réponses: 5
    Dernier message: 30/05/2013, 18h43
  2. Mon code bloque sur la function
    Par Bricoltou dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 06/01/2010, 12h40
  3. [XL-2003] problème pour executer mon code sur un autre pc
    Par jess59 dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 04/06/2009, 10h24
  4. [Système] Exécuter mon code sur un autre site
    Par pas30 dans le forum Langage
    Réponses: 2
    Dernier message: 21/08/2007, 16h49
  5. [Macro Access] pb dans mon code pour lancer une macro Access
    Par Commodore dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 20/06/2007, 11h51

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