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 :
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 :
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 :
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
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:
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 :
Code:
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:
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