Simplification/accélération d'une macro Le sujet est résolu

Y compris Power BI, Power Query et toute autre question en lien avec Excel
C
Captain_coco
Jeune membre
Jeune membre
Messages : 18
Inscrit le : 19 novembre 2018
Version d'Excel : 2010

Message par Captain_coco » 8 janvier 2019, 14:10

Bonjour à tous,

Pour commencer bonne année à tous mes meilleurs vœux pour cette nouvelle année qui commence :)
Je vous expose mon soucis, j'ai créé une macro qui fonctionne très bien en revanche j'ai un petit soucis au niveau des temps d’exécution qui sont relativement long et j'aimerais donc améliorer mon code au niveau de la structure voir changer quelque chose si plus de rapidité est possible (j'en appel donc a votre savoir :)). Je ne vous met qu'une petite partie du code qui fait des centaines de lignes en réalité mais qui ce répètes toutes donc si on trouve une solution pour ce petit bout de programme je prendrais soin de l'appliquer à tout mon programme.

Le code:

Option Explicit

Sub MacroS2()
'
' MacroS2
'

'
Dim BoEcran As Boolean, BoBarre As Boolean, BoEvent As Boolean, BoSaut As Boolean
Dim iCalcul As Integer
BoEcran = Application.ScreenUpdating
BoBarre = Application.DisplayStatusBar
iCalcul = Application.Calculation
BoEvent = Application.EnableEvents
BoSaut = ActiveSheet.DisplayPageBreaks
Application.ScreenUpdating = False (désactivation des options ralentissant l'ordi)
Application.DisplayStatusBar = False
Application.Calculation = xlCalculationManual
Application.EnableEvents = False
ActiveSheet.DisplayPageBreaks = False
Sheets("extraction 2").Select (je sélectionne une feuille ou les données sont présentes)
ActiveSheet.Range("$1:$2047").AutoFilter Field:=4, Criteria1:="D3 262", Field:=17, Criteria1:="07/01/2019"
Range("B1:M2073").Select
Range("M1").Activate (j'active mes filtres et sélectionne les données dont j'ai besoin)
Application.CutCopyMode = False
Selection.Copy
Sheets("appro S2").Select (je les copies et les colles sur une autre feuille)
Range("B5").Select
ActiveSheet.Paste
End sub

Répétition du code avec des filtres différents (changement de dates en l'occurence)

Voili voilou, si quelqu'un pense avoir une solution pour accélérer tout sa et serait d’accord pour me la transmettre dans son infini gentillesse je lui serait grandement reconnaissant :)

Merci et à bientôt !
Avatar du membre
Dan
Modérateur
Modérateur
Messages : 5'872
Appréciations reçues : 75
Inscrit le : 27 avril 2007
Version d'Excel : 2010, 2000, Mac 2004, 2011

Message par Dan » 9 janvier 2019, 13:11

Bonjour

Je ne vois pourquoi vous déclarez toutes ces variables Boolean. Donc sur base de votre info, voici ce que vous pouvez essayer :
Sub xxxx()
With Application
    .ScreenUpdating = False
    .Calculation = xlCalculationManual
End With

With Sheets("extraction 2")
   .Select
   .Range("$1:$2047").AutoFilter Field:=4, Criteria1:="D3 262", Field:=17, Criteria1:="07/01/2019"
   .Range("B1:M2073").Copy Sheets("appro S2").Range("B5")
End With
'à mettre à la fin de votre code complet
With Application
    .ScreenUpdating = True
    .Calculation = xlCalculationAutomatic
End With
End sub
Cordialement
2 membres du forum aiment ce message.
@+ Dan ;)
C
Captain_coco
Jeune membre
Jeune membre
Messages : 18
Inscrit le : 19 novembre 2018
Version d'Excel : 2010

Message par Captain_coco » 9 janvier 2019, 14:12

Bonjour Dan,

je vous remercie pour votre réponse mais cela ne fonctionne malheureusement pas, je m'explique étant donné que le filtre criteria 1 change de date cela fausse le copier/coller, votre code retiens le premier copier exécuté et le colle à toute les cases de destination renseignées dans le code. Mon code applique les filtres copie/colle, ré-applique un filtre et copie/colle, les données sont les bonnes et vont au bon endroit mais cela prend énormément de temps à s'exécuter. Votre code garde en mémoire une copie et l'applique partout, la copie ne change pas :(. Avez-vous une solution ?
With Sheets("extraction 3")
   .Select
   .Range("$1:$2047").AutoFilter Field:=4, Criteria1:="D3 262", Field:=17, Criteria1:="15/01/2019"
   .Range("B1:M2073").Copy Sheets("appro S3").Range("B5")
End With

With Sheets("extraction 3")
   .Select
   .Range("$1:$2047").AutoFilter Field:=4, Criteria1:="D3 262", Field:=17, Criteria1:="16/01/2019"
   .Range("B1:M2073").Copy Sheets("appro S3").Range("B33")
End With

With Sheets("extraction 3")
   .Select
   .Range("$1:$2047").AutoFilter Field:=4, Criteria1:="D3 262", Field:=17, Criteria1:="17/01/2019"
   .Range("B1:M2073").Copy Sheets("appro S3").Range("B53")
End With

With Sheets("extraction 3")
   .Select
   .Range("$1:$2047").AutoFilter Field:=4, Criteria1:="D3 262", Field:=17, Criteria1:="18/01/2019"
   .Range("B1:M2073").Copy Sheets("appro S3").Range("B70")
End With

With Sheets("extraction 3")
   .Select
   .Range("$1:$2047").AutoFilter Field:=4, Criteria1:="D3 262", Field:=17, Criteria1:="19/01/2019"
   .Range("B1:M2073").Copy Sheets("appro S3").Range("B105")
End With
With Sheets("extraction 3")
   .Select
   .Range("$1:$2047").AutoFilter Field:=4, Criteria1:="M1 262", Field:=17, Criteria1:="14/01/2019"
   .Range("B1:M2073").Copy Sheets("appro S3").Range("S5")
End With

With Sheets("extraction 3")
   .Select
   .Range("$1:$2047").AutoFilter Field:=4, Criteria1:="M1 262", Field:=17, Criteria1:="15/01/2019"
   .Range("B1:M2073").Copy Sheets("appro S3").Range("S33")
End With

With Sheets("extraction 3")
   .Select
   .Range("$1:$2047").AutoFilter Field:=4, Criteria1:="M1 262", Field:=17, Criteria1:="16/01/2019"
   .Range("B1:M2073").Copy Sheets("appro S3").Range("S53")
End With

With Sheets("extraction 3")
   .Select
   .Range("$1:$2047").AutoFilter Field:=4, Criteria1:="M1 262", Field:=17, Criteria1:="17/01/2019"
   .Range("B1:M2073").Copy Sheets("appro S3").Range("S70")
End With

With Sheets("extraction 3")
   .Select
   .Range("$1:$2047").AutoFilter Field:=4, Criteria1:="M1 262", Field:=17, Criteria1:="18/01/2019"
   .Range("B1:M2073").Copy Sheets("appro S3").Range("S105")
End With

With Sheets("extraction 3")
   .Select
   .Range("$1:$2047").AutoFilter Field:=4, Criteria1:="D1 262", Field:=17, Criteria1:="15/01/2019"
   .Range("B1:M2073").Copy Sheets("appro S3").Range("AK5")
End With

With Sheets("extraction 3")
   .Select
   .Range("$1:$2047").AutoFilter Field:=4, Criteria1:="D1 262", Field:=17, Criteria1:="16/01/2019"
   .Range("B1:M2073").Copy Sheets("appro S3").Range("AK33")
End With

With Sheets("extraction 3")
   .Select
   .Range("$1:$2047").AutoFilter Field:=4, Criteria1:="D1 262", Field:=17, Criteria1:="17/01/2019"
   .Range("B1:M2073").Copy Sheets("appro S3").Range("AK53")
End With

With Sheets("extraction 3")
   .Select
   .Range("$1:$2047").AutoFilter Field:=4, Criteria1:="D1 262", Field:=17, Criteria1:="18/01/2019"
   .Range("B1:M2073").Copy Sheets("appro S3").Range("AK70")
End With

With Sheets("extraction 3")
   .Select
   .Range("$1:$2047").AutoFilter Field:=4, Criteria1:="D1 262", Field:=17, Criteria1:="19/01/2019"
   .Range("B1:M2073").Copy Sheets("appro S3").Range("AK105")
End With

With Sheets("extraction 3")
   .Select
   .Range("$1:$2047").AutoFilter Field:=4, Criteria1:="D4 262", Field:=17, Criteria1:="15/01/2019"
   .Range("B1:M2073").Copy Sheets("appro S3").Range("BC5")
End With

With Sheets("extraction 3")
   .Select
   .Range("$1:$2047").AutoFilter Field:=4, Criteria1:="D4 262", Field:=17, Criteria1:="16/01/2019"
   .Range("B1:M2073").Copy Sheets("appro S3").Range("BC33")
End With

With Sheets("extraction 3")
   .Select
   .Range("$1:$2047").AutoFilter Field:=4, Criteria1:="D4 262", Field:=17, Criteria1:="17/01/2019"
   .Range("B1:M2073").Copy Sheets("appro S3").Range("BC53")
End With

With Sheets("extraction 3")
   .Select
   .Range("$1:$2047").AutoFilter Field:=4, Criteria1:="D4 262", Field:=17, Criteria1:="18/01/2019"
   .Range("B1:M2073").Copy Sheets("appro S3").Range("BC70")
End With

With Sheets("extraction 3")
   .Select
   .Range("$1:$2047").AutoFilter Field:=4, Criteria1:="D4 262", Field:=17, Criteria1:="19/01/2019"
   .Range("B1:M2073").Copy Sheets("appro S3").Range("BC105")
End With
'à mettre à la fin de votre code complet
With Application
    .ScreenUpdating = True
    .Calculation = xlCalculationAutomatic
End With
End Sub
En tout cas merci pour votre réponse, j'espère trouver une solution à mon problème. :)
Avatar du membre
Jean-Eric
Fanatique d'Excel
Fanatique d'Excel
Messages : 14'936
Appréciations reçues : 464
Inscrit le : 27 août 2012
Version d'Excel : O365 32 bits

Message par Jean-Eric » 9 janvier 2019, 14:31

Bonjour,
Merci de nous mettre un fichier à disposition.
Cdlt.
1 membre du forum aime ce message.
Jean-Eric

Je ne réponds pas aux M.P. non sollicités.
C
Captain_coco
Jeune membre
Jeune membre
Messages : 18
Inscrit le : 19 novembre 2018
Version d'Excel : 2010

Message par Captain_coco » 9 janvier 2019, 15:22

1.xlsm
(381.75 Kio) Téléchargé 11 fois
Bonjour Jean Eric,

voilà le fichier avec mon ancienne macro, vous comprendrez mieux ce que je souhaite obtenir, c'est exactement cela que je souhaite mais en plus rapide, ne vous étonnez pas de l'agencement du tableur j'ai du supprimer bon nombre de données car confidentielles...
Pour exécuter la macro feuille "appro S51" et bouton afficher tout (en haut de la feuille). Voilà, si quelqu'un (ou quelque chose lol) arrive à m'accélérer tout sa sa serait formidable!

Merci, en attente de votre réponse :)
Avatar du membre
Dan
Modérateur
Modérateur
Messages : 5'872
Appréciations reçues : 75
Inscrit le : 27 avril 2007
Version d'Excel : 2010, 2000, Mac 2004, 2011

Message par Dan » 9 janvier 2019, 18:54

Re

Dans votre macro 51, à quoi correspond D3 262, D4 262, Etc...
Pourquoi vous allez jusque la ligne 2047 ? Cela peut varier non ?
En A5 de la feuille Appros51, pourquoi vous ne mettez pas la date 17/12/18 en A5. Idem pour les cellules plus bas
1 membre du forum aime ce message.
@+ Dan ;)
Avatar du membre
AMIR
Membre dévoué
Membre dévoué
Messages : 733
Appréciations reçues : 6
Inscrit le : 19 janvier 2015
Version d'Excel : 2007

Message par AMIR » 9 janvier 2019, 20:11

Salut
sur quelle colonne les critères "D3 262" et "28/01/2019" sont inscri
si s agit dune simple assignation des valeur sur autre feuilles, tu peux utiliser autre methode plus rapide a la place de" copier coller "
1 membre du forum aime ce message.
C
Captain_coco
Jeune membre
Jeune membre
Messages : 18
Inscrit le : 19 novembre 2018
Version d'Excel : 2010

Message par Captain_coco » 10 janvier 2019, 09:12

Bonjour à tous,

Merci pour vos réponses.
Pour commencer Dan, D3 262, D4 262, Etc... correspond à des engins, je vais jusqu'à la ligne 2047 car nous faisons une extraction depuis un site web des tâches que nous avons à réaliser sur les différents engins et cela pour chaque semaine donc autant vous dire que la liste des tâches peut être courte ou longue. Enfin, la date n'est pas en A5 car il nous faut une visibilité sur les tâches à faire sur la journée. Par exemple j'extrait les tâches et il faut que l'autre équipe qui va prendre le fichier voit les tâches de la journée à réaliser.

Amir, le critère "D3 262" se trouve colonne 4 et la date colonne 17 de la feuille extraction. Il s'agit d'une assignation des tâches en fonction de date et d'engins. Merci pour votre temps.

Bien cordialement,
Avatar du membre
Dan
Modérateur
Modérateur
Messages : 5'872
Appréciations reçues : 75
Inscrit le : 27 avril 2007
Version d'Excel : 2010, 2000, Mac 2004, 2011

Message par Dan » 10 janvier 2019, 12:48

Re
Enfin, la date n'est pas en A5 car il nous faut une visibilité sur les tâches à faire sur la journée.
Vous n'avez pas compris ma question. La date est mise en A5 au format standard. Pourquoi ne pas mettre au format Date ? Idem pour les autres date en colonne A.

Concernant le D3 262, cela se trouve où sur votre feuille Appro S51 ???, on voit bien D3 mais le 262 ??

Autre question comment vous choisissez de filtrer sur D3 262 ou D3 785 ?
1 membre du forum aime ce message.
@+ Dan ;)
C
Captain_coco
Jeune membre
Jeune membre
Messages : 18
Inscrit le : 19 novembre 2018
Version d'Excel : 2010

Message par Captain_coco » 10 janvier 2019, 13:55

Re-bonjour Dan,

la date n'est pas au format date car toutes les données sont extraites depuis un site en ligne il s'agit donc de données brut, si il est possible de les passer en format date via la macro pourquoi pas et surtout si cela est utile. Concernant D3 262, nous ne traitons que les données liées au "262", une autre entité se charge des autres nombres qui peuvent être présent après si cela peut aider de faire figurer 262 je peux le faire. Il s'agit vraiment de faire figurer les tâches de la journée correspondant à un engin (engin D3 262, engin M1 262...).

Merci pour tes réponses Dan elles sont appréciées :)

Bien cordialement,
Répondre Sujet précédentSujet suivant
  • Sujets similaires
    Réponses
    Vues
    Dernier message