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
| Option Explicit
Dim fso, folder, files, file
Dim folderPath, latestFile, latestDate
Dim inputFile, line, fields, output, outputFile
Dim colOrder, i
' --- Personnalise ce chemin ---
folderPath = "C:\TEMP\FILES\IMPORT\PROFIL" ' <-- Met le bon chemin ici
Set fso = CreateObject("Scripting.FileSystemObject")
Set folder = fso.GetFolder(folderPath)
Set files = folder.Files
Set latestFile = Nothing
latestDate = #1/1/1900#
' Trouver le fichier le plus récent contenant "_Profile_Users_Global_Active"
For Each file In files
If InStr(file.Name, "_Profile_Users_Global_Active") > 0 Then
If file.DateLastModified > latestDate Then
Set latestFile = file
latestDate = file.DateLastModified
End If
End If
Next
If latestFile Is Nothing Then
MsgBox "Aucun fichier contenant '_Profile_Users_Global_Active' trouvé.", vbExclamation
WScript.Quit
Else
MsgBox "Fichier plus récent trouvé: " & latestfile.Name "on sait ainsi quel est le fichier le plus récent trouvé
End If
' Colonnes à extraire (base 1)
colOrder = Array(4, 1, 2, 15, 9, 8, 10, 11,7)
' Lire le fichier et extraire les colonnes
Set inputFile = fso.OpenTextFile(latestFile.Path, 1, False)
output = "Fichier : " & "LAST_ACTIVE_PROFILE.csv" & vbCrLf & vbCrLf
Set outputFile = fso.OpenTextFile("chemin\du\fichier\resultat.csv",0,True) ' <=== A modifier selon l'emplacement du fichier résultat voulu et si on veut le créer ou si on veut ajouter des lignes si existant (passer 0 à 2)
outputFile.write(output) '<== on écrit la 1ère ligne
Do Until inputFile.AtEndOfStream
line = inputFile.ReadLine
fields = Split(line, ";") ' change ";" en "," si ton fichier utilise des virgules
output ="" '<== on initialise la ligne écrire
If UBound(fields) >= 14 Then ' Vérifie qu'il y a au moins 15 colonnes (base 0)
For i = 0 To UBound(colOrder)
If colOrder(i) - 1 <= UBound(fields) Then
Select Case i
Case 1
output= ouput & fields(colOrder(i)-1) & "-" & fields(colOrder(i)+2-1) & vbTab '<== on peut simplifier en mettant directement les indices des colonnes (je suppose que colonne 1 c'est l'année et colonne 3 le mois (les deux dans le bon format voulu à la fin)
Case 2,8 '<== je suppose que c'est sur l'une de ces colonnes que tu as ton identifiant
Dim t
t=fields(colOrder(i)-1)
If isNumeric(t) Then
output= output & Format(t,"00000000") & vbTab
Else
output = output & t & vbTab
End If
Case Else
output = output & fields(colOrder(i) - 1) & vbTab
End Select
Else
output = output & "?" & vbTab
End If
Next
output = output & vbCrLf
End If
outputFile.write(output)
Loop
outputFile.close '<== on ferme le fichier de sortie
inputFile.Close
' Affiche les résultats
'MsgBox output '<= devenu inutile, mais on peut la déplacer avant Loop pour vérifier la ligne écrite |
Partager