Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Pb affichage lors de l'excution d'une macro

6 réponses
Avatar
Patrice
Bonjour,

J'ai deux interrogations concernant l'affichage écran durant l'exécution
d'une macro:
1 : J'ai un userform qui permet la saisie de paramètre de lancement de
la macro . Lorsque l'on clique sur le bouton Lancer, l'userform doit
s'effacer (unload me) puis la macro est appelée. A l'affichage,
l'userform reste à l'écran durant toute l'exécution de la macro!!
Comment puis-je faire disparaitre le userform dès lancement?

2- Ma macro est un while sur une feuille1, qui tant qu'il y a des
lignes, va voir pour chaque ligne de la feuille1 sur la feuille2 si elle
trouve la même référence (un autre while qui parcourt chaque ligne de la
feuille2 pour tenter de retrouver la référence). Si la référence est
retrouvée, elle vérifie si les commentaires sont modifiés et les
re-copie sur la feuille1 le cas échéant.
Durant l'exécution de la macro, Application.statusBar m'indique le
numéro de ligne traitée.
A certaine exécution, le numéro de ligne traité reste bloqué après
quelques lignes, parfois l'écran se fige sur du gris, mais la macro
s'excute tout de même.
Quels sont les causes de ces bugs affichage?

Cordialement.

6 réponses

Avatar
lSteph
Bonjour,

A priori pour le 1
démarrer la macro une fois le userform fermé, c'est sûr!
Mais si application.screenupdating = false figure quelque part
avant...vaudrait mieux après
Cela dit c'est de la pure supposition et pour le reste...
Il est assez difficile d'envisager la rectification d'un code que l'on
ne peut lire.

Cdlt.

lSteph



Bonjour,

J'ai deux interrogations concernant l'affichage écran durant l'exécut ion
d'une macro:
1 : J'ai un userform qui permet la saisie de paramètre de lancement de
la macro . Lorsque l'on clique sur le bouton Lancer, l'userform doit
s'effacer (unload me) puis la macro est appelée. A l'affichage,
l'userform reste à l'écran durant toute l'exécution de la macro!!
Comment puis-je faire disparaitre le userform dès lancement?

2- Ma macro est un while sur une feuille1, qui tant qu'il y a des
lignes, va voir pour chaque ligne de la feuille1 sur la feuille2 si elle
trouve la même référence (un autre while qui parcourt chaque ligne de la
feuille2 pour tenter de retrouver la référence). Si la référence est
retrouvée, elle vérifie si les commentaires sont modifiés et les
re-copie sur la feuille1 le cas échéant.
Durant l'exécution de la macro, Application.statusBar m'indique le
numéro de ligne traitée.
A certaine exécution, le numéro de ligne traité reste bloqué apr ès
quelques lignes, parfois l'écran se fige sur du gris, mais la macro
s'excute tout de même.
Quels sont les causes de ces bugs affichage?

Cordialement.


Avatar
Garette
Bonjour,

Pour la question 1, j'ai simulé ton exemple de la façon suivante :
Avec "Application.ScreenUpdating = True" le UserForm disparait tout de
suite.

Sub titi()
UserForm1.Show
End Sub

Private Sub CommandButton1_Click()
toto
End Sub

Sub toto()
UserForm1.Hide
Application.ScreenUpdating = True
For i = 1 To 10000
Range("A1").Offset(i, 0).Value = "toto" & i
Next
End Sub

Pour la question 2, pareil que lSteph...
Avatar
Patrice
Merci à vous deux pour vos réponses.

Concernant le Application.ScreenUpdating, je vais bien vérifier
l'ensemble du code demain, j'ai effectué pas mal de modif aujourd'hui et
je n'ais pas le code complet sur ma clé. Mais il me semble que le seul
paramètre à False pour lui est ci-dessous, soit après l'utilisation du
userform, je controle ce point.

Pour la seconde question, voici mon code (à deux trois vaches près, j'ai
rajouté un controle sur l'existance des pages au départ)

Sub Enrichissement()
Application.ScreenUpdating = False

Dim i As Integer
Dim i2 As Integer
Dim commentGlobal As String
Dim Comment As String
Dim it As Integer
Dim imax As Integer
Dim maj As Boolean
Dim Nbmaj As Integer

Nbmaj = 0
i = 6
it = 1



'Calcul du nombre d'occurence max du fichier site
imax = 6
With Sheets(f)
Do While .Range("H" & imax) <> ""
imax = imax + 1
Loop
If imax = 6 Then
MsgBox "Il n'y a pas de ligne à traiter pour la feuille " & f
Exit Sub
End If
End With
With Sheets("global")
Do While .Range("G" & i) <> ""
Application.StatusBar = "Traitement de la ligne " & it


pièce = .Cells(i, "G").Value
commentGlobal = .Cells(i, "V").Value

i2 = 6
With Sheets(f)
Do While .Range("H" & i2) <> pièce
i2 = i2 + 1
maj = False
If i2 = imax Then
GoTo SortieDeSecours
End If
Loop

Comment = .Cells(i2, "W").Value
If commentGlobal = Comment Then
maj = False
Else
maj = True
End If
End With
If maj = True Then
Range("V" & i).Value = Comment
Range("W" & i).Value = Date
Nbmaj = Nbmaj + 1
End If
SortieDeSecours:
i = i + 1
it = it + 1
Loop
End With
MsgBox "Il y a " & Nbmaj & " commentaires mis à jour"
Application.StatusBar = False
End Sub

Merci pour vos réponses.

Bonjour,

Pour la question 1, j'ai simulé ton exemple de la façon suivante :
Avec "Application.ScreenUpdating = True" le UserForm disparait tout de
suite.

Sub titi()
UserForm1.Show
End Sub

Private Sub CommandButton1_Click()
toto
End Sub

Sub toto()
UserForm1.Hide
Application.ScreenUpdating = True
For i = 1 To 10000
Range("A1").Offset(i, 0).Value = "toto" & i
Next
End Sub

Pour la question 2, pareil que lSteph...




Avatar
lSteph
;o) bonjour Garette

ainsi " pour les deux "pareil
sauf que je remettrais bien un sreenupdating à False juste après la
disparition effective du userform pour la suit plus fluide.
Faut que j'y aille.

@+


Bonjour,

Pour la question 1, j'ai simulé ton exemple de la façon suivante :
Avec "Application.ScreenUpdating = True" le UserForm disparait tout de
suite.

Sub titi()
UserForm1.Show
End Sub

Private Sub CommandButton1_Click()
toto
End Sub

Sub toto()
UserForm1.Hide
Application.ScreenUpdating = True
For i = 1 To 10000
Range("A1").Offset(i, 0).Value = "toto" & i
Next
End Sub

Pour la question 2, pareil que lSteph...


Avatar
lSteph
Bonsoir,

je ne saisis pas vraiment le but de cette macro, ce que tu entends par
commentaire mis à jour
f et pièce.. non définis.

Il faudrait un support pour comprendre mieux ce qu'elle doit faire sur
quoi.
http://cjoint.com

Cdlt.

lSteph


Patrice a exprimé avec précision :
Merci à vous deux pour vos réponses.

Concernant le Application.ScreenUpdating, je vais bien vérifier l'ensemble du
code demain, j'ai effectué pas mal de modif aujourd'hui et je n'ais pas le
code complet sur ma clé. Mais il me semble que le seul paramètre à False pour
lui est ci-dessous, soit après l'utilisation du userform, je controle ce
point.

Pour la seconde question, voici mon code (à deux trois vaches près, j'ai
rajouté un controle sur l'existance des pages au départ)

Sub Enrichissement()
Application.ScreenUpdating = False

Dim i As Integer
Dim i2 As Integer
Dim commentGlobal As String
Dim Comment As String
Dim it As Integer
Dim imax As Integer
Dim maj As Boolean
Dim Nbmaj As Integer

Nbmaj = 0
i = 6
it = 1



'Calcul du nombre d'occurence max du fichier site
imax = 6
With Sheets(f)
Do While .Range("H" & imax) <> ""
imax = imax + 1
Loop
If imax = 6 Then
MsgBox "Il n'y a pas de ligne à traiter pour la feuille " & f
Exit Sub
End If
End With
With Sheets("global")
Do While .Range("G" & i) <> ""
Application.StatusBar = "Traitement de la ligne " & it


pièce = .Cells(i, "G").Value
commentGlobal = .Cells(i, "V").Value

i2 = 6
With Sheets(f)
Do While .Range("H" & i2) <> pièce
i2 = i2 + 1
maj = False
If i2 = imax Then
GoTo SortieDeSecours
End If
Loop

Comment = .Cells(i2, "W").Value
If commentGlobal = Comment Then
maj = False
Else
maj = True
End If
End With
If maj = True Then
Range("V" & i).Value = Comment
Range("W" & i).Value = Date
Nbmaj = Nbmaj + 1
End If
SortieDeSecours:
i = i + 1
it = it + 1
Loop
End With
MsgBox "Il y a " & Nbmaj & " commentaires mis à jour"
Application.StatusBar = False
End Sub

Merci pour vos réponses.

Bonjour,

Pour la question 1, j'ai simulé ton exemple de la façon suivante :
Avec "Application.ScreenUpdating = True" le UserForm disparait tout de
suite.

Sub titi()
UserForm1.Show
End Sub

Private Sub CommandButton1_Click()
toto
End Sub

Sub toto()
UserForm1.Hide
Application.ScreenUpdating = True
For i = 1 To 10000
Range("A1").Offset(i, 0).Value = "toto" & i
Next
End Sub

Pour la question 2, pareil que lSteph...





--
- -


Avatar
Patrice
Bonjour,
Merci à vous deux pour vos réponses.
J'ai testé aujourd'hui, si j'enlève le sreenupdating à False, qui est
situé après le UserForm1.Hide, cela fonctionne bien.
Pour que je vous permettre de voir mon code via http://cjoint.com , il
faut que j'enlève des données (dans les colonnes non utilisées) afin que
vous puissiez mettre le doigt sur mes erreurs.

Grands mercis à vous deux.

Patrice

;o) bonjour Garette

ainsi " pour les deux "pareil
sauf que je remettrais bien un sreenupdating à False juste après la
disparition effective du userform pour la suit plus fluide.
Faut que j'y aille.

@+


Bonjour,

Pour la question 1, j'ai simulé ton exemple de la façon suivante :
Avec "Application.ScreenUpdating = True" le UserForm disparait tout de
suite.

Sub titi()
UserForm1.Show
End Sub

Private Sub CommandButton1_Click()
toto
End Sub

Sub toto()
UserForm1.Hide
Application.ScreenUpdating = True
For i = 1 To 10000
Range("A1").Offset(i, 0).Value = "toto" & i
Next
End Sub

Pour la question 2, pareil que lSteph...