Fichier Excel lent à cause d'une macro.
Résolu
Steeve999
Messages postés
16
Statut
Membre
-
eriiic Messages postés 24581 Date d'inscription Statut Contributeur Dernière intervention -
eriiic Messages postés 24581 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour,
J'ai un fichier Excel qui devient lent quand je fais exécuter une macro.
Par exemple quand je remplis une case ou j’efface des données d'un case il reste environ 4 ou 5 seconde pour faire l'action et ça à cause du la macro car quand je l'ai effacée le fichier fonctionne parfaitement. (Vous trouverez la macro en dessous).
Je demande est ce qu'il y a une solution ?
Merci d'avance.
Macro
J'ai un fichier Excel qui devient lent quand je fais exécuter une macro.
Par exemple quand je remplis une case ou j’efface des données d'un case il reste environ 4 ou 5 seconde pour faire l'action et ça à cause du la macro car quand je l'ai effacée le fichier fonctionne parfaitement. (Vous trouverez la macro en dessous).
Je demande est ce qu'il y a une solution ?
Merci d'avance.
Macro
Private Sub Worksheet_Change(ByVal Target As Range)
Sheets("Fiche_opérateur").Range("a67:a77").EntireRow.Hidden = False
If Range("E25").Value = 5 Then
Sheets("Fiche_opérateur").Range("a67:a77").EntireRow.Hidden = True
Sheets("Rapport").Range("a132:a142").EntireRow.Hidden = True
End If
If Range("E25").Value = 9 Then
Sheets("Fiche_opérateur").Range("a71:a77").EntireRow.Hidden = True
Sheets("Rapport").Range("a132:a142").EntireRow.Hidden = False
Sheets("Rapport").Range("a136:a142").EntireRow.Hidden = True
End If
If Range("E25").Value = 12 Then
Sheets("Fiche_opérateur").Range("a74:a77").EntireRow.Hidden = True
Sheets("Rapport").Range("a132:a142").EntireRow.Hidden = False
Sheets("Rapport").Range("a139:a142").EntireRow.Hidden = True
End If
If Range("E25").Value = 14 Then
Sheets("Fiche_opérateur").Range("a76:a77").EntireRow.Hidden = True
Sheets("Rapport").Range("a132:a142").EntireRow.Hidden = False
Sheets("Rapport").Range("a141:a142").EntireRow.Hidden = True
End If
If Range("E25").Value = 15 Then
Sheets("Fiche_opérateur").Range("a77").EntireRow.Hidden = True
Sheets("Rapport").Range("a132:a142").EntireRow.Hidden = False
Sheets("Rapport").Range("a142").EntireRow.Hidden = True
End If
If Range("E25").Value = 19 Then
Sheets("Fiche_opérateur").Range("a132:a142").EntireRow.Hidden = False
End If
If Range("I32") = "Vous pouvez ne pas mesurer K2A" Then
Sheets("Fiche_opérateur").Range("a61").EntireRow.Hidden = True
Sheets("Rapport").Range("a126").EntireRow.Hidden = True
End If
If Range("I32") = "Il faut mesurer K2A" Then
Sheets("Fiche_opérateur").Range("a61").EntireRow.Hidden = False
Sheets("Rapport").Range("a126").EntireRow.Hidden = False
End If
If Range("I32") = "Vous pouvez ne pas mesurer K2A" Then
Sheets("Fiche_opérateur").Range("a98:a185").EntireRow.Hidden = True
End If
If Range("I32") = "Il faut mesurer K2A" Then
Sheets("Fiche_opérateur").Range("a98:a185").EntireRow.Hidden = False
End If
If Range("I32") = "Vous pouvez ne pas mesurer K2A" Then
Sheets("Fiche_opérateur").Range("a98:a185").EntireRow.Hidden = True
End If
If Range("I32") = "Il faut mesurer K2A" Then
Sheets("Fiche_opérateur").Range("a98:a185").EntireRow.Hidden = False
If Range("N11").Value <= 2 Then
Sheets("Fiche_opérateur").Range("a124:a185").EntireRow.Hidden = True
If Range("N11").Value < 2 * Range("N12").Value Then
Sheets("Fiche_opérateur").Range("a124:a185").EntireRow.Hidden = True
End If
End If
End If
If Range("I32") = "Il faut mesurer K2A" Then
If Range("N11").Value > 2 Then
Sheets("Fiche_opérateur").Range("a124:a185").EntireRow.Hidden = False
End If
If Range("N11").Value > 2 * Range("N12").Value Then
Sheets("Fiche_opérateur").Range("a124:a185").EntireRow.Hidden = False
End If
End If
If Range("d6") = "Sonomètre" Then
Sheets("Détail résultats Sonomètre").Visible = True
Sheets("Détail résultats Centrale LANXI").Visible = False
Sheets("Fiche_opérateur").Range("a57:a58").EntireRow.Hidden = True
Sheets("Fiche_opérateur").Range("a59").EntireRow.Hidden = False
Sheets("Fiche_opérateur").Range("a190").EntireRow.Hidden = True
Sheets("Rapport").Range("a122:a123").EntireRow.Hidden = True
Sheets("Rapport").Range("a124").EntireRow.Hidden = False
End If
If Range("d6") = "Centrale d'acquisition" Then
Sheets("Détail résultats Centrale LANXI").Visible = True
Sheets("Détail résultats Sonomètre").Visible = False
Sheets("Fiche_opérateur").Range("a57:a58").EntireRow.Hidden = False
Sheets("Fiche_opérateur").Range("a59").EntireRow.Hidden = True
Sheets("Rapport").Range("a122:a123").EntireRow.Hidden = False
Sheets("Rapport").Range("a124").EntireRow.Hidden = True
End If
End Sub
EDIT : Ajout des balises de code (la coloration syntaxique).
Explications disponibles ici :ICIMerci d'y penser dans tes prochains messages.Jordane45 |
2 réponses
-
Bonjour,
Première chose pour gagner en rapidité ... désactiver l'affichage pendant la macro.' A mettre au début de ta macro Application.ScreenUpdating = False
puis le réactiver à la fin' A mettre à la fin de ta macro Application.ScreenUpdating = true
Ensuite... si ta macro doit se lancer uniquement si tu changes certaines cellules (ou plages de cellules de ta feuille), tu peux, au début de ta macro, tester où se situe le 'target'
Par exemple : On veut une action quand on Click sur la Cellule "A1" uniquementPrivate Sub Worksheet_SelectionChange(ByVal Target As Range) If Not Application.Intersect(Target, Range("A1")) Is Nothing Then ' je suis en A1 MsgBox "Click on " & Target.Address End If End Sub
Pour continuer à améliorer ton code...
Au lieu de faire de multiplesIf Range("E25").Value = ...oriente toi plutot vers un SELECT CASEelect Case ValeurAVerifier Case "condition 1" 'Code si la "condition 1" est remplie Case "condition 2" 'Code si la "condition 2" est remplie Case "condition 3", "condition 4" 'Code si la "condition 3" ou la "condition 4" est remplie '... Case Else 'code si aucune condition est remplie End Select
Voila.. déjà avec ça.. tu devrais gagner de temps....
-
Bonjour,
pour être plus précis quel est l'intérêt de refaire par exempleIf Range("E25").Value = 5 Then
Sheets("Fiche_opérateur").Range("a67:a77").EntireRow.Hidden = True
Sheets("Rapport").Range("a132:a142").EntireRow.Hidden = True
End If
à chaque saisie n'importe où ?
Il n'est intéressant de le faire que si c'est E25 qui a changé.
Idem pour I32 et D6
eric
-
Bonjour eriiic,
Steeve999 n'a pas repondu a la proposition faite par Jordane45, mais, a fait une autre demande
https://forums.commentcamarche.net/forum/affich-34809091-executer-une-macro-lorsque-la-valeur-d-une-cellule-change -
-
-
-
-