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
Bonjour à tous,

Je vous remercie de votre aide
Je vaudrais accélérer ma macro car elle est très longue à exécuter comment puis-je faire s.v.p.

De plus je voudrais que ma colonne Q soit en monétaire pour que je puisse additionner les chiffres pour l'instant je ne peux pas le faire. Dans mon code c'est à partir de 'mode monétaire jusqu'à tableau 'croisé dynamique. J'ai essayé de convertir dans ma macro mais elle ne le garde pas. Alors dans mon TCD je n'ai pas de chiffre juste des Zéro.

Je vous remercie sincèrement de votre aide.



Sub _FOURN_17_18()
'
' Fournisseurs 17-18
'
'
' TEST FOURN macro
'

'
Sheets("Feuil1").Select
Sheets("Feuil1").Copy Before:=Sheets(1)
Rows("1:17").Select
Selection.Delete Shift:=xlUp
range("A2").Select
range(Selection, Selection.End(xlDown)).Select
Selection.FormulaArray = "252016"
ActiveWindow.SmallScroll Down:=-9

'suite
Columns("W:W").Select
Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
range("W1").Select
ActiveCell.FormulaR1C1 = "NOME"
range("W2").Select
ActiveCell.FormulaR1C1 = _
"=VLOOKUP(RC[-1],'Matrice NOME CAP'!C[-22]:C[-21],2,TRUE)"
range("W2").Select
Dim Dernligne As Long
Dernligne = range("A" & Rows.Count).End(xlUp).Row
range("W2").AutoFill Destination:=range("W2:W" & Dernligne)
Columns("Y:Y").Select
Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
range("Y1").Select
ActiveCell.FormulaR1C1 = "Catégorie"
range("Y2").Select
ActiveCell.FormulaR1C1 = _
"=VLOOKUP(RC[-1],'Matrice catégorie '!C[-24]:C[-22],3,TRUE)"
range("Y2").Select
Selection.AutoFill Destination:=range("Y2:Y" & Dernligne)

' mode monétaire

Columns("Q:Q").Select
Selection.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").Select
Selection.NumberFormat = "#,##0.00 $"
range("Q2").Select

' 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
Cells(3, 1).Select
range("C10").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
ActiveWindow.SmallScroll Down:=-12
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)
ActiveWindow.ScrollColumn = 2
ActiveWindow.ScrollColumn = 3
ActiveWindow.ScrollColumn = 4
ActiveWindow.ScrollColumn = 3
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
Columns("D:Q").Select
range("D12").Select
ActiveWindow.ScrollColumn = 2
ActiveWindow.ScrollColumn = 1
range("A5").Select
ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields( _
"Indicateur nom ").PivotItems("Non").ShowDetail = False
ActiveWindow.ScrollColumn = 2
ActiveWindow.ScrollColumn = 3
ActiveWindow.ScrollColumn = 4
ActiveWindow.ScrollColumn = 5
ActiveWindow.ScrollColumn = 4
ActiveWindow.ScrollColumn = 3
ActiveWindow.ScrollColumn = 2
ActiveWindow.ScrollColumn = 1
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").Select
Sheets("Feuil4").Name = "TCD Fourn MOD"
Sheets("FNDWRR (2)").Select
Sheets("FNDWRR (2)").Name = "Fourn MOD"
Sheets("FNDWRR").Select
Sheets("FNDWRR").Name = "Fourn"
End Sub





Aucune question n'est ridicule. C'est comme cela qu'on apprend!
A voir également:

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
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 :
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

0
Marie Chant Messages postés 106 Date d'inscription lundi 24 mars 2014 Statut Membre Dernière intervention 12 juillet 2024 5
18 mai 2017 à 15:31
Bonjour Thau Theme,

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
0
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
Re,

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...
0
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

Bonjour,

merci beaucoup

Bonne fin journée

0