Macro excel

Utilisateur anonyme -  
Patrice33740 Messages postés 8931 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

J'utilise Excel 2003. Pour plus de logique sur ma page Menu, j'ai la macro suivante :

Sub Masquer_Afficher_Lignes()
Application.ScreenUpdating = False
If Sheets(1).Range("D16") = "" Then
Rows("20:50").EntireRow.Hidden = True
End If

If Sheets(1).Range("D16") = "Contrôle Aléatoire" Then
Rows("16:18").EntireRow.Hidden = True
Rows("19:29").EntireRow.Hidden = False
Rows("30:50").EntireRow.Hidden = True
Sheets(1).Range("D22").Select
End If

If Sheets(1).Range("D16") = "Audit CSO" Then
Rows("16:29").EntireRow.Hidden = True
Rows("30:37").EntireRow.Hidden = False
Rows("38:50").EntireRow.Hidden = True
Sheets(1).Range("D32").Select
End If

If Sheets(1).Range("D16") = "Audit Prestation" Then
Rows("16:37").EntireRow.Hidden = True
Rows("38:50").EntireRow.Hidden = False
Sheets(1).Range("D40").Select
End If
Application.ScreenUpdating = True
End Sub

Mais ma feuille Excel surbrille beaucoup lors de l'exécution de la macro.
Sauriez vous ce comment je pourrai modifier cette macro afin d'éviter cela.

Merci d'avance.

Laure
A voir également:

10 réponses

Mytå Messages postés 4246 Date d'inscription   Statut Contributeur Dernière intervention   954
 
Salut le forum

«Mais ma feuille Excel surbrille beaucoup lors de l'exécution de la macro.»

Je ne rencontre pas ce problème avec ton code.

Tu l'appelles depuis une autre macro ?

Mytå
0
Utilisateur anonyme
 
Bonsoir

oui je l'appele à partir de la macro suivante :

Sub Worksheet_Change(ByVal Target As Excel.Range)

Application.ScreenUpdating = False

If (Target.Column = 4) And (Target.Row = 16 Or Target.Row = 22 Or Target.Row = 34 Or Target.Row = 42) Then
Masquer_Afficher_Lignes
Masquer_Bouton
End If

If (Target.Column = 4) And (Target.Row = 22 Or Target.Row = 24) Then
Masquer_Afficher_Feuille
End If

Application.ScreenUpdating = True

End Sub
0
Mytå Messages postés 4246 Date d'inscription   Statut Contributeur Dernière intervention   954
 
Re le forum

Essaye avec ceci à la place de ta macro
Sub Worksheet_Change(ByVal Target As Excel.Range)

Application.ScreenUpdating = False

If (Target.Column = 4) And (Target.Row = 16 Or Target.Row = 22 Or Target.Row = 34 Or Target.Row = 42) Then
Application.EnableEvents = False
Masquer_Afficher_Lignes
Masquer_Bouton
End If

If (Target.Column = 4) And (Target.Row = 22 Or Target.Row = 24) Then
Application.EnableEvents = False
Masquer_Afficher_Feuille
End If

Application.EnableEvents = True
Application.ScreenUpdating = True

End Sub

Mytå
0
Utilisateur anonyme
 
Re,

pas de changement, ça surbrille toujours autant.
0
Patrice33740 Messages postés 8931 Date d'inscription   Statut Membre Dernière intervention   1 782
 
Bonjour,

Moi non plus je ne rencontre pas ce problème,
cela vient peut-être de « Masquer_Bouton »

Patrice

0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Utilisateur anonyme
 
Bonjour,

voici la macro Masquer_Bouton

Sub Masquer_Bouton()

If Sheets(1).Range("D16") = "" Then
CommandButton1.Visible = False
CommandButton2.Visible = False
CommandButton3.Visible = False
CommandButton4.Visible = False
CommandButton5.Visible = False
CommandButton6.Visible = False
CommandButton7.Visible = False
End If

If Sheets(1).Range("D16") = "Contrôle Aléatoire" And Sheets(1).Range("D22") = "" Then
CommandButton1.Visible = False
CommandButton2.Visible = False
CommandButton3.Visible = False
CommandButton4.Visible = False
CommandButton5.Visible = True
ElseIf Sheets(1).Range("D16") = "Contrôle Aléatoire" And Sheets(1).Range("D22") = "Diffuser les Fichiers" Then
CommandButton1.Visible = True
CommandButton2.Visible = False
CommandButton3.Visible = False
CommandButton4.Visible = False
CommandButton5.Visible = True
ElseIf Sheets(1).Range("D16") = "Contrôle Aléatoire" And Sheets(1).Range("D22") = "Analyser les Résultats" Then
CommandButton1.Visible = False
CommandButton2.Visible = False
CommandButton3.Visible = False
CommandButton4.Visible = False
CommandButton5.Visible = True

End If

If Sheets(1).Range("D16") = "Audit CSO" Then
CommandButton1.Visible = False
CommandButton2.Visible = False
CommandButton3.Visible = False
CommandButton4.Visible = False
CommandButton6.Visible = True
End If

If Sheets(1).Range("D16") = "Audit Prestation" And Sheets(1).Range("D42") = "" Then
CommandButton1.Visible = False
CommandButton2.Visible = False
CommandButton3.Visible = False
CommandButton4.Visible = False
CommandButton7.Visible = True
ElseIf Sheets(1).Range("D16") = "Audit Prestation" And Sheets(1).Range("D42") = "Procéder à un Audit Prestation" Then
CommandButton1.Visible = False
CommandButton2.Visible = True
CommandButton3.Visible = True
CommandButton4.Visible = False
CommandButton7.Visible = True
ElseIf Sheets(1).Range("D16") = "Audit Prestation" And Sheets(1).Range("D42") = "Analyser les Résultats Prestation" Then
CommandButton1.Visible = False
CommandButton2.Visible = False
CommandButton3.Visible = False
CommandButton4.Visible = True
CommandButton7.Visible = True

End If

End Sub
0
Patrice33740 Messages postés 8931 Date d'inscription   Statut Membre Dernière intervention   1 782
 
Bonjour,

Effectivement la première macro (Masquer_Afficher_Lignes) se termine par une réactivation de la mise à jour écran (Application.ScreenUpdating = True) et donc lors de la seconde (Masquer_Bouton) l'écran est mis à jour à chaque modification.

Dans les deux procédures Masquer_Bouton et Masquer_Afficher_Lignes, modifie la désactivation de la mise à jour écran comme suit :

au début :

Dim scr As Boolean
scr = Application.ScreenUpdating
Application.ScreenUpdating = False

et à la fin :

Application.ScreenUpdating = scr


De cette manière, lorsque les macros sont appelées par une autre (Worksheet_Change) qui désactive la mise à jour écran, cette désactivation ne sera pas annulée lors de la fin de la macro appelée, la réactivation sera commandée par la macro appelante.

Cordialement
Patrice.
0
Utilisateur anonyme
 
Bonjour,

Merci.

J'ai modifié mes macros comme vous me l'avez indiqué, mais cela ne change rien.
Ma feuille surbrille toujours autant.
0
Patrice33740 Messages postés 8931 Date d'inscription   Statut Membre Dernière intervention   1 782
 
Re bonjour,

Met un exemple de ton fichier (après avoir remplacé les informations confidentielles) sur https://www.cjoint.com/ et met le lien sur ton prochain poste

Nicolas dit toujours : « C'est facile quand on connait la réponse ! »
0
Utilisateur anonyme
 
Bonjour,

Merci de m'aider

Voici la feuille Menu de mon fichier :

https://www.cjoint.com/?iroJhE7yTe
0
Patrice33740 Messages postés 8931 Date d'inscription   Statut Membre Dernière intervention   1 782
 
Je ne rencontre pas de problème avec le fichier.

Quand : Lors de la sélection du type de contrôle ?

Que veux-tu dire par : « Mais ma feuille Excel surbrille beaucoup lors de l'exécution de la macro ». Est-ce des clignotements ?

A tout hasard, essaie d'ajouter un DoEvents au début de la procédure appelante :

Sub Worksheet_Change(ByVal Target As Excel.Range)
DoEvents
Application.ScreenUpdating = False
...


0
Utilisateur anonyme
 
avec DoEvents pas de changement.

Oui j'ai des espèce de clignotements.
0
Patrice33740 Messages postés 8931 Date d'inscription   Statut Membre Dernière intervention   1 782
 
Re bonjour,

Effectivement j'ai un clignotement lorsque l'on agit sur un bouton Retour

Cela vient du fait que la procédure Retour() modifier la feuille et provoque l'évènement change et donc exécuter Worksheet_Change à chaque modification.

Il faut appliquer dans Retour() la solution proposée par Mytå :

Au début :
Sub Retour()
Application.EnableEvents = False
...

et à la fin :
Application.EnableEvents = True
End sub

Cordialement
0