Actualiser affichage d'une feuille

[Je précise que Application.ScreenUpdating = True ne marche pas pour mon soucis]

Bonjour à tous,

Je vous explique mon soucis:
Dans une boucle for, j'utilise la fonction "Sleep" (équivalent à Application.Wait donc) pour changer graduellement la couleur d'une cellule:

Public Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As LongPtr)

sub ajout_ligne()

    blablablabla
    blablablabla
    blablablabla

end sub

sub coloration_cellule()

    For i = 192 To 800

        Sleep 1
        cells(i,1).interior.color = rgb(0,0,0) 'j'ai "simplifié" cette ligne, ce n'est pas l'originale, c'est juste pour illustrer
        'blablabla
        'blablabla
        'blablabla

    next

end sub

et ça marche parfaitement, mon code se met bien pause le temps que je lui demande et réalise les changement de couleur à chaque itération.

Cependant, j'ai une autre procédure qui s'execute avant celle ci, qui insère une ligne.

Mais cette ligne insérée n'apparait pas (visuellement) sur ma feuille tant que ma boucle avec mon sleep n'est pas terminée.

'Pour résumer, voici le déboulement "simplifié" de ma procédure contenant ces 2 instructions:

'Cas n°1 (cas actuel):
'1) ajout_ligne()
'2) coloration_cellule()
'3) Actualisation de la feuille permettant de voir qu'une ligne a été ajoutée

'Cas n°2 (ce que je veux):
'1) ajout_ligne()
'2) Actualisation de la feuille permettant de voir qu'une ligne a été ajoutée
'3) coloration_cellule()

Donc ma question est simple: Comment je fais pour me retrouver dans le cas n°2 ci dessus?

Merci infiniment pour votre aide toujours précieuses ;)

Bonjour

Dans une boucle for, j'utilise la fonction "Sleep" ..... et ça marche parfaitement, mon code se met bien pause le temps que je lui demande

Pourquoi utilisez-vous une pause pour mettre une cellule en couleur ?

Mais cette ligne insérée n'apparait pas (visuellement) sur ma feuille tant que ma boucle avec mon sleep n'est pas terminée

Je n'ai pas trop compris ce que vous voulez faire
Vous insérez une ligne puis cous exécutez la boucle pour colorier les lignes 192 à la ligne 800 ?

Cordialement

Bonjour Dan, merci pour ta réponse

Pourquoi utilisez-vous une pause pour mettre une cellule en couleur ?

Car je change la couleur de la cellule graduellement. Et j'ai pris 800 pour pas me faire chier à calculer précisément combien de fois j'aurai besoin d'incrémenter "i" pour arriver à 255 sur ma variable k.

Sub coloration_cellule(plage As String)

    k = 0
    For i = 192 To 800

        Sleep 1

            If i > 255 Then

                Range(plage).Interior.Color = RGB(255, k, k)
                k = k + 1
                If k = 255 Then
                    Range(plage).Font.Color = RGB(0, 0, 0)
                    Exit For
                End If

            ElseIf i < 255 Then

                Range(plage).Font.Color = RGB(255, 255, 255)
                Range(plage).Interior.Color = RGB(i, 0, 0)

            End If

    Next

End Sub

Je n'ai pas trop compris ce que vous voulez faire

Vous insérez une ligne puis cous exécutez la boucle pour colorier les lignes 192 à la ligne 800 ?

J'insère une ligne dans un tableau, ensuite je la colorie graduellement (pour montrer où elle a été insérée); la couleur de la cellule s'estompe petit à petit pour finir par reprendre sa couleur d'origine

Bonjour,

A la place de Sleep 1, vous auriez pu utiliser cette instruction --> Application.Wait (Now + 0.000001)
Plus simple et cela vous évite d'utiliser l'instruction Declare sub sleep.... en entête de votre module

Si je comprends le code met en couleur la ligne insérée que vous définissez en "plage" puis vous remet la plage à couleur blanche

A la vue de votre code il faudrait surtout voir le code précédent dans lequel vous définissez la variable plage
Par rapport à votre demande peut-être faire ceci :
- Enlever Plage as string dans votre code sub coloration
- définir plage à la fin du code précédent
- mettre un Call sub coloration avant votre END SUB du code précédent

Cordialement

Bonjour Dan,

Merci encore pour ton aide. Je n'ai vais peut être pas avoir le temps de voir ça aujourd'hui mais en attendant que je revienne après avoir essayé ce que tu proposes, mini réponses rapides:

Application.Wait (Now + 0.000001)

J'ai déja essayé mais ça n'a pas le même effet (il semble que ça va + vite que sleep 1... bizarre...Cela dit, je n'ai pas encore essayé avec tes autres conseils:

- Enlever Plage as string dans votre code sub coloration

- définir plage à la fin du code précédent

- mettre un Call sub coloration avant votre END SUB du code précédent

Je vais tenter tout ça dès que possible (je n'ai pas beaucoup de temps aujourd'hui comme je disais), et je reviens pour faire le point.

Merci beaucoup en tout cas, peut être à tout à l'heure ;)

Re Dan ,

Finalement je laisse tomber, je vais laisser comme ça sans me prendre la tête, mais c'était pour te faire le retour que j'avais promis ;)

Merci quand même,

Bonne fin de journée

Re,

Ok pas de souci.

Cordialement

Rechercher des sujets similaires à "actualiser affichage feuille"