Bonjour,

J'aimerai importer à la suite une soixantaine de fichier (avec un format inconnu pour excel) en lui précisant que toutes les colonnes sont séparées par des point-virgules. Excel ne doit pas importer par rapport aux noms des fichiers, mais par rapport au dossier. (Importer tous les fichiers d'un dossier).
Parce que tous les mois des fichiers différents vont remplacer les anciens dans ce même dossier.
Les fichiers ont tous la même structure en colonnes, mais pas en nombre de lignes.

J'aimerais que toutes les colonnes de mes dits fichiers soient copiées collées les unes à la suite des autres.

En essayant d'ouvrir l'un de mes fichiers avec l'enregistreur de macro, cela m'a donné ce code :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
Origin:=xlMSDOS, StartRow:=1, DataType:=xlDelimited, TextQualifier:= _
        xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, Semicolon:=True, _
        Comma:=False, Space:=False, Other:=False, FieldInfo:=Array(Array(1, 1), _
        Array(2, 1), Array(3, 1), Array(4, 1), Array(5, 1), Array(6, 1), Array(7, 1)), _
        TrailingMinusNumbers:=True
Je me suis permis de reprendre un code que j'ai trouvé dans un autre topic, et que j'ai transformé un peu en enlevant de la mise en page (merci Nakolito) :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
Sub general()
    Application.ScreenUpdating = False
 
 
    'declaration de variable
    Dim objFSO As Object
    Dim objDossier As Object
    Dim objFichier As Object
 
    'initialisation des variables
    Set objFSO = CreateObject("Scripting.FileSystemObject")
    'definit le repertoire ou se trouvent les feuilles a traiter
    Set objDossier = objFSO.GetFolder("D:\blabla\RecupCDR")
 
    'pour chaque classeur dans le répertoire
    For Each objFichier In objDossier.Files
        'ouvre le classeur
        Workbooks.Open objFichier
 
        'lance la méthode copierColler pour toute les cellules a copier
        'nom
        copierColler "C4", 1
        'prenom
        copierColler "F4", 2
        'adresse
        copierColler "C5", 3
        'numero de rue
        copierColler "G5", 4
        'code postal
        copierColler "C6", 5
        'ville
        copierColler "E6", 6
        'date de naissance
        copierColler "C7", 7
        'tel fixe
        copierColler "F7", 8
        'telephone portable
        copierColler "C8", 9
        'adresse mail
        copierColler "E8", 10
        'Carte LAC
        copierColler "C9", 11
        'Date effet
        copierColler "E9", 12
 
        'ferme le classeur client sans sauvegarder
        Workbooks(Workbooks.Count).Close saveChanges:=False
 
    Next
 
 
    With ThisWorkbook.Sheets(1)
 
        'copie la feuille vers un nouveau classeur
        .Copy
 
    End With
 
    'efface les cellules dans thisworkbook
    ThisWorkbook.Sheets(1).Cells.Clear
 
    'renome la feuille qui vient d'etre copiée
    Workbooks(Workbooks.Count).Sheets(1).Name = "RecupCDR"
 
    'enregistre le nouveau classeur dans le repertoire de destination
    Workbooks(Workbooks.Count).SaveAs "D:\FICHIER_RecupCDR.xls"
 
    'ferme le nouveau classeur
    Workbooks(Workbooks.Count).Close
 
    Application.ScreenUpdating = True
 
End Sub
 
'méthode qui copie une donnée depuis le classeur client vers thisworkbook
Public Sub copierColler(rangeSource As String, colonneDestination As Integer)
    With ThisWorkbook
        'si la cellule est vide
        If Workbooks(Workbooks.Count).Sheets(2).Range(rangeSource) = "" Then
            'on la remplit avec qqc
            Workbooks(Workbooks.Count).Sheets(2).Range(rangeSource) = "_"
        End If
        'copie la cellule depuis le classeur client
        Workbooks(Workbooks.Count).Sheets(2).Range(rangeSource).Copy
        'colle dans la colonne qui va bien dans thisworkbook
        .Sheets(1).Cells(lastRow(.Name, .Sheets(1).Name, colonneDestination) + 1, colonneDestination).PasteSpecial
    End With
End Sub
 
'methode qui permet de connaitre la derniere ligne d'une colonne
Public Function lastRow(leClasseur As String, laFeuille As String, laColonne As Integer)
    lastRow = Workbooks(leClasseur).Sheets(laFeuille).Cells(65536, laColonne).End(xlUp).Row
End Function
Ce code me permet d'avoir une bonne base pour ma macro.

J'aimerai maintenant modifier la partie que l'on applique à tous les fichiers du dossier.
Au lieu d'ouvrir simplement un fichier .xls, ici c'est un fichier .ok (non reconnu par excel) qu'il faut ouvrir. Donc je dois implémenter à ce code (quelque part je ne sais où) quelque chose comme ça :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
Origin:=xlMSDOS, StartRow:=1, DataType:=xlDelimited, TextQualifier:= _
        xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, Semicolon:=True, _
        Comma:=False, Space:=False, Other:=False, FieldInfo:=Array(Array(1, 1), _
        Array(2, 1), Array(3, 1), Array(4, 1), Array(5, 1), Array(6, 1), Array(7, 1)), _
        TrailingMinusNumbers:=True

pour qu'Excel ouvre le fichier en délimitant les colonnes grâce aux point-virgules présents.

Ensuite il faut non pas que je copie une seule cellule (coordonnées XY) mais toute la colonne X, et que je la colle sur la colonne X' du nouveau fichier.

Mon problème c'est que je n'y connais rien en VBA et que j'ai beau me documenter mais j'ai vraiment du mal à comprendre !

Merci d'avance pour votre aide