Ajouter "tout caractère" à un nom de fichier
Bonjour,
Je travaille sur une macro qui traite un fichier préalablement téléchargé par l'utilisateur (exemple : DataExtraction.csv). Si l'extraction est faite plusieurs fois, le fichier peut s'appeler DataExtraction(1).csv. Y a-t-il un moyen d'utiliser la commande Windows("DataExtraction.csv").Activate
en incluant les variantes numérotées du type Windows("DataExtraction*.csv").Activate
?
Merci d'avance !
Bonjour,
Au lieu de donner une ligne, peux-tu montrer le code complet ? Le conseil sera efficace. Car on ne sait pas à quel contexte ce code intervient.
Comme ça ?
Sub Import()
'ouverture de l'extraction
NomFic = Application.GetOpenFilename(, , "Importation des données")
If NomFic <> False Then
Workbooks.OpenText Filename:=NomFic, DataType:=1, Semicolon:=True, local:=True
End If
'Copier le fichier CSVExtraction.csv dans la feuille "donnees"
Windows("DataExtraction.csv").Activate
Range("C2:D140,I2:I140,N2:P140").Select
Selection.Copy
Windows("ExportData.xlsm").Activate
Sheets("donnees").Select
Range("B2").Select
ActiveSheet.Paste
'Filtrer
Range("A1").Select
Selection.AutoFilter
ActiveSheet.Range("$A$1:$G$194").AutoFilter Field:=1, Criteria1:="<>"
Range("A1:G500").Select
Selection.Copy
Sheets("Contacts").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Range("A1").Select
'fermeture du fichier CSVExtraction.csv
Windows("DataExtraction.csv").Activate
ActiveWorkbook.Close
'définition du répertoire de destination
Chemin = ActiveWorkbook.Path
'sauvegarde du fichier ExportFinal.csv
ActiveWorkbook.SaveAs Filename:=Chemin & "\ExportFinal.csv", FileFormat:=xlCSV, _
CreateBackup:=False
'fermeture
MsgBox ("Le fichier ExportFinal.csv a été enregistré au même endroit que le fichier ExportData.xlsm qui vous a permis de le créer." & Chr(10) & Chr(10) & "Cliquer sur OK pour quitter Excel.")
Workbooks.Open Filename:=Chemin & "\ExportData.xlsm"
Windows("ExportFinal.csv").Activate
ActiveWorkbook.Close False
End Sub
Bonsoir Gab,
Si j'ai bien compris, vous cherchez à effectuer ce que vous faites déjà avec un fichier (DataExtraction) avec plusieurs fichiers commençant par ce même nom.
J'ai un essai avec une boucle qui est censée faire les opérations que vous faisiez mais sur chacun de ces fichiers "DataExtraction" tant qu'il en existe. Je ne suis pas trop sûr du résultat car je ne l'ai pas testé mais les problèmes éventuels devraient principalement résulter d'une mauvaise syntaxe...
Sub Import()
Dim WbExport as workbook, WbExtrac as workbook
Dim NomFic$
Set WbExport = workbooks("ExportData.xlsm") 'classeur servant à l'export (tampon?)
NomFic = Dir("*DataExtraction*.csv") 'répertorie fichier csv contenant "DataExtraction"
while NomFic <> "" 'tant que le résultat n'est pas vide (càd qu'il existe un fichier contenant "DataExtraction")
Workbooks.OpenText Filename:=NomFic, DataType:=1, Semicolon:=True, local:=True 'ouverture de ce fichier (voir s'il faut chemin complet)
Set WbExtrac = ActiveWorkbook 'Affectation du classeur DataExtraction
'WbExport.Sheets("donnees").cells.clearcontents '??? effacer au préalable les contenus ? (quid ranges tailles différentes)
'WbExport.Sheets("Contacts").cells.clearcontents '??? effacer au préalable les contenus ?
With WbExtrac
.Range("C2:D140,I2:I140,N2:P140").Copy destination:=WbExport.Sheets("donnees").Range("B2") 'copier/coller en B2 de données
.Close savechanges:=true 'fermeture
end with
With WbExport
.Sheets("donnees").Range("$A$1:$G$194").AutoFilter Field:=1, Criteria1:="<>" 'Filtrer (? pourquoi A1:G194 ?)
.Sheets("donnees").Range("A1:G500").Copy 'copier
.Sheets("Contacts").Range("A1").PasteSpecial Paste:=xlPasteValues 'coller valeurs dans contacts
.SaveAs Filename:="ExportFinal_" & format(Now, "YYMMDD-HHMMSS") & ".csv", FileFormat:=xlCSV, CreateBackup:=False 'sauvegarde sous nv csv "ExportFinal avec Horodatage" pour éviter bug ou écrasement du fichier précédent
end with
'kill WbExtrac.fullname '? pour détruire le csv DataExtraction retraité
'Name WbExtrac.fullname as WbExtract.Pathname & "\" & "DonneesExtraites_" & format(Now, "YYMMDD-HHMMSS") & ".csv" 'pour renommer fichier Data traité
'MsgBox "Le fichier ExportFinal.csv a été enregistré au même endroit que le fichier ExportData.xlsm qui vous a permis de le créer." _
& Chr(10) & Chr(10) & "Cliquer sur OK pour quitter Excel." 'sans raison ici
NomFic = Dir 'on recherche le fichier DataExtraction suivant
Wend
'msgbox après boucle éventuellement
End Sub
Cordialement,
Merci. Le but n'est pas de traiter plusieurs fichiers simultanément, mais de faire en sorte que la macro fonctionne, même si le fichier ouvert s'appelle "DataExtraction(1).csv".
Bonjour,
Mince alors, tous ces efforts pour rien. En essayant comme ça, ça pourrait le faire (pour n'importe quel fichier d'ailleurs) :
Sub Import()
Dim WbExport as workbook, WbExtrac as workbook
Dim NomFic$
Set WbExport = workbooks("ExportData.xlsm") 'classeur servant à l'export
NomFic = Application.GetOpenFilename(, , "Importation des données")
'NomFic = Application.GetOpenFilename("DataExtraction Files (DataExtraction*.csv), DataExtraction*.csv", "Importation des données") 'a essayer
If NomFic <> False Then
Workbooks.OpenText Filename:=NomFic, DataType:=1, Semicolon:=True, local:=True 'ouverture fichier DataExtraction
End if
Set WbExtrac = ActiveWorkbook 'Affectation du classeur DataExtraction
'WbExport.Sheets("donnees").Range("A2:G500").clearcontents '??? effacer au préalable les contenus ? (quid ranges tailles différentes)
'WbExport.Sheets("Contacts").cells.clearcontents '??? effacer au préalable les contenus ?
With WbExtrac
.Range("C2:D140,I2:I140,N2:P140").Copy destination:=WbExport.Sheets("donnees").Range("B2") 'copier/coller en B2 de données
.Close savechanges:=true 'fermeture
end with
With WbExport
.Sheets("donnees").Range("$A$1:$G$194").AutoFilter Field:=1, Criteria1:="<>" 'Filtrer (? pourquoi A1:G194 ?)
.Sheets("donnees").Range("A1:G500").Copy 'copier
.Sheets("Contacts").Range("A1").PasteSpecial Paste:=xlPasteValues 'coller valeurs dans contacts
.SaveAs Filename:="ExportFinal_" & format(Now, "YYMMDD-HHMMSS") & ".csv", FileFormat:=xlCSV, CreateBackup:=False 'sauvegarde sous nv csv "ExportFinal avec Horodatage" pour éviter bug ou écrasement du fichier précédent
end with
MsgBox "Le fichier ExportFinal.csv a été enregistré au même endroit que le fichier ExportData.xlsm qui vous a permis de le créer." _
& Chr(10) & Chr(10) & "Cliquer sur OK pour quitter Excel."
Set WbExtract = Nothing
Set WbExport = Nothing
End Sub
Cordialement,