Bonjour,
Etant débutant dans le codage en VBA et n'ayant pas trouvé d'aide dans les forums existants je me permets de vous solliciter.
J'aimerais automatiser une procédure lorsque j'ouvre un fichier .csv extrait d'une base de données. En effet, je perds du temps à effectuer les mêmes manipulations à chaque fichier, alors que je pense que ceci pourrait être fait dès son ouverture.
Les conditions et besoins sont les suivantes :
- le fichier est toujours au format .csv et se retrouve dans le fichier C:\Users\...\Downloads
- le titre sera toujours "ListeDefauts.csv" ou "ListeDefauts (1).csv" ou "ListeDefauts (2).csv" ou "ListeDefauts (3).csv" ou "ListeDefauts (45).csv" etc.
- Traitement du fichier (codage réussi) : insertion d'une colonne tout à gauche du fichier, insertion du mot "date" en A1, remplissage du reste de la colonne A en fonction des valeurs en B, ajustement de la largeur des colonnes.
- Traitement du fichier (codage non réussi) : sélection des données (pas plus, pas moins) et mise sous forme de tableau, insertion d'un tableau croisé dynamique sur la base de ce tableau là.
- Si possible : insertion du champ "Date" dans champ de lignes, groupement des données par années, mois, jour, heure.
Ci-joints deux fichiers :
- une extraction brut d'un fichier (.xlsx) normalement en csv mais le forum n'accepte pas l'envoi des csv.
- le résultat attendu comprenant le début de macro (.xlsm); le code de la macro est également ci-dessous.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 Public Sub Insert_col() Dim i As Integer nb_lignes = WorksheetFunction.CountA(Range("A:A")) 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 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)) = 21 Then 'si 21 caractères, on enlève le dernier caractère et on copie le résultat en A Cells(i, 1) = Left(Cells(i, 2), Len(Cells(i, 2)) - 1) '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 End Sub
Merci d'avance.
Partager