Probleme execution macro vba car trop de données
popey003
Messages postés
5
Statut
Membre
-
michel_m Messages postés 18903 Date d'inscription Statut Contributeur Dernière intervention -
michel_m Messages postés 18903 Date d'inscription Statut Contributeur Dernière intervention -
bonjour à tous,
J'ai depuis quelques jours un problème d'exécution de ma macro car il semblerait que mon tableau soit trop grand ... La voici :
Peut-être sauriez-vous m'apporter votre aide s'il vous plait afin qu'elle puisse intégrer un maximum de données (65 000). Car à ce jour, elle tourne de 07h30 à midi sans arrêt et me dit quelque fois qu'elle ne peut continuer....
Je pense que mon langage vba est lourd aussi.
Remerciements par avance!
J'ai depuis quelques jours un problème d'exécution de ma macro car il semblerait que mon tableau soit trop grand ... La voici :
Sub couperdécaler()
Dim c As Single
c = Timer
Application.ScreenUpdating = False
dl = Range("G1").CurrentRegion.End(xlDown).Row
Sheets("Vérif").Select
Range("G1:K1").Select
Selection.Copy
Sheets("Quinté").Select
Range("A1").Select
ActiveSheet.Paste
Application.CutCopyMode = False
Selection.Copy
Range("A2").Select
ActiveSheet.Paste
Application.CutCopyMode = False
Range("A3").Select
Sheets("Vérif").Select
Range("AH1").Select
Range("AC" & Rows.Count).End(xlUp).Select
Range(ActiveCell(1, 1), ActiveCell(1, 4)).Select
Selection.Copy
Range("M1").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Cells(1, 28).Select
' copie de la selection après filtre
Columns("AM:AM").Select
Selection.AutoFilter
ActiveSheet.Range("$L$1:$L$60000").AutoFilter Field:=1, Criteria1:="<>"
Range("G1:K" & dl).Select
Selection.Copy
' trouve la dernière cellule vers le haut et copie
Worksheets("quinté").Select
Range("A1").Select
ActiveSheet.Paste
Worksheets("Vérif").Select
Selection.AutoFilter
'Effacement de la dernière ligne (AC:AG)
Range("AC" & Rows.Count).End(xlUp).Select
Range(ActiveCell(1, 1), ActiveCell(1, 5)).Select
Selection.Delete Shift:=xlUp
Do While Range("AC1") <> ""
' copie de la selection après filtre
Columns("AM:AM").Select
Selection.AutoFilter
ActiveSheet.Range("$L$1:$L$60000").AutoFilter Field:=1, Criteria1:="<>"
Range("G1:K" & dl).Select
Selection.Copy
' trouve la dernière cellule vers le bas écrite et descend d'un vers le bas
Worksheets("quinté").Select
Range("A:A").Select
Selection.End(xlDown).Select
Selection.Offset(1, 0).Select
ActiveSheet.Paste
' Columns("A:E").Select
'ActiveSheet.Range("$A$1:$E$65493").RemoveDuplicates Columns:=Array(1, 2, 3, 4, 5) _
' , Header:=xlNo
Worksheets("Vérif").Select
Selection.AutoFilter
'Effacement de la dernière ligne (AC:AG)
Range("AC" & Rows.Count).End(xlUp).Select
Range(ActiveCell(1, 1), ActiveCell(1, 5)).Select
Selection.Delete Shift:=xlUp
Range("AC" & Rows.Count).End(xlUp).Select
Range(ActiveCell(1, 1), ActiveCell(1, 5)).Select
Selection.Copy
Range("M1").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Loop
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Cells(1, 28).Select
Sheets("Quinté").Select
Range("A1:E2").Select
Selection.Delete Shift:=xlUp
Columns("A:E").Select
ActiveSheet.Range("$A$1:$E$60000").RemoveDuplicates Columns:=Array(1, 2, 3, 4, 5), _
Header:=xlNo
ActiveWorkbook.Worksheets("Quinté").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Quinté").Sort.SortFields.Add Key:=Range("A1:A60000") _
, SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
ActiveWorkbook.Worksheets("Quinté").Sort.SortFields.Add Key:=Range("B1:B60000") _
, SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
ActiveWorkbook.Worksheets("Quinté").Sort.SortFields.Add Key:=Range("C1:C60000") _
, SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
ActiveWorkbook.Worksheets("Quinté").Sort.SortFields.Add Key:=Range("D1:D60000") _
, SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
ActiveWorkbook.Worksheets("Quinté").Sort.SortFields.Add Key:=Range("E1:E60000") _
, SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("Quinté").Sort
.SetRange Range("A1:E60000")
.Header = xlGuess
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
Range("M1").Select
ActiveCell.FormulaR1C1 = "=RC[-12]+RC[-11]"
Range("N1").Select
ActiveCell.FormulaR1C1 = "=RC[-13]+RC[-12]+RC[-11]"
Range("O1").Select
ActiveCell.FormulaR1C1 = "=RC[-14]+RC[-13]+RC[-12]+RC[-11]"
Range("P1").Select
ActiveCell.FormulaR1C1 = "=RC[-15]+RC[-14]+RC[-13]+RC[-12]+RC[-11]"
Range("M1:P1").Select
Selection.AutoFill Destination:=Range("M1:P16"), Type:=xlFillDefault
Range("M1:P16").Select
Selection.AutoFill Destination:=Range("M1:P1379"), Type:=xlFillDefault
Range("M1:P1379").Select
Range("AB1").Select
Application.ScreenUpdating = True
MsgBox Timer - c
End Sub
Peut-être sauriez-vous m'apporter votre aide s'il vous plait afin qu'elle puisse intégrer un maximum de données (65 000). Car à ce jour, elle tourne de 07h30 à midi sans arrêt et me dit quelque fois qu'elle ne peut continuer....
Je pense que mon langage vba est lourd aussi.
Remerciements par avance!
A voir également:
- Probleme execution macro vba car trop de données
- Fuite données maif - Guide
- Telecharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Supprimer les données de navigation - Guide
- Trier des données excel - Guide
- Télécharger macro convertir chiffre en lettre excel - Télécharger - Tableur
2 réponses
Bonjour,
«Je pense que mon langage vba est lourd» Effectivement !!!
Créer des macro à partir de l'enregistreur de macro est une première étape dans l'apprentissage du VBA.
Pour optimiser le code obtenu, il suffit très souvent de lire l'aide VBA associé au code ainsi créé et notamment les exemples correspondants.
Par exemple tu cliques sur un des .copy (pour y placer le curseur) puis tu appuies sur F1, tu obtiens l'aide de la méthode Copy.
En regardant l'exemple fourni, tu va te rendre compte qu'il est parfaitement inutile de sélectionner une cellule ou une plage pour la copier.
Tu peux supprimer la plupart des .select de ton code, ce sera déjà un bon début.
«Je pense que mon langage vba est lourd» Effectivement !!!
Créer des macro à partir de l'enregistreur de macro est une première étape dans l'apprentissage du VBA.
Pour optimiser le code obtenu, il suffit très souvent de lire l'aide VBA associé au code ainsi créé et notamment les exemples correspondants.
Par exemple tu cliques sur un des .copy (pour y placer le curseur) puis tu appuies sur F1, tu obtiens l'aide de la méthode Copy.
En regardant l'exemple fourni, tu va te rendre compte qu'il est parfaitement inutile de sélectionner une cellule ou une plage pour la copier.
Tu peux supprimer la plupart des .select de ton code, ce sera déjà un bon début.
Bonjour
dis plutôt ce que tu veux faire EXACTEMENT et joint un EXTRAIT de ton classeur
pour cela:
Mettre le classeur sans données confidentielles en pièce jointe sur https://www.cjoint.com/
et coller le raccourci proposé (clic droit) dans le message de réponse
Dans l'attente
transféré dans forum VBA
dis plutôt ce que tu veux faire EXACTEMENT et joint un EXTRAIT de ton classeur
pour cela:
Mettre le classeur sans données confidentielles en pièce jointe sur https://www.cjoint.com/
et coller le raccourci proposé (clic droit) dans le message de réponse
Dans l'attente
transféré dans forum VBA
Merci pour ce conseil.
Je viens de lire aussi "0,0625 secondes pour 10000 lignes "
Je pense que même si je retire certains .select je n'arriverai jamais moi tout seul à ce merveilleux résultat...
Dommage !!
Range("E1"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
xlSortNormal