Macro excel

Fermé
Utilisateur anonyme - 16 août 2010 à 22:35
Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 - 17 août 2010 à 19:32
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 2973 Date d'inscription mardi 20 janvier 2009 Statut Contributeur Dernière intervention 20 décembre 2016 942
16 août 2010 à 22:46
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
16 août 2010 à 22:49
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 2973 Date d'inscription mardi 20 janvier 2009 Statut Contributeur Dernière intervention 20 décembre 2016 942
16 août 2010 à 23:13
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
16 août 2010 à 23:19
Re,

pas de changement, ça surbrille toujours autant.
0
Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 776
17 août 2010 à 00:04
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
17 août 2010 à 09:39
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 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 776
17 août 2010 à 12:47
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
17 août 2010 à 13:56
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 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 776
Modifié par Patrice33740 le 17/08/2010 à 14:04
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
17 août 2010 à 14:35
Bonjour,

Merci de m'aider

Voici la feuille Menu de mon fichier :

https://www.cjoint.com/?iroJhE7yTe
0
Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 776
17 août 2010 à 14:57
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
17 août 2010 à 16:12
avec DoEvents pas de changement.

Oui j'ai des espèce de clignotements.
0
Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 776
17 août 2010 à 19:32
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