vitesse d'execution de la Macro

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 !

Bricoltou

XLDnaute Occasionnel
Bonsoir le Fil

Avec l'aide du Forum et PierreJean 🙂 j'ai construit cette macro en fichier joint .
Sur le mois le nombre de personne absente dans le tableau est important et cela ralenti la macro fortement et le PC n'est plus utilisable .

Existe t-il une solution différente ?

Merci d'avance pour votre aide

@+

Bricoltou
 

Pièces jointes

Re : vitesse d'execution de la Macro

Re...
Bonjour le Fil , Roger

Roger merci pour ta réponse le fichier fonctionne chez moi

Si quelqu'un d'autre a une idée , cela facilitera mon travail en fin de mois

@+

Bricoltou
J'ai fait deux essais d'ouverture cette nuit sans succès.
J'ai éteint la machine et fait dormir le bonhomme.
Je viens d'ouvrir votre classeur sans problème.
Pourquoi ? Je ne sais pas... ...et je vais corriger mon précédent message.​
ROGER2327
#2195
 
Re : vitesse d'execution de la Macro

Suite...
Commencer la procédure par
Code:
[COLOR="DarkSlateGray"][B]Private Sub Worksheet_Activate()
With Application
   .ScreenUpdating = False
   .Calculation = xlCalculationManual
End With
[COLOR="SeaGreen"]'Code[/COLOR][/B][/COLOR]
et la terminer par
Code:
[COLOR="DarkSlateGray"][B][COLOR="SeaGreen"]'Code[/COLOR]
With Application
   .Calculation = xlCalculationAutomatic
   .ScreenUpdating = True
End With
End Sub[/B][/COLOR]
devrait améliorer les choses.​
ROGER2327
#2196
 
Re : vitesse d'execution de la Macro

Bonjour à tous,

Peux-tu essayer avec :
Code:
Private Sub Worksheet_Activate()
ActiveSheet.Range("A9:AF65536").ClearContents
ActiveSheet.Range("A9:AF65536").Interior.ColorIndex = xlNone
[B][COLOR=Blue]Application.Calculation = xlCalculationManual
Application.ScreenUpdating = 0[/COLOR][/B]
Dim ligne As Integer
Dim n As Integer
Dim m As Integer
Dim coll As Collection
Set coll = New Collection
For n = 2 To Sheets("BD_Absence").Range("A65536").End(xlUp).Row
  On Error Resume Next
    coll.Add Trim(Sheets("BD_Absence").Range("A" & n)), CStr(Trim(Sheets("BD_Absence").Range("A" & n)))
  On Error GoTo 0
Next n
For n = 1 To coll.Count
  ActiveSheet.Range("A" & n + 8) = coll(n)
Next n
tablo = Sheets("BD_Absence").Range("A2:E" & Sheets("BD_Absence").Range("A65536").End(xlUp).Row)
For n = LBound(tablo, 1) To UBound(tablo, 1)
Set c = ActiveSheet.Columns(1).Find(Trim(tablo(n, 1)), LookIn:=xlValues, lookat:=xlWhole)
ligne = c.Row
Set d = Sheets("BD_Absence").Range("L2:L" & Sheets("BD_Absence").Range("L65536").End(xlUp).Row).Find(tablo(n, 5), LookIn:=xlValues, lookat:=xlWhole)
For m = 2 To 32
  If ActiveSheet.Cells(6, m) >= Day(tablo(n, 3)) And ActiveSheet.Cells(6, m) <= Day(tablo(n, 4)) Then
    ActiveSheet.Cells(ligne, m) = 1
    If Not d Is Nothing Then
      ActiveSheet.Cells(ligne, m).Interior.ColorIndex = d.Interior.ColorIndex
      ActiveSheet.Cells(ligne, m).Font.Size = 12
      ActiveSheet.Cells(ligne, m).Font.Bold = True
      ActiveSheet.Cells(ligne, m).HorizontalAlignment = xlCenter
    End If
  End If
Next m
Next n
[B][COLOR=Blue]Application.Calculation = xlCalculationAutomatic[/COLOR][/B]
End Sub
Passage en Calcul sur Ordre et Pas de rafraichissement de l'écran
Exécution du code
Passage en Calcul Automatique

A+ à tous

Edition Oups, je n'avais pas rafraichi... Salut Roger
 
Re : vitesse d'execution de la Macro

BonjourBricoltou, salut Roger,

Pas trop le temps d'étudier le problème mais 2 choses.

Set coll = New Collection

peut être supprimé si dans la déclaration on écrit Dim coll As New Collection

Ensuite Trim n'était pas reconnu chez moi, un comble, j'ai dû décocher la référence Ref Edit Control indiquée MANQUANTE...

Edit : salut Jean-Claude

A+
 
Dernière édition:
Re : vitesse d'execution de la Macro

Bonjour

J'ai trouvé sur la toile l'info suivante :
L' utilisation de "with" permet d'accélérer le traitement.

With ActiveSheet.Cells(ligne, m)

...................................

end with

A tester
JP
 
Re : vitesse d'execution de la Macro

Bonjour,
(puisque c'est fait)
Un exemple de macro modifiée pour essayer d’en augmenter la rapidité :

Code:
Private Sub Worksheet_Activate()
  Dim ligne As Integer, DerLi1 As Integer, DerLi2 As Integer
  Dim n As Integer
  Dim m As Integer
  Dim coll As Collection
  
  DerLi1 = Cells.SpecialCells(xlCellTypeLastCell).Row
  Application.ScreenUpdating = False
  Application.Calculation = xlCalculationManual
  Range("A9:AF" & DerLi1).ClearContents
  Range("A9:AF" & DerLi1).Interior.ColorIndex = xlNone
  Set coll = New Collection
  With Sheets("BD_Absence")
    DerLi2 = .Cells.SpecialCells(xlCellTypeLastCell).Row
    For n = 2 To DerLi2
      On Error Resume Next
      coll.Add [B]L[/B]Trim(.Range("A" & n)), CStr(LTrim(.Range("A" & n)))
      On Error GoTo 0
    Next n
    For n = 1 To coll.Count
      Range("A" & n + 8) = coll(n)
    Next n
    tablo = .Range("A2:E" & DerLi2)
    For n = 1 To UBound(tablo, 1)
      Set c = Columns(1).Find([B]L[/B]Trim(tablo(n, 1)), LookIn:=xlValues, lookat:=xlWhole)
      ligne = c.Row
      Set d = .Range("L2:L" & DerLi2).Find(tablo(n, 5), LookIn:=xlValues, lookat:=xlWhole)
      For m = 2 To 32
        If Cells(6, m) >= Day(tablo(n, 3)) And Cells(6, m) <= Day(tablo(n, 4)) Then
          Cells(ligne, m) = 1
          If Not d Is Nothing Then
            Cells(ligne, m).Interior.ColorIndex = d.Interior.ColorIndex
          End If
        End If
      Next m
    Next n
  End With
  Application.Calculation = xlCalculationAutomatic
  Application.ScreenUpdating = True
End Sub
Remarques
Pour Job : même problème mais résolu avec LTrim.
Pourquoi le format des cellules ne pourrait-il être mis en place dans la feuille ?
La macro proposée réécrit tout donc dure (un temps certain, surtout si le nombre de personnes croît comme celui des intervenants).
On pourrait se contenter de n’écrire que la nouvelle saisie en dernière position. Il faudrait alors penser à une macro de modification. Là, « diviser pour mieux régler » peut être intéressant; mais ceci est une autre histoire.
 
- 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
3
Affichages
440
Retour