Optimisation de code, ça rame !
Résolu/Fermé
Kuartz
Messages postés
850
Date d'inscription
vendredi 13 février 2015
Statut
Membre
Dernière intervention
15 février 2019
-
Modifié par Kuartz le 20/08/2015 à 14:44
Kuartz Messages postés 850 Date d'inscription vendredi 13 février 2015 Statut Membre Dernière intervention 15 février 2019 - 16 sept. 2015 à 14:33
Kuartz Messages postés 850 Date d'inscription vendredi 13 février 2015 Statut Membre Dernière intervention 15 février 2019 - 16 sept. 2015 à 14:33
A voir également:
- Optimisation de code, ça rame !
- Ordinateur qui rame - Guide
- Optimisation pc - Guide
- Code asci - Guide
- Code puk bloqué - Guide
- Code de déverrouillage oublié - Guide
7 réponses
NHenry
Messages postés
15113
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
22 avril 2024
331
20 août 2015 à 14:48
20 août 2015 à 14:48
Regardes en utilisant Application.ScreenUpdate (ou un truc du genre, je n'ai pas l'environnement)
Patrice33740
Messages postés
8556
Date d'inscription
dimanche 13 juin 2010
Statut
Membre
Dernière intervention
2 mars 2023
1 775
20 août 2015 à 15:38
20 août 2015 à 15:38
Bonjour,
Ce code est très redondant !!!
Il recolore en jaune (Px:Qx) les tous les doublons de la colonne P dont la colonne Q est jaune.
Que voulais-tu faire exactement ???
Un fichier exemple serait le bienvenu !
Ce code est très redondant !!!
Il recolore en jaune (Px:Qx) les tous les doublons de la colonne P dont la colonne Q est jaune.
Que voulais-tu faire exactement ???
Un fichier exemple serait le bienvenu !
Kuartz
Messages postés
850
Date d'inscription
vendredi 13 février 2015
Statut
Membre
Dernière intervention
15 février 2019
61
20 août 2015 à 15:42
20 août 2015 à 15:42
Et bien le fichier exemple est joint plus haut. En fait, voilà de façon mathématique ma demande :
Si je colore une cellule Q de la ligne x, alors on prend la valeur de la colonne P de la ligne x. Si cette valeur est retrouvée plusieurs fois (toujours dans la colonne P du fichier), alors pour toutes ces lignes, les colonnes P et Q devront être colorée en jaune.
Cordialement.
Si je colore une cellule Q de la ligne x, alors on prend la valeur de la colonne P de la ligne x. Si cette valeur est retrouvée plusieurs fois (toujours dans la colonne P du fichier), alors pour toutes ces lignes, les colonnes P et Q devront être colorée en jaune.
Cordialement.
michel_m
Messages postés
16603
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 303
20 août 2015 à 16:50
20 août 2015 à 16:50
Bonjour,
en début de macro:
application.screenupdating=false
te fera gagner du temps mais pour le reste j'essaierai sans en ^tre sûr,non par VBA, mais par mise en forme conditionnelle
en début de macro:
application.screenupdating=false
te fera gagner du temps mais pour le reste j'essaierai sans en ^tre sûr,non par VBA, mais par mise en forme conditionnelle
Kuartz
Messages postés
850
Date d'inscription
vendredi 13 février 2015
Statut
Membre
Dernière intervention
15 février 2019
61
20 août 2015 à 16:55
20 août 2015 à 16:55
Désolé mais si possible, je préfère vraiment utiliser un code VBA.
Patrice33740
Messages postés
8556
Date d'inscription
dimanche 13 juin 2010
Statut
Membre
Dernière intervention
2 mars 2023
1 775
20 août 2015 à 16:58
20 août 2015 à 16:58
Re,
Essaies ce code dans le module de la feuille :
Essaies ce code dans le module de la feuille :
Private Sub Worksheet_SelectionChange(ByVal Target As Range) Static cel As Range Dim n°L As Long If cel Is Nothing Then Set cel = ActiveCell If Intersect(cel, Columns("Q:Q")) Is Nothing Then Set cel = ActiveCell Exit Sub End If If cel.Interior.Color <> RGB(255, 255, 0) Then Columns("P:Q").Interior.Color = RGB(255, 255, 255) Set cel = ActiveCell Exit Sub End If Application.ScreenUpdating = False Application.Calculation = xlCalculationManual Columns("P:Q").Interior.Color = RGB(255, 255, 255) For n°L = 1 To Cells(Application.Rows.Count, 3).End(xlUp).Row If Cells(n°L, "P").Value = cel.Offset(0, -1).Value Then Cells(n°L, "P").Resize(1, 2).Interior.Color = RGB(255, 255, 0) End If Next n°L Set cel = ActiveCell Application.Calculation = xlCalculationAutomatic Application.ScreenUpdating = True End Sub
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Kuartz
Messages postés
850
Date d'inscription
vendredi 13 février 2015
Statut
Membre
Dernière intervention
15 février 2019
61
20 août 2015 à 17:01
20 août 2015 à 17:01
Sinon, s'il était possible de rajouter un code du genre "Si la couleur d'une cellule a été modifiée alors le code s'exécute".
Du coup ça ramerait moins le reste du temps.
J'ai essayé un "If Not Intersect(Target, Range("Q:Q")) Is Nothing Then"
Mais bon c'est pas vraiment ce que je veux.
Du coup ça ramerait moins le reste du temps.
J'ai essayé un "If Not Intersect(Target, Range("Q:Q")) Is Nothing Then"
Mais bon c'est pas vraiment ce que je veux.
Kuartz
Messages postés
850
Date d'inscription
vendredi 13 février 2015
Statut
Membre
Dernière intervention
15 février 2019
61
Modifié par Kuartz le 20/08/2015 à 17:06
Modifié par Kuartz le 20/08/2015 à 17:06
Je sais qu'on peut mettre un "Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)", mais un changement de couleur n'est pas considéré comme un changement...
Patrice33740
Messages postés
8556
Date d'inscription
dimanche 13 juin 2010
Statut
Membre
Dernière intervention
2 mars 2023
1 775
20 août 2015 à 17:07
20 août 2015 à 17:07
Il n'y a pas d'évènnement sur la modification de format d'une cellule !
Kuartz
Messages postés
850
Date d'inscription
vendredi 13 février 2015
Statut
Membre
Dernière intervention
15 février 2019
61
20 août 2015 à 17:30
20 août 2015 à 17:30
Il faut juste le créer.
Patrice33740
Messages postés
8556
Date d'inscription
dimanche 13 juin 2010
Statut
Membre
Dernière intervention
2 mars 2023
1 775
>
Kuartz
Messages postés
850
Date d'inscription
vendredi 13 février 2015
Statut
Membre
Dernière intervention
15 février 2019
20 août 2015 à 17:36
20 août 2015 à 17:36
Si tu as une solution pour créer un évènement sur changement de format, je suis preneur (et je ne suis pas le seul !)
As-tu essayé le dernier code que je t'ai proposé (à 16h58) ?
As-tu essayé le dernier code que je t'ai proposé (à 16h58) ?
Kuartz
Messages postés
850
Date d'inscription
vendredi 13 février 2015
Statut
Membre
Dernière intervention
15 février 2019
61
20 août 2015 à 17:25
20 août 2015 à 17:25
Après recherche, voici mon code qui me convient déjà beaucoup mieux :
Option Explicit Dim x As Integer Dim Cell As String Sub Code() Application.ScreenUpdating = False Dim DL As Long Dim i As Long Dim j As Long DL = ActiveSheet.Cells(Application.Rows.Count, 3).End(xlUp).Row For i = 1 To DL For j = 1 To DL If ActiveSheet.Range("Q" & i).Interior.Color = RGB(255, 255, 0) Then If CStr(ActiveSheet.Range("P" & i).Value) = CStr(ActiveSheet.Range("P" & j).Value) Then ActiveSheet.Range("P" & j).Interior.Color = RGB(255, 255, 0) ActiveSheet.Range("Q" & j).Interior.Color = RGB(255, 255, 0) End If End If Next j Next i End Sub Private Sub Workbook_SheetActivate(ByVal Sh As Object) x = ActiveCell.Interior.ColorIndex Cell = ActiveCell.Address End Sub Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range) On Error Resume Next If Cell = "" Then x = Target.Interior.ColorIndex Cell = Target.Address Exit Sub End If If Range(Cell).Interior.ColorIndex <> x Then _ Call Code x = Target.Interior.ColorIndex Cell = Target.Address End Sub
michel_m
Messages postés
16603
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 303
20 août 2015 à 18:50
20 août 2015 à 18:50
et bien, reste là dessus
eriiic
Messages postés
24570
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
23 avril 2024
7 213
21 août 2015 à 08:23
21 août 2015 à 08:23
Bonjour,
Un essai. J'ai supprimé ta ligne vide et la fusion inutile.
Double-cliquer sur ton n° en Q
https://www.cjoint.com/c/EHvgv0SoMDb
eric
Un essai. J'ai supprimé ta ligne vide et la fusion inutile.
Double-cliquer sur ton n° en Q
https://www.cjoint.com/c/EHvgv0SoMDb
eric
Kuartz
Messages postés
850
Date d'inscription
vendredi 13 février 2015
Statut
Membre
Dernière intervention
15 février 2019
61
14 sept. 2015 à 09:55
14 sept. 2015 à 09:55
Bonjour,
Désolé pour la réponse tardive, j'étais en vacances. Ce code a l'air vraiment génial. Par contre petit soucis, excel me dit parfois : "La méthode Range de l'objet global Autofilter a échoué".
Merci en tout cas !
Cordialement.
Désolé pour la réponse tardive, j'étais en vacances. Ce code a l'air vraiment génial. Par contre petit soucis, excel me dit parfois : "La méthode Range de l'objet global Autofilter a échoué".
Merci en tout cas !
Cordialement.
Kuartz
Messages postés
850
Date d'inscription
vendredi 13 février 2015
Statut
Membre
Dernière intervention
15 février 2019
61
14 sept. 2015 à 09:57
14 sept. 2015 à 09:57
Un autre petit problème. Ouvre le fichier, double clique sur chaque ligne une à une, parfois en double cliquant sur une ligne, l'écran par vers le bas du tableau et rien ne se passe.
eriiic
Messages postés
24570
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
23 avril 2024
7 213
16 sept. 2015 à 12:19
16 sept. 2015 à 12:19
Bonjour,
Heuuuu, 3 semaines après tu obliges à tout relire et à tout reprendre à zéro pour savoir ce que tu voulais et ce qui était proposé. Ca ne motive pas...
excel me dit parfois : "La méthode Range de l'objet global Autofilter a échoué".
Sans exemple précis et les manip à faire pour reproduire je ne peux rien chercher.
parfois en double cliquant sur une ligne, l'écran par vers le bas du tableau et rien ne se passe.
C'est le fonctionnement normal d'excel quand tu double-cliques sur le bord d'une cellule.
eric
Heuuuu, 3 semaines après tu obliges à tout relire et à tout reprendre à zéro pour savoir ce que tu voulais et ce qui était proposé. Ca ne motive pas...
excel me dit parfois : "La méthode Range de l'objet global Autofilter a échoué".
Sans exemple précis et les manip à faire pour reproduire je ne peux rien chercher.
parfois en double cliquant sur une ligne, l'écran par vers le bas du tableau et rien ne se passe.
C'est le fonctionnement normal d'excel quand tu double-cliques sur le bord d'une cellule.
eric
Kuartz
Messages postés
850
Date d'inscription
vendredi 13 février 2015
Statut
Membre
Dernière intervention
15 février 2019
61
16 sept. 2015 à 14:07
16 sept. 2015 à 14:07
Bonjour,
Je comprend, mais je n'arrive pas à reproduire l'erreur avec un exemple précis. J'ai l'impression que c'est plus ou moins aléatoire.
Est-il possible de désactiver ce "fonctionnement normal"?
Désolé d'avoir répondu si tardivement. Je n'avais pas internet. Laissez tomber sinon, je ferai avec.
Merci beaucoup de votre aide en tout cas.
Cordialement.
Je comprend, mais je n'arrive pas à reproduire l'erreur avec un exemple précis. J'ai l'impression que c'est plus ou moins aléatoire.
Est-il possible de désactiver ce "fonctionnement normal"?
Désolé d'avoir répondu si tardivement. Je n'avais pas internet. Laissez tomber sinon, je ferai avec.
Merci beaucoup de votre aide en tout cas.
Cordialement.
eriiic
Messages postés
24570
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
23 avril 2024
7 213
16 sept. 2015 à 14:19
16 sept. 2015 à 14:19
Est-il possible de désactiver ce "fonctionnement normal"?
Plus simple de cliquer au milieu, zoome si tu as du mal, ou bien utilise l'événement clic-droit Worksheet_BeforeRightClick() à la place.
eric
Plus simple de cliquer au milieu, zoome si tu as du mal, ou bien utilise l'événement clic-droit Worksheet_BeforeRightClick() à la place.
eric
20 août 2015 à 15:22
En VBA :
Tu n'étais vraiment pas très loin.
A++
20 août 2015 à 15:38
Voici mon fichier, je vous laisse constater la lenteur...
https://www.cjoint.com/c/EHunMdhI3Of
Cordialement.