1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95
| Sub Conversion()
n = InputBox("Numéro du fichier à convertir")
Workbooks.Open Filename:="C:\Users\pakz03941\Downloads\ListeDefauts (" & n & ").csv" 'ouverture du fichier csv désiré
'enregistrement au format xslx
ActiveWorkbook.SaveAs Filename:= _
"C:\Users\pakz03941\Downloads\ListeDefauts (" & n & ").xlsx", FileFormat:= _
xlOpenXMLWorkbook, CreateBackup:=False
nb_lignes = WorksheetFunction.CountA(Range("A:A"))
Range("M1").Select
ActiveCell.FormulaR1C1 = "=CONCATENATE(RC[-12],RC[-11],RC[-10])" 'on concatène les données au cas-où elles ne soient pas dans les bonnes colonnes
Range("M1").Copy
Range("M2:M" & nb_lignes).Select 'on copie sur toutes la colonne de données
ActiveSheet.Paste
Columns("M:M").Select 'on copie les valeurs
Selection.Copy
Columns("N:N").Select
Selection.PasteSpecial Paste:=xlPasteAllUsingSourceTheme, Operation:=xlNone _
, SkipBlanks:=False, Transpose:=False
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Columns("A:M").Select
Selection.Delete Shift:=xlToLeft
Columns("A:A").Select 'conversion des données et répartition dans les bonnes colonnes
Selection.TextToColumns Destination:=Range("A1"), DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _
Semicolon:=True, Comma:=True, Space:=False, Other:=False, FieldInfo:= _
Array(Array(1, 1), Array(2, 1), Array(3, 1), Array(4, 1), Array(5, 1), Array(6, 1), Array(7 _
, 1), Array(8, 1), Array(9, 1), Array(10, 1)), TrailingMinusNumbers:=True
Columns("A:A").Select 'sélection de la colonne A
Selection.Insert Shift:=xlToRight 'insère une colonne
Cells(1, 1) = "Date" 'insère "Date" en A1
Dim i As Long
For i = 2 To nb_lignes 'Pour toute la première colonne, on transforme la date de la colonne B en date lisible par Excel
If Len(Cells(i, 2)) <> 19 Then 'si différent de 19 caractères, on tronque à 19 caractères et on copie le résultat en A
Cells(i, 1) = Left(Cells(i, 2), 19)
'Equivalent sur Excel CNUM(GAUCHE([@[Date Apparition]];19))
Else
Cells(i, 1) = Cells(i, 2) 'si c'est le bon nombre de caractères, on n'y touche pas
End If
Next i
Columns("A:A").Select
Selection.NumberFormat = "m/d/yyyy h:mm"
Columns("A:K").EntireColumn.AutoFit 'ajustement de la largeur des colonnes
Columns("B:B").Delete 'suppression de la colonne inutile
'mise en forme de tableau de la base de données
Columns("A:J").Select
ActiveSheet.ListObjects.Add(xlSrcRange, Range("$A$1:$J$" & nb_lignes), , xlYes).Name = _
"Tableau1"
Columns("A:J").Select
ActiveSheet.ListObjects("Tableau1").TableStyle = "TableStyleLight1"
'création du TCD
Range("Tableau1[[#Headers],[Date]]").Select
Sheets.Add
ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _
"Tableau1", Version:=xlPivotTableVersion14).CreatePivotTable _
TableDestination:="Feuil1!R3C1", TableName:="Tableau croisé dynamique1", _
DefaultVersion:=xlPivotTableVersion14
Sheets("Feuil1").Select
Cells(3, 1).Select
'renom de l'onglet TCD
Sheets("Feuil1").Select
Sheets("Feuil1").Name = "TCD"
'groupement des données temps
Range("A4").Select
With ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields("Date")
.Orientation = xlRowField
.Position = 1
End With
Range("A4").Select
Selection.Group Start:=True, End:=True, Periods:=Array(False, True, True, _
True, True, False, True)
ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields("Date"). _
Orientation = xlHidden
End Sub |