Probleme execution macro vba car trop de données
popey003
Messages postés
5
Date d'inscription
Statut
Membre
Dernière intervention
-
michel_m Messages postés 16602 Date d'inscription Statut Contributeur Dernière intervention -
michel_m Messages postés 16602 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
- Jitbit macro recorder - Télécharger - Confidentialité
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