Besoin d'aide pour macro excel

Supernic3

XLDnaute Nouveau
Bonjour,
J'ai effectué un programme sous Windev express 12 pour transformer un fichier txt en excel.
Voici le code windev que j'ai fait :

//Création de l'objet
xl est un objet OLE "Excel.Application"

// Excel doit être affiché
xl>>Visible = OLEVrai

// Nouveau classeur
xl>>workbooks>>add()

xl>>range("A1")>>Value = "N° contrat"
xl>>range("B1")>>Value = "Police AUXIA"
xl>>range("C1")>>Value = "Civilité"
xl>>range("D1")>>Value = "Nom"
xl>>range("E1")>>Value = "Prénom"
xl>>range("F1")>>Value = "Date naissance"
xl>>range("G1")>>Value = "N° Assuré"
xl>>range("H1")>>Value = "Adresse du souscripteur"
xl>>range("I1")>>Value = "Code Postale"
xl>>range("J1")>>Value = "Ville"
xl>>range("K1")>>Value = "Capital"
xl>>range("L1")>>Value = "Durée paiement/fract."


xl>>range("P1")>>Value = "Date mvt"

xl>>range("A1")>>ColumnWidth = 25
xl>>range("B1")>>ColumnWidth = 15
xl>>range("D1")>>ColumnWidth = 15
xl>>range("E1")>>ColumnWidth = 15
xl>>range("H1")>>ColumnWidth = 35
xl>>range("J1")>>ColumnWidth = 25
xl>>range("K1")>>ColumnWidth = 18
xl>>range("L1")>>ColumnWidth = 12


IdFichier est un entier= fOuvre(SAI_Chemin1..Valeur,foLecture)
i est un entier = 3

SI IdFichier > 0 ALORS
LigneLue est une chaîne = fLitLigne(IdFichier) //lecture de la premiere ligne
TANTQUE LigneLue<>"" ET LigneLue<>EOT
//extraction des données de la ligne
ExtraitChaîne(LigneLue, 1, " ")
LigneLue= fLit(IdFichier,24)
xl>>range("A"+i)>>Value = LigneLue
//Saute les espace dans le fichier txt
fLit(IdFichier,2)
LigneLue= fLit(IdFichier,8)
xl>>range("B"+i)>>Value = LigneLue
LigneLue= fLit(IdFichier,3)
xl>>range("C"+i)>>Value = LigneLue
LigneLue= fLit(IdFichier,25)
//Saut du point dans le fichier txt et des espaces
fLit(IdFichier,25)
//reprise de l'enregistrement
xl>>range("D"+i)>>Value = LigneLue
LigneLue= fLit(IdFichier,25)
xl>>range("E"+i)>>Value = LigneLue
LigneLue= fLit(IdFichier,8)
xl>>range("F"+i)>>Value = LigneLue
LigneLue= fLit(IdFichier,7)
xl>>range("G"+i)>>Value = LigneLue
LigneLue= fLit(IdFichier,60)
xl>>range("H"+i)>>Value = LigneLue
LigneLue= fLit(IdFichier,5)
xl>>range("I"+i)>>Value = LigneLue
LigneLue= fLit(IdFichier,30)
xl>>range("J"+i)>>Value = LigneLue
LigneLue= fLit(IdFichier,15)
xl>>range("K"+i)>>Value = LigneLue
LigneLue= fLit(IdFichier,13)
xl>>range("L"+i)>>Value = LigneLue
LigneLue= fLit(IdFichier,10)
xl>>range("M"+i)>>Value = LigneLue
LigneLue= fLit(IdFichier,8)
xl>>range("N"+i)>>Value = LigneLue
LigneLue= fLit(IdFichier,4)
xl>>range("O"+i)>>Value = LigneLue
LigneLue= fLit(IdFichier,10)
xl>>range("P"+i)>>Value = LigneLue
//Saute les espace dans le fichier txt
fLit(IdFichier,2)
i++
FIN
fFerme(IdFichier) //fermeture du fichier
FIN

En gros on a une fenetre avec un bouton "parcourir" où on choisit le fichier texte qui aura pour variable -> SAI_Chemin1.
Puis on clique sur "Création" qui posséde le code ci-dessus. Grâce à ce code on obtient un nouveau fichier excel avec les données du fichier text rangé par colonne. Les fichiers textes ont toujours la même forme et ne possède pas de séparateur. Il faut donc les lires octet par octet.

Malheureusement Windev express produit des exécutables qui ne dure que 2 semaine maximum car c'est une version gratuite. Je joint un type de fichier texte et le résultat censé obtenir.
Ne connaissant rien au marco excel est-il possible de retranscrire ce code sous macro VBA ? Y a t-il une âme charitable pour pouvoir le faire ?!
Merci d'avance
 

Pièces jointes

  • txt en xls.zip
    2.5 KB · Affichages: 57

Minick

XLDnaute Impliqué
Re : Besoin d'aide pour macro excel

Salut,

Un exemple:
Code:
Sub Creation()
    Dim Fichier As Variant
    
    Fichier = Application.GetOpenFilename("Fichiers textes, *.txt")
    
    If Fichier <> False Then
        With ActiveSheet
            .Cells.Delete
            .Range("A1").Value = "N° contrat"
            .Range("B1").Value = "Police AUXIA"
            .Range("C1").Value = "Civilité"
            .Range("D1").Value = "Nom"
            .Range("E1").Value = "Prénom"
            .Range("F1").Value = "Date naissance"
            .Range("G1").Value = "N° Assuré"
            .Range("H1").Value = "Adresse du souscripteur"
            .Range("I1").Value = "Code Postale"
            .Range("J1").Value = "Ville"
            .Range("K1").Value = "Capital"
            .Range("L1").Value = "Durée paiement/fract."
            .Range("P1").Value = "Date mvt"
            
            With .QueryTables.Add(Connection:="TEXT;" & Fichier, Destination:=.Range("A3"))
                .TextFileParseType = xlFixedWidth
                .TextFileTabDelimiter = True
                .TextFileColumnDataTypes = Array(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 9)
                .TextFileFixedColumnWidths = Array(24, 10, 3, 50, 25, 8, 7, 60, 5, 30, 15, 11, 5, 13, 5, 11)
                .Refresh BackgroundQuery:=False
                .Delete
            End With
            .Columns("A:P").AutoFit
            .Columns("A").ColumnWidth = 25
            .Columns("B").ColumnWidth = 15
            .Columns("D").ColumnWidth = 15
            .Columns("E").ColumnWidth = 15
            .Columns("H").ColumnWidth = 35
            .Columns("J").ColumnWidth = 25
            .Columns("K").ColumnWidth = 18
            .Columns("L").ColumnWidth = 12
        End With
    End If
End Sub
 

Minick

XLDnaute Impliqué
Re : Besoin d'aide pour macro excel

Salut,

D'apres le fichier txt les zones sont fixes (toujours la meme largeur).
Donc la procedure que je t'ai donnee fait ce que tu demandes,
elle decoupe les zones pour les mettre dans une colonne distincte pour chaque.
J'ai volontairement occulte la partie de creation d'un nouveau fichier
car tu pourras trouver enormement d'exemples sur le forum pour cela.

Je ne comprend pas ce que tu veux de plus.
Essaie d'etre plus precis dans ta demande.
 

Discussions similaires

Réponses
7
Affichages
532

Membres actuellement en ligne

Statistiques des forums

Discussions
312 215
Messages
2 086 329
Membres
103 185
dernier inscrit
salhit