Fichier Excel lent à cause d'une macro.
Résolu
Steeve999
Messages postés
16
Date d'inscription
Statut
Membre
Dernière intervention
-
eriiic Messages postés 24603 Date d'inscription Statut Contributeur Dernière intervention -
eriiic Messages postés 24603 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 |
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
Date d'inscription
Statut
Membre
Dernière intervention
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