bambi
XLDnaute Occasionnel
Bonjour à tous
J'ai créé une macro qui nettoie les données d'un fichier .csv puis les colle dans un fichier xlsm sur une page précise
Je me suis aidé de l'enregistreur de Macro mais aussi de recherches sur ce forum et sur le web en général
J'ai essayé de supprimer tout ce qui me semblait inutilement créé par l'enregistreur
Le résultat fonctionne parfaitement
Mais je me demande s'il est possible de simplifier certaines lignes ou des les écrire plus "proprement"
Aussi je vous soumet mon code pour avoir vos suggestions
Merci d'avance
NB: Cette demande a uniquement pour but d'apprendre à coder plus "proprement" en VBA en bénéficiant de votre expérience.
J'ai créé une macro qui nettoie les données d'un fichier .csv puis les colle dans un fichier xlsm sur une page précise
Je me suis aidé de l'enregistreur de Macro mais aussi de recherches sur ce forum et sur le web en général
J'ai essayé de supprimer tout ce qui me semblait inutilement créé par l'enregistreur
Le résultat fonctionne parfaitement
Mais je me demande s'il est possible de simplifier certaines lignes ou des les écrire plus "proprement"
Aussi je vous soumet mon code pour avoir vos suggestions
Merci d'avance
VB:
Sub Report()
Application.ScreenUpdating = False
Application.DisplayStatusBar = False
'Supprimer les 7 premières lignes vides
Rows("1:7").Delete
'Convertir les données en colonnes distinctes
Columns("A:A").TextToColumns Destination:=Range("A1"), DataType:=xlDelimited, Comma:=True
'Supprimer les colonnes inutiles
Columns("C:C").Delete
Columns("E:E").Delete
Columns("I:I").Delete
Columns("J:Q").Delete
'Insertion colonne vide en A
Columns("A:A").Select
Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
'Remplace les . par une ,
Range("A1:J100").Replace What:=".", Replacement:=","
'Formule en dernière colonne pour calculer
Range("K2").Select
ActiveCell.FormulaR1C1 = _
"=IF(RC[-5]<>"""",IF(RC[-5]=""BUY"",RC[-4],RC[-4]*-1),"""")"
Range("K2").Select
Selection.AutoFill Destination:=Range("K2:K100"), Type:=xlFillDefault
'Copier et formater date en colonne 1
Columns("C:C").Copy
Range("A1").Select
ActiveSheet.Paste
Selection.NumberFormat = "mm/dd"
'Formatage colonnes date en heure
Columns("C:D").Select
Selection.NumberFormat = "hh:mm"
'Récupération heure et ajout +1 heure pour heure française
Range("L2").Select
ActiveCell.FormulaR1C1 = "=IF(RC[-9]<>"""",""01:00"","""")"
Range("L2").AutoFill Destination:=Range("L2:L50"), Type:=xlFillDefault
Range("M2").Select
ActiveCell.FormulaR1C1 = "=IF(RC[-10]<>"""",RC[-10]+RC[-1],"""")"
Range("M2").AutoFill Destination:=Range("M2:M50"), Type:=xlFillDefault
Range("N2").Select
ActiveCell.FormulaR1C1 = "=IF(RC[-10]<>"""",RC[-10]+RC[-2],"""")"
Range("N2").AutoFill Destination:=Range("N2:N50"), Type:=xlFillDefault
Columns("M:N").NumberFormat = "h:mm;@"
'Copie horaires modifiés colonne M et N dans colonnes C et D
Range("M2:N50").Copy
Range("C2").PasteSpecial Paste:=xlPasteValuesAndNumberFormats
'Copie Size dans colonne H
Range("K2:K50").Copy
Range("G2").PasteSpecial Paste:=xlPasteValuesAndNumberFormats
' Colonne marché en 3ème colonnne
Columns("E:E").Copy
Columns("C:C").Insert Shift:=xlToRight
'Suppression Colonnes Inutiles
Columns("L:O").Delete
Columns("F:G").Delete
'Remise dans l'ordre et suppression des colonnes inutiles
Columns("F:F").Copy
Columns("D:D").Insert Shift:=xlToRight
Columns("F:F").Copy
Columns("E:E").Insert Shift:=xlToRight
Columns("I:I").Copy
Columns("F:F").Insert Shift:=xlToRight
Columns("K:K").Copy
Columns("H:H").Insert Shift:=xlToRight
Columns("I:L").Delete
Rows("1:1").Delete
'Mise en forme
Range("A1:I50").HorizontalAlignment = xlCenter
Range("A1:I50").VerticalAlignment = xlCenter
Columns("A:I").EntireColumn.AutoFit
Range("A1:I50").Select
With Selection.Font
.Name = "Calibri"
.Size = 8
End With
'Converti les données de la colonne I afin que les calculs dans la feuille de report fonctionnent après le copier-coller
Columns("I:I").Select
Application.CutCopyMode = False
Selection.TextToColumns Destination:=Range("I1"), DataType:=xlFixedWidth, _
FieldInfo:=Array(0, 1), TrailingMinusNumbers:=True
'Copie dans le presse papier l'ensemble des données nettoyées
Range("A1").CurrentRegion.Copy
'Ouvre le fichier TDB et colle le résultat à partir de la première case vide colonne B, feuille CDT
Workbooks.Open Filename:="D:\MDT\Racine\TDB.xlsm"
Sheets("CDT").Select
Range("B" & Range("B65536").End(xlUp).Row + 1).Select
ActiveSheet.Paste
Range("A1").Select
Application.ScreenUpdating = True
Application.DisplayStatusBar = True
End Sub
NB: Cette demande a uniquement pour but d'apprendre à coder plus "proprement" en VBA en bénéficiant de votre expérience.
Dernière édition: