Fichier Excel lent à cause d'une macro.
Résolu
Steeve999
Messages postés
16
Statut
Membre
-
eriiic Messages postés 25847 Statut Contributeur -
eriiic Messages postés 25847 Statut Contributeur -
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 |
A voir également:
- Fichier Excel lent à cause d'une macro.
- Pc lent - Guide
- Fichier bin - Guide
- Telecharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Fichier epub - Guide
- Fichier rar - Guide
2 réponses
Bonjour,
Première chose pour gagner en rapidité ... désactiver l'affichage pendant la macro.
puis le réactiver à la fin
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" uniquement
Pour continuer à améliorer ton code...
Au lieu de faire de multiples
Voila.. déjà avec ça.. tu devrais gagner de temps....
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" uniquement
Private 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 multiples
If Range("E25").Value = ... oriente toi plutot vers un SELECT CASE
elect 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....
Steeve999
Messages postés
16
Statut
Membre
Merci ça bien marché
Bonjour,
pour être plus précis quel est l'intérêt de refaire par exemple
à 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
pour être plus précis quel est l'intérêt de refaire par exemple
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
à 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
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