cs_Anatolle
Messages postés4Date d'inscriptionlundi 2 octobre 2006StatutMembreDernière intervention24 octobre 2006
-
4 oct. 2006 à 19:35
cs_Anatolle
Messages postés4Date d'inscriptionlundi 2 octobre 2006StatutMembreDernière intervention24 octobre 2006
-
5 oct. 2006 à 23:53
Salut à tous,
Je suis un débutant en VBA et je dois faire un petit logiciel pour traiter des fichiers de données .txt dans excel. Je me demandais s'il n'y avait pas quelqu'un qui saurait comment ouvrir plusieurs fichiers excel en VBA pour ensuite les concaténer?!
Avec le code suivant, je suis capable de rechercher le nombre de fichiers dans le dossiers des données à traiter, de les ouvrir un par un (manuellement en spécifiant quelques paramètres,... ce que j'aimerais automatiser), et de les concaténer. De plus, je veux effectuer un trie dans les données afin que le titre des collonnes n'apparaissent qu'une fois et que les tuples affichant la valeur 0 soient supprimer. Alors le voici:
Private Sub RDS_INNOTAG_Click()
Set fichcherche = Application.FileSearch
With fichcherche
.LookIn = "C:\Club Passion\données Innotag" 'dossier où se trouve les données
.Filename = "*.X02"
If .Execute > 0 Then
MsgBox .FoundFiles.Count & " Fichier(s) a (ont) été trouvé(s)."
For I = 1 To .FoundFiles.Count 'trouve le nombre de fichiers
Workbooks.OpenText Filename:=.FoundFiles(I), _
Origin:=437, StartRow:=1, DataType:=xlDelimited, TextQualifier:= _
xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, Semicolon:=False, _
Comma:=False, Space:=False, Other:=True, OtherChar:="@", FieldInfo:= _
Array(Array(1, 1), Array(2, 1), Array(3, 1), Array(4, 1), Array(5, 1), Array(6, 1)), _
TrailingMinusNumbers:=True ' à cause de la méthode d'ouverture ReponseDialog plus basse, 'les paramètres ne sont pas respectés
Range("A2").Select
Application.CutCopyMode = False
nouveau = InputBox("Assignez un nom au fichier concaténé.", "Nouveau fichier")
ActiveWorkbook.SaveAs Filename:="C:\Club Passion\Excel" & nouveau & ".xls", FileFormat:=xlText, _
CreateBackup:=False
Do
ActiveWorkbook.Close False ' J'aimerais pouvoir faire en sorte que l'application ne se ferme 'plus, mais si j'enlève cette partie du code, il y a une erreur dans les boucles lors de la compilation
passed = passed - 1
If passed = 0 Then Exit Do
Loop
On Error Resume Next
Next I
Else
MsgBox "Aucun fichier n'a été trouvé."
End If
End With
End Sub
Voilà, je sais que mon code est très long et que ce que je vous demande est assez compliqué,... mais je suis un peu désespéré , je ne sais plus quoi essayé!!
Merci à l'avance et bonne journée !!!
A voir également:
Comment ouvrir plusieurs fichiers excel dans un même classeur pour ensuite les c
cs_Anatolle
Messages postés4Date d'inscriptionlundi 2 octobre 2006StatutMembreDernière intervention24 octobre 2006 5 oct. 2006 à 23:53
Ça plantait après la copie du premier,... mais j'ai travaillé toute la journée dessus et j'ai finalement opté pour une autre alternative: après l'ouverture de mes fichiers .X02, je les rend conforme en modifiant leurs paramètres, puis je les enregistre en format .txt et les referme. Je me suis fait alors une autre Macro pour les concaténer à partir d'un bouton d'activation indépendant... et ça fonctionne!!!! Merci beaucoup pour ton intérêt MPi! voici mon code:
Private Sub RDS_INNOTAG_Click()
Set fichcherche = Application.FileSearch
With fichcherche
' .LookIn = GetDirectory 'Utilise la fonction GetDirectory voir page Exemple d'application
.LookIn = "C:\Club Passion\données Innotag" 'dossier où se trouve les données
.Filename = "*.X02"
If .Execute > 0 Then
MsgBox .FoundFiles.Count & " Fichier(s) a (ont) été trouvé(s)."
For I = 1 To .FoundFiles.Count 'trouve le nombre de fichiers
Workbooks.OpenText Filename:=.FoundFiles(I), _
Origin:=437, StartRow:=1, DataType:=xlDelimited, TextQualifier:= _
xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, Semicolon:=False, _
Comma:=False, Space:=False, Other:=True, OtherChar:="@", FieldInfo:= _
Array(Array(1, 1), Array(2, 1), Array(3, 1), Array(4, 1), Array(5, 1), Array(6, 1)), _
TrailingMinusNumbers:=True 'paramètres pour rendre le fichier txt conforme en excel
Rows("1:20").Select
Selection.Delete Shift:=xlUp
Rows("1:1").Select
Selection.Insert Shift:=xlDown
Range("A1").Select
ActiveCell.FormulaR1C1 = "RECORD"
' ... j'ai deleter une partie car c'est un peu long
ActiveWindow.ScrollRow = 20684
ActiveWindow.ScrollRow = 15322
ActiveWindow.ScrollRow = 1
Application.CutCopyMode = False
Range("B1").Select
ActiveWindow.SmallScroll ToRight:=-1
Range("A1").Select
Range("A1").Select
Application.CutCopyMode = False
nouveau = InputBox("Assignez un nom au fichier texte.", "Nouveau fichier")
ActiveWorkbook.SaveAs Filename:="C:\Club Passion\Données Innotag" & nouveau & ".txt", FileFormat:=xlText, _
CreateBackup:=False
ActiveWorkbook.Close
On Error Resume Next
Next I
Else
MsgBox "Aucun fichier n'a été trouvé."
End If
End With
End Sub
Private Sub Concatenation_Click() 'début de la étape Concaténation
passed = 0
Do
ReponseDialog = Application.Dialogs(xlDialogOpen).Show("C:\Club Passion\Données Innotag\*.txt") If ReponseDialog False Then Parcour False: Exit Do If passed 0 Then myfile ActiveWorkbook.Name
If passed > 0 Then
Range(Selection, Selection.End(xlToRight)).Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Copy
Windows(myfile).Activate
ActiveSheet.Paste
End If
Range("A1").Select
Application.CutCopyMode = False
nouveau = InputBox("Assignez un nom au fichier concaténé.", "Nouveau fichier")
ActiveWorkbook.SaveAs Filename:="C:\Club Passion\Excel" & nouveau & ".xls", FileFormat:=xlText, _
CreateBackup:=False
Do
ActiveWorkbook.Close False
passed = passed - 1
If passed = 0 Then Exit Do
Loop
cs_Anatolle
Messages postés4Date d'inscriptionlundi 2 octobre 2006StatutMembreDernière intervention24 octobre 2006 4 oct. 2006 à 20:35
J'ai réussi à faire un peu de ménage dans mon programme, il est un peu plus claire maintenant. Donc ce qu'il fait maintenant : il trouve le nombre de fichier dans le dossier, ouvre le premier et le met en ordre, il vient pour chercher les autres fichiers afin de les concaténer, et c'est là qui plante... Si jamais il y a quelqu'un qui voudrait m'aider, ce serait GRANDEMENT apprécié ;)
Private Sub RDS_INNOTAG_Click()
Set fichcherche = Application.FileSearch
With fichcherche
.LookIn = "C:\Club Passion\données Innotag" 'dossier où se trouve les données
.Filename = "*.X02"
If .Execute > 0 Then
MsgBox .FoundFiles.Count & " Fichier(s) a (ont) été trouvé(s)."
For I = 1 To .FoundFiles.Count 'indique le nombre de fichiers de données
myfile = ActiveWorkbook.Name
Workbooks.OpenText Filename:=.FoundFiles(I), _
Origin:=437, StartRow:=1, DataType:=xlDelimited, TextQualifier:= _
xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, Semicolon:=False, _
Comma:=False, Space:=False, Other:=True, OtherChar:="@", FieldInfo:= _
Array(Array(1, 1), Array(2, 1), Array(3, 1), Array(4, 1), Array(5, 1), Array(6, 1)), _
TrailingMinusNumbers:=True 'paramètres pour rendre le fichier txt conforme en excel
Selection.End(xlDown).Select
ActiveCell.Offset(1, 0).Select 'cette partie cause problème
passed = passed + 1
Loop
Range("A2").Select
Application.CutCopyMode = False
nouveau = InputBox("Assignez un nom au fichier concaténé.", "Nouveau fichier")
ActiveWorkbook.SaveAs Filename:="C:\Club Passion\Excel" & nouveau & ".xls", FileFormat:=xlText, _
CreateBackup:=False
On Error Resume Next
Next I
Else
MsgBox "Aucun fichier n'a été trouvé."
End If
End With
cs_Anatolle
Messages postés4Date d'inscriptionlundi 2 octobre 2006StatutMembreDernière intervention24 octobre 2006 5 oct. 2006 à 14:40
J'avoue que le PasteSpecial est une bonne idée, mais ça n'a rien changé, mon programme bug toujours au même endroit, c'est-à-dire lorsqu'il sélectionne la cellule du prochain collage:
ActiveCell.Offset(1, 0).Select
...
Merci MPi pour ton conseil,
Est-ce que quelqu'un aurait une autre idée?!
Vous n’avez pas trouvé la réponse que vous recherchez ?