Convertir avec VBA

dan -  
eriiic Messages postés 24581 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

  1. Polux31 Messages postés 7219 Statut Membre 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
  2. sipherion Messages postés 1836 Date d'inscription   Statut Membre Dernière intervention   287
     
    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
    1. Polux31 Messages postés 7219 Statut Membre 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
    2. sipherion Messages postés 1836 Date d'inscription   Statut Membre Dernière intervention   287
       
      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
  3. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
     
    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