Re : VBA ou autres formules ! Calcul moyenne en fonction de, tant que
Bonjour VDAVID,
Tu as l’air de maitriser le vba et je voulais savoir si tu voyais des améliorations à effectuer afin que mon fichier soit plus rapide.
Mon objectif est de calculer le cout destination/produit en tonne/euros.
A partir d’une extraction SAP, je mets donc en place mon fichier. Je récupère et tri les données, puis je dois répartir les livraisons en fonction des transporteurs.
1er problème : J’avais fait des filtres élaborés en vba mais le code n’est pas stable et j’ai eu beaucoup d’erreur. J’ai donc du appliquer un filtrage simple avec des copier-collers, plus lent…
Puis, je dois calculer le prix de chaque livraison en fonction des grilles tarifaires.
2eme problème : Je lui demande un copier-coller des datas car je ne sais pas coder en vba. La macro me renvois souvent des erreurs car les formats ne sont pas les bons, c’est long mais je ne vois pas d’autres solutions.
Si tu as le temps de m’aider, ça serait vraiment gentil !
Ci-dessous ma macro :
Sub Macro()
Workbooks.Open Filename:="P:\Projet\PROJET CALCULS\export.MHTML"
Windows("export.MHTML").Activate
'Recherche et suppression du mot "Emballage Cable"
Dim i As Integer
For i = [A65000].End(xlUp).Row To 1 Step -1
If Not Cells(i, 42).Find(What:="PAL") Is Nothing Or _
Not Cells(i, 42).Find(What:="tou") Is Nothing Or _
Not Cells(i, 42).Find(What:="SACH") Is Nothing Or _
Not Cells(i, 1).Find(800) Is Nothing Or _
Not Cells(i, 42).Find(What:="Emballage Câble") Is Nothing Then Rows(i).Delete
Next i
'Tri des données par BL
ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Add Key:=Range("A2:A4511" _
), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("Sheet1").Sort
.SetRange Range("A1:CD4511")
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
'Copie des données SAP "export" dans fichier "Projet" - A Mettre dans le même dossier
Range("A:A, E:E, Q:Q, AP:AP, AU:AU, AW:AW, BM:BM, BJ:BJ, BP:BP, CD:CD").Select
Selection.Copy
Windows("Copie de PROJET1.xlsm").Activate
Columns("A:J").Select
ActiveSheet.Paste
Windows("export.MHTML").Activate
ActiveWindow.Close
'Filtre Kuehne Nagel
'Columns("J:J").Select
'Selection.AutoFilter
'ActiveSheet.Range("$J$1:$J$2069").AutoFilter Field:=1, Criteria1:= _
"KUEHNE + NAGEL ROAD"
' Range("A:L").Select
'Selection.Copy
'Sheets("Kuehne Nagel").Select
' Range("A3").Select
'ActiveSheet.Paste
'Filtre Schenker
Sheets("Données").Select
Columns("J:J").Select
Selection.AutoFilter
ActiveSheet.Range("$J$1:$J$2069").AutoFilter Field:=1, Criteria1:= _
"DB SCHENKER"
Range("A:L").Select
Selection.Copy
Sheets("Schenker").Select
Range("A3").Select
ActiveSheet.Paste
'Filtre Ziegler
Sheets("Données").Select
Columns("J:J").Select
Selection.AutoFilter
ActiveSheet.Range("$J$1:$J$2069").AutoFilter Field:=1, Criteria1:= _
"TRANSPORTS ZIEGLER"
Range("A:L").Select
Selection.Copy
Sheets("Ziegler").Select
Range("A3").Select
ActiveSheet.Paste
' Filtre Droin
'Sheets("Données").Select
'Columns("J:J").Select
'Selection.AutoFilter
'ActiveSheet.Range("$J$1:$J$2069").AutoFilter Field:=1, Criteria1:= _
"DROIN"
'Range("A:L").Select
'Selection.Copy
'Sheets("Droin").Select
'Range("A3").Select
'ActiveSheet.Paste
' Filtre LFB
Sheets("Données").Select
Columns("J:J").Select
Selection.AutoFilter
ActiveSheet.Range("$J$1:$J$2069").AutoFilter Field:=1, Criteria1:= _
"LA FLECHE BRESSANE"
Range("A:L").Select
Selection.Copy
Sheets("LFB").Select
Range("A3").Select
ActiveSheet.Paste
'Calculs du cout BL/destination pour LFB
'Ouvrir grille tarifaire LFB - Copier Projet --> grille tarifaire
Sheets("LFB").Select
Range("L:L,H:H").Select
Selection.Copy
Workbooks.Open Filename:="P:\Projet\PROJET CALCULS\Grille tarifaire LFB1.XLS"
Sheets("Poids calcul").Select
Range("A:A").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
'Copier/ coller VALEUR grille tarifaire LFB --> Projet
Sheets("Poids Calcul").Select
Columns("D😀").Select
Selection.Copy
Windows("Copie de Copie de PROJET1.xlsm").Activate
Sheets("LFB").Select
Columns("M:M").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Windows("Grille tarifaire LFB1.XLS").Activate
ActiveWindow.Close
'Calculs du cout BL/destination pour Schenker
Sheets("Schenker").Select
Range("L:L,H:H").Select
Selection.Copy
Workbooks.Open Filename:="P:\Projet\PROJET CALCULS\Grille tarifaire Schenker.xlsx"
Sheets("Poids calcul").Select
Range("A:A").Select
ActiveSheet.Paste
'Copier/ coller VALEUR grille tarifaire Schenker --> Projet
Sheets("Poids Calcul").Select
Columns("E:E").Select
Selection.Copy
Windows("Copie de PROJET1.xlsm").Activate
Sheets("Schenker").Select
Columns("M:M").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Windows("Grille tarifaire Schenker.XLSX").Activate
ActiveWindow.Close
'Calculs du cout BL/destination pour Ziegler
Sheets("Ziegler").Select
Range("H:H,L:L").Select
Selection.Copy
Workbooks.Open Filename:="P:\Projet\PROJET CALCULS\Grille tarifaire ZIEGLER.xlsx"
Sheets("Poids calcul").Select
Range("A:A").Select
ActiveSheet.Paste
'Copier/ coller VALEUR grille tarifaire Ziegler --> Projet
Sheets("Poids Calcul").Select
Columns("E:E").Select
Selection.Copy
Windows("Copie de PROJET1.xlsm").Activate
Sheets("Ziegler").Select
Columns("M:M").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Windows("Grille tarifaire ZIEGLER.XLSX").Activate
ActiveWindow.Close
'Effacement des données dans la feuille données
Windows("Copie de PROJET1.xlsm").Activate
Sheets("Données").Select
[A:J].ClearContent
'Moyenne du poids de chaque câble par BL
Set Ws = Sheets("Schenker")
'Colonne où se trouve les livraisons
ColL = "A"
'Colonne où se trouve les poids totals par BL
ColM = "M"
'Ligne de départ du tableau
LStart = 4
NbMoy = 0
'4 est la ligne de départ du tableau
With Ws
LFin = .Range(ColL & 65536).End(xlUp).Row
tabl = .Range(ColL & LStart & ":" & ColM & LFin).Value
ReDim Preserve tabl(UBound(tabl()), UBound(tabl(), 2) + 1)
For i = LBound(tabl()) To UBound(tabl())
For h = LBound(tabl()) To UBound(tabl())
If tabl(h, LBound(tabl(), 2)) = tabl(i, LBound(tabl(), 2)) Then
tabl(i, UBound(tabl(), 2)) = tabl(i, UBound(tabl(), 2)) + tabl(h, UBound(tabl(), 2) - 1)
NbMoy = NbMoy + 1
End If
Next h
If NbMoy > 0 Then tabl(i, UBound(tabl(), 2)) = tabl(i, UBound(tabl(), 2)) / NbMoy
NbMoy = 0
Next i
.Range(Cells(LStart, .Range(ColL & 1).Column), .Cells(LFin, Range(ColM & 1).Column + 1)).Value = tabl
End With
End Sub