Convertir avec VBA

dan -  
eriiic Messages postés 24603 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,

je suis a la recherche d'une solution pour convertir un fichier texte que j'ouvre avec excel 2010, et je voudrai qu'au lancement de la macro, excel organise le fichier,

le fichier texte se décompose de la facon suivante : les données se trouvent dans la colonne A, chaque ligne comprens de nombreuse infos séparées de la faon suivante :
Info1|Info2|Info3|etc

je voudrais que chaque donnée qui se trouve entre les séparateurs"|" aille dans une nouvelle colonne, mais de quelle facon ?
je suis bien passé par l'enregistreur de macro mais je ne comprend pas le code décrit,
et pour le reproduire ! le mieux c'est de le comprendre

je voudrais aussi savoir comment organiser mes différentes commandes dans vb pour les lancer toutes en éxécutant une seule macro ?

Merci d'avance de votre retour,
et excusé mon ignorance

3 réponses

Polux31 Messages postés 6917 Date d'inscription   Statut Membre Dernière intervention   1 204
 
Bonjour,

Un exemple :

Option Explicit

'Variables globales utiles pour le traitement
Private Wk As Workbook
Private ws As Worksheet
Private cheminFichier As String

'-- Macro Principale ---
Public Sub MaMacro()

    InitVar   'Lancement de la procédure d'initialisation des variables
    OuvertureFichierTxt    'Lancement de l'ouverture et la lecture du fichier txt
    CloseVar     'Lancement de la procédure de fermeture des objets et libération de la mémoire
    
End Sub

'--- Initialisation des variables ---
Private Sub InitVar()

    Set Wk = ThisWorkbook   'Créer un objet Workbook
    Set ws = Wk.Worksheets(1)    'Créer un objet Worksheet de l'instance Wk
    cheminFichier = "D:\CCM\monFichierTxt.txt"      'Chemin complet et nom du fichier à traiter
    
End Sub

'Fermeture des objets
Private Sub CloseVar()
     Set ws = Nothing
     Set Wk = Nothing
End Sub

'--- Ouverture du fichier txt ---
Private Sub OuvertureFichierTxt()
Dim fp As Integer
Dim chaine As String
    
    '--- Ouverture du fichier txt
    fp = FreeFile
    Open cheminFichier For Input As fp
    While Not EOF(fp)   'Parcours toutes les lignes du fichier
        Input #fp, chaine
        Call TransposeExcel(chaine)     'Appel de la procédure de traitement de la ligne
    Wend
    
    Close fp
    
End Sub

'--- Traitement de la ligne et insertion dans Excel ---
Private Sub TransposeExcel(ByVal strChaine As String)
Dim mTab
Dim i As Integer
Dim DerLig As Long

    'Récupération des éléments dans un tableau
    mTab = Split(strChaine, "|")
    'Récupère la dernière ligne de la colonne A pour insertion à la suite
    DerLig = ws.Range("A" & Rows.Count).End(xlUp).Row + 1
    'Parcours le tableau
    For i = LBound(mTab) To UBound(mTab)
        'Insertion des valeur dans Excel
        ws.Cells(DerLig, i + 1).Value = mTab(i)
    Next i
    
End Sub



;0)

«Ce que l'on conçoit bien s'énonce clairement, Et les mots pour le dire arrivent aisément.»
Nicolas Boileau
0
sipherion Messages postés 1809 Date d'inscription   Statut Membre Dernière intervention   286
 
Mon dieu que tu te compliques la vie Polux :

Selection.TextToColumns Destination:=Range("A1"), DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, OtherChar:="|"


Ici, Selection peut être remplacé par un simple Range qui contient donc les données au format Info1|Info2|

Si le séparateur est autre que |, il faut remplacer la valeur de OtherChar:=
0
Polux31 Messages postés 6917 Date d'inscription   Statut Membre Dernière intervention   1 204
 
je me complique la vie, mais ce que j'ai donné fonctionne sur toutes les versions d'Excel de 97 à 2012 ... pas sûr que ta formule soit compatible sur toutes les versions ...
0
sipherion Messages postés 1809 Date d'inscription   Statut Membre Dernière intervention   286
 
J'avoue que puisqu'il a dit ouvrir son doc avec Excel 2010, je ne me suis pas posé la question de compatibilité... Je ne vois pas quel intérêt de rendre compatible une macro type personnelle sur toutes les versions d'Excel si cette mise en compatibilité doit multiplier le code suffisant par 20...
0
eriiic Messages postés 24603 Date d'inscription   Statut Contributeur Dernière intervention   7 275
 
Bonsoir à tous,

à la limite, pourquoi une macro alors qu'excel peut le faire directement ?
'Données / Convertir...', Choisir 'Délimité' et mettre le séparateur |
Et toutes les données sont réparties en colonne.

eric
0