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 :

Exécution du code sur l'ecran qui colorie des cellules se fige [XL-2010]


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Inscrit en
    Août 2009
    Messages
    817
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 817
    Points : 314
    Points
    314
    Par défaut Exécution du code sur l'ecran qui colorie des cellules se fige
    Bonsoir,

    J'essaie de me bricoler un métronome

    J'ai un tempo et je veux défiler une grille de 16 cellules sur 4 rangées.

    Chaque fois que j'arrive sur une cellule, j'emets un bip je la met en bleu, j'attends mon tempo, j'efface ma couleur et je passe à la suivante.

    Ca fonctionne sauf que au bout de quelques cellules l'écran n'est pas raffraichit.

    je ne pense pas que le screenupdating soit concerné puisque celui masque l'exécution en début puis le réactive en fin. (bon j'ai fait un test hasardeux, qui ne fonctionne pas, ça fige quand même au bout de quelques cellules.

    je verrais plutot un refresh de buffer qui se remplit même si la macro est très simple

    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
     
    Private Declare Function Beep Lib "kernel32" (ByVal Fq As Long, ByVal Tm As Long) As Long
    Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
    Sub Defilement()
    Dim tempo As Integer
    ' le tempo choisi
    Range("B3").Select
    tempo = 60000 / Range("W3").Value
     
    'Calage
    For r = 1 To 4
        Beep 500, 100
        Sleep tempo
    Next
     
    'Répétion
    For l = 0 To 3
        For n = 0 To 15
        Application.ScreenUpdating = True
            Cells(l + 3, n + 3).Interior.ColorIndex = 26
            Beep 500, 100
            Sleep tempo
            Cells(l + 3, n + 3).Interior.ColorIndex = xlNone '34
        Application.ScreenUpdating = False
     
            Next n
        Next l
    End Sub
    Merci pour vos conseils
    Denis

  2. #2
    Membre chevronné
    Inscrit en
    Septembre 2007
    Messages
    1 132
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 132
    Points : 1 803
    Points
    1 803
    Par défaut
    Bonsoir,
    Citation Envoyé par Denis_67 Voir le message
    je ne pense pas que le screenupdating soit concerné
    Pourtant c'est bien cela qui pose problème puisque si tu le mets en commentaire cela fonctionne.
    Pourquoi utiliser cette fonction alors que tu tiens justement à afficher ?

  3. #3
    Membre chevronné
    Avatar de NVCfrm
    Homme Profil pro
    Administrateur Système/Réseaux - Developpeur - Consultant
    Inscrit en
    Décembre 2012
    Messages
    1 036
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Administrateur Système/Réseaux - Developpeur - Consultant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Décembre 2012
    Messages : 1 036
    Points : 1 917
    Points
    1 917
    Billets dans le blog
    5
    Par défaut
    Au sujet du rafraichissement, imagine mentalement comment se terminer ton code. Si l'execution se termine, l'ecran restera fige.
    En plus pour si peu de broutilles, le fond de couleur d'une unique cellule pourquoi ScreenUpdating ?
    Ousmane


    Quand on tombe dans l'eau, la pluie ne fait plus peur.

  4. #4
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 82
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 422
    Points
    12 422
    Par défaut
    Bonjour
    j
    e ne pense pas que le screenupdating soit concerné puisque celui masque l'exécution en début puis le réactive en fin.
    Je dois avoir la berlue ou être devenu gâteux. Moi, c'est le contraire, que je lis dans ton code
    "screeupdating" se traduit par "mise à jour de l'affichage". Cette propriété est à True (= vrai) pour permettre l'affichage et à False (= faux) pour l'empêcher.
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.

  5. #5
    Membre averti
    Inscrit en
    Août 2009
    Messages
    817
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 817
    Points : 314
    Points
    314
    Par défaut
    Bonjour à tous,

    J'étais un peu fatigué et j'ai mis mon texte en contradiction avec le code.

    Donc en résumé je veux faire défiler une couleur sur une serie de cellules.

    Ca démarre bien mais au bout de quelques cellules ça se fige.

    Le screenupdating etait un test qui n'a rien changé.
    Désolé de la confusion

    si je reprends la remarque de NVCfrm, cela aurait il un sens de mettre la boucle qui appelle chaque fois un fonction ou une sub pour le coloriage ?
    Denis

  6. #6
    Membre émérite
    Avatar de pijaku
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    1 814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Août 2010
    Messages : 1 814
    Points : 2 949
    Points
    2 949
    Billets dans le blog
    10
    Par défaut
    Bonjour,

    Pour éviter l'écran figé, il te faut virer Application.ScreenUpdating de ta double boucle.
    De trop nombreux appels à la procédure Sleep peuvent empêcher le bon fonctionnement de la macro.
    Un DoEvents bien placé semble régler le souci.
    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
    Option Explicit
     
    Private Declare Function Beep Lib "kernel32" (ByVal Fq As Long, ByVal Tm As Long) As Long
    Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
     
    Sub Defilement()
    Dim tempo As Long, r As Byte, l As Byte, n As Byte
     
    ' le tempo choisi
    tempo = 250 '60000 / Range("W3").Value
    'Calage
    For r = 1 To 4
        Beep 500, 100
        Sleep tempo
    Next
    'Répétion
    For l = 0 To 3
        For n = 0 To 15
            Cells(l + 3, n + 3).Interior.ColorIndex = 26
            Beep 500, 100
            Sleep tempo
            DoEvents
            Cells(l + 3, n + 3).Interior.ColorIndex = xlNone '34
        Next n
    Next l
    End Sub
    Maintenant ce n'est pas ton plus gros souci.
    La régularité est indispensable à l'outil que tu veux mettre en place.
    On en est, ici, très loin.

    EDIT : Non ça ne fonctionne pas...
    EDIT2 : DoEvents
    Cordialement,
    Franck

  7. #7
    Membre averti
    Inscrit en
    Août 2009
    Messages
    817
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 817
    Points : 314
    Points
    314
    Par défaut
    Merci Pijaku,

    En effet ça à l'air de fonctionner.J'ai testé la séquence et c'est bon.

    Pour la régularité..... ce sera toujours mieux que sans .
    J'ai ajouté maintenant l'affichage des notes au fur et à mesure que je lis une partition enregistrée dans un tableau qui donne les notes et leurs durées.

    je teste ce soir à la maison.

    Mes applis à la maison, sont souvent des micros labos pour d'autres appli au boulot ...
    en tout cas encore merci.
    Denis

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

Discussions similaires

  1. [AutoIt] Exécuter du code sur un programme arrière-plan
    Par Max485 dans le forum Autres langages
    Réponses: 2
    Dernier message: 24/07/2015, 21h07
  2. exécution de code sur onchange
    Par shdelm dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 13/02/2013, 21h00
  3. Pc portable sur batterie : ecran qui saute
    Par Algernon2 dans le forum Ordinateurs
    Réponses: 3
    Dernier message: 30/08/2010, 15h19
  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, 15h49
  5. VBA-E comment exécuter un code sur un classeur complet?
    Par djulegnome dans le forum Macros et VBA Excel
    Réponses: 12
    Dernier message: 13/06/2006, 12h29

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