Explication de code
Bonjour au forum,
Est-ce que quelqu'un pourrait m'expliquer en détail le code ci-dessous, qui me permet d'împorter un fichier .txt dans un fichier excel, en convertissant les données de la colonne A au format "Date" exploitable ?
Il fonctionne sur le fichier d'origine qu'un membre du forum a eu l'aimabilité de programmer pour moi mais j'aimerais l'adapter sur un nouveau fichier d'importation, et j'aimerais essayé de l'adapter moi-même pour progresser.
Sub transformer()
Dim i%, j%
Dim xl As Excel.Application, wb As Workbook
Dim Fichier
Dim N
Dim flagDate
Dim Contenu
Dim tbl
ChDrive "P"
ChDir "P:\Extraction\" 'chemin par défaut
Fichier = Application.GetOpenFilename '("Fichiers faux XLS, *.XLS")
If Fichier = False Then Exit Sub
N = FreeFile
Open Fichier For Input As #N
i = 1 ' ligne début
flagDate = False
Set xl = CreateObject("Excel.Application")
xl.SheetsInNewWorkbook = 1
Set wb = xl.Workbooks.Add
With wb.Sheets(1)
Do While Not EOF(1)
Line Input #N, Contenu
tbl = Split(Contenu, Chr(9))
.Cells(i, 1).Resize(1, UBound(tbl) + 1) = tbl
If flagDate Then ' sup à la première ligne
.Cells(i, 1).Value = DateSerial(Mid(.Cells(i, 1).Value, 7, 4), Mid(.Cells(i, 1).Value, 4, 2), Mid(.Cells(i, 1).Value, 1, 2))
'.Cells(i, 17).Value = DateSerial(Mid(.Cells(i, 17).Value, 7, 4), Mid(.Cells(i, 17).Value, 4, 2), Mid(.Cells(i, 17).Value, 1, 2))
'.Cells(i, 25).Value = DateSerial(Mid(.Cells(i, 25).Value, 7, 4), Mid(.Cells(i, 25).Value, 4, 2), Mid(.Cells(i, 25).Value, 1, 2))
'.Cells(i, 26).Value = DateSerial(Mid(.Cells(i, 26).Value, 7, 4), Mid(.Cells(i, 26).Value, 4, 2), Mid(.Cells(i, 26).Value, 1, 2))
End If
i = i + 1
flagDate = True
Loop
End With
Close #N
wb.SaveAs Filename:="P:\Extraction\" & "Extraction_Stock_" & Format(Date, "yyyy.mm.dd") & ".xlsx"
Set wb = Nothing
xl.Quit
Set xl = Nothing
MsgBox "Conversion de fichier terminée !" & Chr(10) & "Sélectionner maintenant le fichier au format .xlsx à importer." _
& Chr(10) & "Ce fichier se trouve dans le dossier : P:\Extraction\", vbInformation, "Conversion terminée !"
End Sub
Merci d'avance pour votre aide !
Bonjour,
je ne sais pas jusqu'à quel point tu veux rentrer dans le code, pour le moment je ne vais faire que le cœur du code
N = FreeFile
Open Fichier For Input As #N
i = 1 ' ligne début
flagDate = False
Set xl = CreateObject("Excel.Application")
xl.SheetsInNewWorkbook = 1
Set wb = xl.Workbooks.Add
With wb.Sheets(1)
Do While Not EOF(1)
Line Input #N, Contenu
tbl = Split(Contenu, Chr(9))
.Cells(i, 1).Resize(1, UBound(tbl) + 1) = tbl
If flagDate Then ' sup à la première ligne
.Cells(i, 1).Value = DateSerial(Mid(.Cells(i, 1).Value, 7, 4), Mid(.Cells(i, 1).Value, 4, 2), Mid(.Cells(i, 1).Value, 1, 2))
End If
i = i + 1
flagDate = True
Loop
End With
Close #N
flagDate
est mis à false au début pour éviter d'appliquer la transformation de la date à la ligne d'en-tête, dès l'en-tête stocké, il est mis à true pour toutes les autres lignes
tbl = Split(Contenu, Chr(9))
.Cells(i, 1).Resize(1, UBound(tbl) + 1) = tbl
ceci permet de stocker les données d'une ligne du fichier texte dans un tableau et le reporter en l'état sur une ligne excel
sauf que la première valeur ne donne pas la bonne date, on va alors reprendre cette valeur (ligne i, colonne 1) et lui appliquer ceci
DateSerial(Mid(.Cells(i, 1).Value, 7, 4), Mid(.Cells(i, 1).Value, 4, 2), Mid(.Cells(i, 1).Value, 1, 2))
c'est-à-dire qu'on extrait l'année (4 caractères à partir de la position 7), le mois (2 caractères à partir de la position 4) et enfin le jour (2 caractères à partir de la position 1)Y a t'il d'autres parties à expliciter ?
Bonjour Steelson,
Merci beaucoup pour ta réponse !
Je viens de retrouver le post d'origine, et c'était toi qui m'avait écrit ce code
Sur ce post, je t'avais déjà demandé des informations que tu m'avais gentiment fourni, mais il me manquait quelques infos, que tu viens de me donner à l'instant...
Alors je te remercie une fois de plus infiniment, j'apprends petit à petit et tes explications me sont toujours très utiles !
Excellente journée à toi
Hé ben dis conc, je ne me suis pas reconnu ! et je l'aurais sans doute écrit différemment ? quoique
Si c'est ok, clos le fil de discussion en cliquant sur le V
Pour ton info : https://forum.excel-pratique.com/excel/vba-format-date-lors-d-importation-138644
Merci encore !