Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

macro trop longue a s'exécuter

  • Initiateur de la discussion Initiateur de la discussion roybaf
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

roybaf

XLDnaute Occasionnel
Bonsoir à tous,

Je cherche à raccourcir une macro qui met plus de 5 min à s'exécuter, en effet j'arrive à ce que je veux mais c'est un peu long.

Voici mon code, une grande partie a été obtenue par l'enregistreur :

Code:
Private Sub Image2_Click()
Application.ScreenUpdating = False
Dim derlin1 As Integer
Dim derlin2 As Integer
Dim derlin3 As Integer
Dim derlin4 As Integer
Dim derlin5 As Integer
Dim derlin6 As Integer
Dim derlin7 As Integer
Dim derlin8 As Integer
Dim derlin9 As Integer
Dim derlin10 As Integer
derlin1 = Sheets("rentabilité").Range("A" & Rows.Count).End(xlUp).Row + 1
    Sheets("rentabilité").Range("A" & derlin1) = Date
derlin2 = Sheets("indice-marché").Range("A" & Rows.Count).End(xlUp).Row + 1
    Sheets("indice-marché").Range("A" & derlin2) = Date
derlin3 = Sheets("variance").Range("A" & Rows.Count).End(xlUp).Row + 1
    Sheets("variance").Range("A" & derlin3) = Date
derlin4 = Sheets("variance_marché").Range("A" & Rows.Count).End(xlUp).Row + 1
    Sheets("variance_marché").Range("A" & derlin4) = Date
derlin5 = Sheets("covariance").Range("A" & Rows.Count).End(xlUp).Row + 1
    Sheets("covariance").Range("A" & derlin5) = Date
derlin6 = Sheets("rentabilité_marché").Range("A" & Rows.Count).End(xlUp).Row + 1
    Sheets("rentabilité_marché").Range("A" & derlin6) = Date
derlin7 = Sheets("graphique").Range("f" & Rows.Count).End(xlUp).Row + 1
    Sheets("graphique").Range("f" & derlin7) = Date
derlin9 = Sheets("tendance").Range("a" & Rows.Count).End(xlUp).Row + 1
    Sheets("tendance").Range("a" & derlin9) = Date
derlin10 = Sheets("ecarttendance").Range("a" & Rows.Count).End(xlUp).Row + 1
    Sheets("ecarttendance").Range("a" & derlin10) = Date
Dim tablo As Variant
Dim n As Integer
Dim c As Range
Dim derlin As Integer
tablo = Sheets("Cours").Range("B3:I" & Sheets("Cours").Range("B" & Rows.Count).End(xlUp).Row)
derlin = Sheets("historique_cours").Range("A" & Rows.Count).End(xlUp).Row + 1
For n = LBound(tablo, 1) To UBound(tablo, 1)
  Set c = Sheets("historique_cours").Rows(1).Find(tablo(n, LBound(tablo, 2)), LookIn:=xlValues, LookAt:=xlWhole)
  If Not c Is Nothing Then
    Sheets("historique_cours").Range("A" & derlin) = Date
    Sheets("historique_cours").Cells(derlin, c.Column) = tablo(n, LBound(tablo, 2) + 1)
  End If
Next
Application.ScreenUpdating = False
Sheets("indice-marché").Activate
With ActiveSheet.QueryTables.Add(Connection:= _
        "URL;http://www.boursorama.com/cours.phtml?symbole=2zPMS190", Destination:= _
        Range("$E$5"))
        .Name = "indiceweb"
        .FieldNames = True
        .RowNumbers = False
        .FillAdjacentFormulas = False
        .PreserveFormatting = True
        .RefreshOnFileOpen = False
        .BackgroundQuery = True
        .RefreshStyle = xlOverwriteCells
        .SavePassword = False
        .SaveData = True
        .AdjustColumnWidth = True
        .RefreshPeriod = 0
        .WebSelectionType = xlSpecifiedTables
        .WebFormatting = xlWebFormattingNone
        .WebTables = "6"
        .WebPreFormattedTextToColumns = True
        .WebConsecutiveDelimitersAsOne = True
        .WebSingleBlockTextImport = False
        .WebDisableDateRecognition = False
        .WebDisableRedirections = False
        .Refresh BackgroundQuery:=False
    End With
    ActiveCell.Replace What:="Pts", Replacement:="", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
    Cells.Replace What:="Pts", Replacement:="", LookAt:=xlPart, SearchOrder _
        :=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False
Application.ScreenUpdating = False
Sheets("indice-marché").Select
Dim casefin As Range
Range("F5").Select
Cells.Replace What:="(c)", Replacement:="", LookAt:=xlPart, SearchOrder _
        :=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False
    Range("F5").Select
    ActiveCell.Replace What:=".", Replacement:=",", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
    Cells.Find(What:=".", After:=ActiveCell, LookIn:=xlFormulas, LookAt:= _
        xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False _
        , SearchFormat:=False).Activate
    Range("D1:H3").Select
Set casefin = Worksheets("indice-marché").Range("b3").End(xlDown)
casefin.Offset(1, 0).Value = CDbl(Worksheets("indice-marché").Range("f5").Value)
Cells.Replace What:=" ", Replacement:="", LookAt:=xlPart, SearchOrder:= _
    xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False
Sheets("menu").Select
Jouer_miseàjourseffectué
Randomize
Unload actualisation
End Sub


Dim derlin1 As Integer
Dim derlin2 As Integer
Dim derlin3 As Integer
Dim derlin4 As Integer
Dim derlin5 As Integer
Dim derlin6 As Integer
Dim derlin7 As Integer
Dim derlin8 As Integer
Dim derlin9 As Integer
Dim derlin10 As Integer
derlin1 = Sheets("rentabilité").Range("A" & Rows.Count).End(xlUp).Row + 1
Sheets("rentabilité").Range("A" & derlin1) = Date
derlin2 = Sheets("indice-marché").Range("A" & Rows.Count).End(xlUp).Row + 1
Sheets("indice-marché").Range("A" & derlin2) = Date
derlin3 = Sheets("variance").Range("A" & Rows.Count).End(xlUp).Row + 1
Sheets("variance").Range("A" & derlin3) = Date
derlin4 = Sheets("variance_marché").Range("A" & Rows.Count).End(xlUp).Row + 1
Sheets("variance_marché").Range("A" & derlin4) = Date
derlin5 = Sheets("covariance").Range("A" & Rows.Count).End(xlUp).Row + 1
Sheets("covariance").Range("A" & derlin5) = Date
derlin6 = Sheets("rentabilité_marché").Range("A" & Rows.Count).End(xlUp).Row + 1
Sheets("rentabilité_marché").Range("A" & derlin6) = Date
derlin7 = Sheets("graphique").Range("f" & Rows.Count).End(xlUp).Row + 1
Sheets("graphique").Range("f" & derlin7) = Date
derlin9 = Sheets("tendance").Range("a" & Rows.Count).End(xlUp).Row + 1
Sheets("tendance").Range("a" & derlin9) = Date
derlin10 = Sheets("ecarttendance").Range("a" & Rows.Count).End(xlUp).Row + 1
Sheets("ecarttendance").Range("a" & derlin10) = Date


à mon avis la partie en rouge peut être optimisée mais quand j'essaie sa me plante, à l'aide!!

Bonsoir à tous.
 
Dernière édition:
Re : macro trop longue a s'exécuter

Bonsoir.
Effectivement, au lieu de
derlin1 = Sheets("rentabilité").Range("A" & Rows.Count).End(xlUp).Row + 1
Sheets("rentabilité").Range("A" & derlin1) = Date
vous pouvez faire:
VB:
Worksheets("rentabilité").Range("A" & Rows.Count).End(xlUp).Offset(1).Value = Date
Vous gagneriez encore un peu de temps en utilisant les CodeName des feuilles
Sheets(quelque chose) était le pire: en plus de nécessiter une recherche du nom dans la collection, c'est une collection d'objets banalisés pouvant contenir aussi bien des objets Chart que Worksheet, d'où liaison tardive à la méthode Range de l'objet Worksheet.
Et vous le faisiez chaque fois 2 fois.
Cordialement
 
Dernière édition:
Re : macro trop longue a s'exécuter

Bonsoir,

Vous avez également deux fois : Application.ScreenUpdating = False

Mais vous ne remettez pas cette ligne : Application.ScreenUpdating = True

Je ne connais pas trop l'incidence, mais peut-être que quelqu'un de plus calé pourra nous éclairer.

Cordialement,
 
Re : macro trop longue a s'exécuter

Salut à tous,

Effectivement, Application.ScreenUpdating doit s'utiliser de cette manière :

Code:
Application.ScreenUpdating = False

'instructions diverses concernant les mouvements visuels dans le classeur

Application.ScreenUpdating = True

Certains ont tendance à dire que ça ne concerne que les cellules. C'est à confirmer de ce côté car, pour moi, dès l'instant où l'on change de feuille, qu'on agit dans des shapes ou des graphiques, on doit aussi l'appliquer.
 
Dernière édition:
Re : macro trop longue a s'exécuter

Bonsoir dranreb,

J'ai essayé

Code:
Private Sub Image2_Click()
Application.ScreenUpdating = False
Worksheets(Feuil6).Range("A" & Rows.Count).End(xlUp).Offset(1).Value = Date
Worksheets(Feuil16).Range("A" & Rows.Count).End(xlUp).Offset(1).Value = Date
Worksheets(Feuil9).Range("A" & Rows.Count).End(xlUp).Offset(1).Value = Date
Worksheets(Feuil10).Range("A" & Rows.Count).End(xlUp).Offset(1).Value = Date
Worksheets(Feuil11).Range("A" & Rows.Count).End(xlUp).Offset(1).Value = Date
Worksheets(Feuil8).Range("A" & Rows.Count).End(xlUp).Offset(1).Value = Date
Worksheets(Feuil14).Range("f" & Rows.Count).End(xlUp).Offset(1).Value = Date
Worksheets(Feuil19).Range("a" & Rows.Count).End(xlUp).Offset(1).Value = Date
Worksheets(Feuil20).Range("a" & Rows.Count).End(xlUp).Offset(1).Value = Date

mais j'ai le bug sur la première ligne...

une piste?
 
Re : macro trop longue a s'exécuter

Si feui6 etc. sont les CodeName des feuilles il ne faut plus spécifier Worksheets(Feuil6): Feuil6 tout seul suffit en tant qu'expression Worksheet. Ce sont en somme des noms de constantes de type Worksheet connues dans le projet VBA. Et qui ne nécessitent donc plus de recherche dans la collection Worksheets: l'accès à l'objet est direct. C'est: Feuil6.Range(etc.
Cordialement.
 
Dernière édition:
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
1
Affichages
180
Réponses
4
Affichages
461
  • Question Question
Microsoft 365 worksheet_change
Réponses
29
Affichages
479
Réponses
4
Affichages
177
Réponses
3
Affichages
193
Réponses
10
Affichages
547
Réponses
5
Affichages
182
Réponses
8
Affichages
493
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…