Comment accélérer l'exécution de ma macro et convertir colonne
Résolu/Fermé
Marie Chant
Messages postés
106
Date d'inscription
lundi 24 mars 2014
Statut
Membre
Dernière intervention
12 juillet 2024
-
Modifié le 17 mai 2017 à 21:14
Marie Chant Messages postés 106 Date d'inscription lundi 24 mars 2014 Statut Membre Dernière intervention 12 juillet 2024 - 11 juil. 2024 à 21:38
Marie Chant Messages postés 106 Date d'inscription lundi 24 mars 2014 Statut Membre Dernière intervention 12 juillet 2024 - 11 juil. 2024 à 21:38
A voir également:
- Comment accélérer l'exécution de ma macro et convertir colonne
- Accelerer windows 10 - Guide
- Telecharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Déplacer une colonne excel - Guide
- Formule somme excel colonne - Guide
- Trier colonne excel - Guide
2 réponses
ThauTheme
Messages postés
1442
Date d'inscription
mardi 21 octobre 2014
Statut
Membre
Dernière intervention
29 juillet 2022
160
18 mai 2017 à 09:04
18 mai 2017 à 09:04
Bonjour Marie Chant, bonjour le forum,
l'Enregistreur de macro est un excellent outil mais il a quelques défauts. Il enregistre tout et par conséquent pas mal de lignes inutiles comme les mouvements tel ActiveWindow.ScrollColumn = 1... Ensuite, il y a la règle d'or ! Éviter autant que tu le peux les Select inutiles qui ne font que ralentir l'exécution du code et sont source de plantage. Puis, pour éviter de perdre du temps en affichage et calcul, rajouter les lignes en début de code :
et ne surtout pas oublier de rétablir en fin de code :
Ça donne en gros ça (j'ai fait vite il y a peut-être des erreurs...) :
l'Enregistreur de macro est un excellent outil mais il a quelques défauts. Il enregistre tout et par conséquent pas mal de lignes inutiles comme les mouvements tel ActiveWindow.ScrollColumn = 1... Ensuite, il y a la règle d'or ! Éviter autant que tu le peux les Select inutiles qui ne font que ralentir l'exécution du code et sont source de plantage. Puis, pour éviter de perdre du temps en affichage et calcul, rajouter les lignes en début de code :
Application.ScreenUpdating = False Application.Calculation = xlCalculationManual
et ne surtout pas oublier de rétablir en fin de code :
Application.ScreenUpdating = True Application.Calculation = xlCalculationAutomatic
Ça donne en gros ça (j'ai fait vite il y a peut-être des erreurs...) :
Sub Macro1() Dim Dernligne As Long Application.ScreenUpdating = False Application.Calculation = xlCalculationManual Sheets("Feuil1").Copy Before:=Sheets(1) Rows("1:17").Delete Shift:=xlUp Range(Range("A2:A" & Range("A2").End(xlDown))).FormulaArray = "252016" 'suite Columns("W:W").Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove Range("W1").Value = "NOME" Range("W2").FormulaR1C1 = _ "=VLOOKUP(RC[-1],'Matrice NOME CAP'!C[-22]:C[-21],2,TRUE)" Dernligne = Range("A" & Rows.Count).End(xlUp).Row Range("W2").AutoFill Destination:=Range("W2:W" & Dernligne) Columns("Y:Y").Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove Range("Y1").Value = "Catégorie" Range("Y2").FormulaR1C1 = _ "=VLOOKUP(RC[-1],'Matrice catégorie '!C[-24]:C[-22],3,TRUE)" Range("Y2").AutoFill Destination:=Range("Y2:Y" & Dernligne) ' mode monétaire Columns("Q:Q").TextToColumns Destination:=Range("Q1"), DataType:=xlDelimited, _ TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, _ Semicolon:=False, Comma:=False, Space:=False, Other:=False, FieldInfo _ :=Array(1, 1), DecimalSeparator:=".", ThousandsSeparator:=",", _ TrailingMinusNumbers:=False Columns("Q:Q").NumberFormat = "#,##0.00 $" ' tableau croise dynamique Sheets.Add ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _ "FNDWRR (2)!R1C1:R1048576C31", Version:=xlPivotTableVersion14). _ CreatePivotTable TableDestination:="Feuil4!R3C1", TableName:= _ "Tableau croisé dynamique1", DefaultVersion:=xlPivotTableVersion14 Sheets("Feuil4").Select With ActiveSheet.PivotTables("Tableau croisé dynamique1") .InGridDropZones = True .RowAxisLayout xlTabularRow End With With ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields( _ "Indicateur entité apparentée ") .Orientation = xlRowField .Position = 1 End With With ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields( _ "Code entité apparentée ") .Orientation = xlRowField .Position = 2 End With With ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields( _ "Nom du fournisseur") .Orientation = xlRowField .Position = 3 End With ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields( _ "Code entité apparentée ").Subtotals = Array(False, False, False, False, False, _ False, False, False, False, False, False, False) ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields( _ "Nom du fournisseur").Subtotals = Array(False, False, False, False, False, False, _ False, False, False, False, False, False) With ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields( _ "Catégorie") .Orientation = xlColumnField .Position = 1 End With ActiveSheet.PivotTables("Tableau croisé dynamique1").AddDataField ActiveSheet. _ PivotTables("Tableau croisé dynamique1").PivotFields("Solde payable"), _ "Nombre de Solde payable", xlCount With ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields( _ "Nombre de Solde payable") .Caption = "Somme de Solde payable" .Function = xlSum End With ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields( _ "Indicateur nom ").PivotItems("Non").ShowDetail = False ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields( _ "Indicateur renom ").Subtotals = Array(False, False, False, False, _ False, False, False, False, False, False, False, False) Columns("B:B").ColumnWidth = 16 ' FINBV Macro ' Sheets("Feuil4").Name = "TCD Fourn MOD" Sheets("FNDWRR (2)").Name = "Fourn MOD" Sheets("FNDWRR").Name = "Fourn" Application.ScreenUpdating = True Application.Calculation = xlCalculationAutomatic End Sub
ThauTheme
Messages postés
1442
Date d'inscription
mardi 21 octobre 2014
Statut
Membre
Dernière intervention
29 juillet 2022
160
18 mai 2017 à 15:41
18 mai 2017 à 15:41
Re,
Désolé il y a un Range en trop et il manque le .Row à la fin !... C'est :
Comme je ne connaissais pas le mot clé FormuaArray, je viens de regarder et je pense que :
serait plus approprié qu'une formule matricielle...
Pour ce qui est de la conversion, je ne peux pas t'aider sans voir le fichier car tout dépends comment son les données su départ...
Désolé il y a un Range en trop et il manque le .Row à la fin !... C'est :
Range("A2:A" & Range("A2").End(xlDown).Row).FormulaArray = "252016"
Comme je ne connaissais pas le mot clé FormuaArray, je viens de regarder et je pense que :
Range("A2:A" & Range("A2").End(xlDown).Row).Value = "252016"
serait plus approprié qu'une formule matricielle...
Pour ce qui est de la conversion, je ne peux pas t'aider sans voir le fichier car tout dépends comment son les données su départ...
Marie Chant
Messages postés
106
Date d'inscription
lundi 24 mars 2014
Statut
Membre
Dernière intervention
12 juillet 2024
5
11 juil. 2024 à 21:38
11 juil. 2024 à 21:38
Bonjour,
merci beaucoup
Bonne fin journée
18 mai 2017 à 15:31
je n'arrive pas a faire fonctionner la macro correctement j,ai fait quelques changement car quand elle arrivait a la ligne de code
Range(Range("A2:A" & Range("A2").End(xlDown))).FormulaArray = "252016"
elle me mettait en erreur.
Pour la conversion de la colonne Q, elle ne garde pas la conversion ?? toujours pas de chiffre dans mon tableau croisé dynamique a moins que j'aille sur la feuille convertir manuellement la colonne à partir de Q2 et actualiser mon TCD. je ne sais pas pourquoi elle ne garde pas la conversion avant.
De plus elle est encore longue a exécuter. Pourrais-tu m'aider encore s.v.p.
Comme tu vois je ne suis pas très habitué avec les macros.
Merci beaucoup de ton aide