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