Application.ScreenUpdating ou Application.EnableEvents ?

gourdin

XLDnaute Impliqué
Bonjour,


J'utilise le code :

"Application.ScreenUpdating = False" en début de macro et "Application.ScreenUpdating = True"

en fin de macro pour éviter de voir s'afficher les différentes actions de la macro.

Or les actions continuent à s'afficher (changement de feuilles, nombreuses selections de différentes plages etc..)


J'ai ajouté à mon code le code suivant :

"Application.EnableEvents = False" en début (idem avec true en fin de macro)

Celà fonctionne.


Il y a t-il je un risque particulier à utiliser le code "Application.EnableEvents"

Est-il utile d'utiliser les 2 codes en même temps ?

Merci
 

Papou-net

XLDnaute Barbatruc
Re : Application.ScreenUpdating ou Application.EnableEvents ?

Bonjour gourdin,

Je crois pouvoir affirmer qu'il n'y a pas de risque particulier à utiliser ces deux instructions dans une même procédure. Le seul danger est qu'en cas de plantage du programme, EnableEvents reste à la valeur False et donc agisse à la reprise de la macro. Pour y remédier, il suffit de les remettre à True au tout début de la procédure, puis de les repasser aussitôt à False. Ce n'est pas très "élégant" mais ça fonctionne.

Par contre, je voudrais attirer ton attention sur le point suivant : si tu appliques de nombreuses actions de sélections de feuilles et de cellules, il n'est pas obligatoires de le faire pour changer les valeurs : l'adressage peut se faire sans sélection préalable. Ce serait plus facile de t'expliquer avec ton code sous les yeux, mais il y a là surement matière à améliorer le confort visuel et la rapidité d'exécution de tes macros.

Espérant t'avoir apporté une réponse satisfaisante.

Bon dimanche.

Cordialement.
 
Dernière édition:

néné06

XLDnaute Accro
Re : Application.ScreenUpdating ou Application.EnableEvents ?

Bonjour Gourdin

Application.EnableEvents = False, annulera les procédures Change etc... , qui suivront .
Doit tu exécuter ces procédures change ?
Il est important de vérifier la portée de tes instructions.

Peux tu nous faire par venir une petite PJ ou effectuer un pas à pas pour constater les différents branchements ?

A+

Edit: Bonjour Papou-net
 

gourdin

XLDnaute Impliqué
Re : Application.ScreenUpdating ou Application.EnableEvents ?

Bonjour,

Merci pour vos réponses.
Ci après un exemple de code (fourni d'ailleurs hier grace au forum) pour lequel
"Application.ScreenUpdating" ne fonctionne pas.

Code:
Sub CREATION_PDF()
Sheets("feuill1").Select
Application.ScreenUpdating = False
i = 7 'cellule qui contient le nombre de lutteurs (A7 pour le premier tableau nordique)
boucle:
Range("A" & i).Select
If ActiveCell.Value = "" Then Exit Sub
If ActiveCell.Value > 1 And ActiveCell.Value < 6 Then
ActiveCell.Offset(1, 2).Range("A1:p36").Select
Selection.ExportAsFixedFormat Type:=xlTypePDF, Filename:=ThisWorkbook.Path & "\" & ActiveCell.Offset(0, 0).Value & " " & Range("age").Value & " " & Range("style").Value & ".pdf" _
, Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas _
:=False, OpenAfterPublish:=False
End If
i = i + 100 ' 100 lignes qui séparent chaque tableau
GoTo boucle
'Application.ScreenUpdating = True
End Sub
 

Papou-net

XLDnaute Barbatruc
Re : Application.ScreenUpdating ou Application.EnableEvents ?

Bonjour laetitia,
RE gourdin,

C'est comme le dit Laetitia, c'est ainsi que je voyais la solution, les Select en moins.

Voici, pour ma part,comment je procèderais (sans garantie car je n'ai pas de cellules nommées dans mon exemple):

Code:
Sub CREATION_PDF()
With Sheets("feuill1")
     Application.ScreenUpdating = False
     i = 7 'cellule qui contient le nombre de lutteurs (A7 pour le premier tableau nordique)
boucle:
     With .Range("A" & i)
         If .Value = "" Then Exit Sub
         If .Value > 1 And .Value < 6 Then
             .Offset(1, 2).Range("A1:P36").ExportAsFixedFormat Type:=xlTypePDF, Filename:=ThisWorkbook.Path & "\" & _
               ActiveCell.Offset(0, 0).Value & " " & Range("age").Value & " " & Range("style").Value & ".pdf" _
               , Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas _
               :=False, OpenAfterPublish:=False
         End If
         i = i + 100 ' 100 lignes qui séparent chaque tableau
         GoTo boucle
     End With
     Application.ScreenUpdating = True
End With
End Sub

En principe, les ScreenUpdating ne seraient plus nécessaires mais je les ai conservés.

En espérant avoir aidé.

Cordialement.
 

Discussions similaires

Réponses
2
Affichages
186

Membres actuellement en ligne

Statistiques des forums

Discussions
312 105
Messages
2 085 350
Membres
102 870
dernier inscrit
Armisa