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

Rechercher des sujets similaires à "explication code"