[Excel 2016] Changer la nature du classeur ".xls" en .xls sans l'ouvrir
Bonjour,
Je travaille actuellement à l'automatisation -au moins partielle- du processus de reporting dans ma boîte, et j'ai un petit soucis.
Les documents avec lesquels je travaille sont édités à partir d'un PGI assez vieux, qui envoie les documents au format .xls sur mail à la demande.
Le fait est que pour chaque document, quand on l'ouvre, un message nous dit que la nature du document et son format ne correspondent pas : les documents .xls sont en fait des .txt qui prennent l'apparence de classeurs!
Maintenant le problème, c'est que certains documents contiennent des dates, et lorsque j'utilise des macros qui les ouvres pour effectuer des traitements, les dates dont le jour est inférieur à 13 passent systématiquement et automatiquement au format américain (inversion jours-mois), ce que je cherche à éviter à tout prix.
J'ai déjà essayé toute sorte de méthode pour essayer de reconvertir les dates, mais rien à faire, une fois la date incorrecte, impossible de faire quoi que ce soit derrière.
Donc la seule issue pour moi, était d'imaginer une macro permettant de changer la nature des documents, or je ne sais pas comment faire ça, et je suis pris de court par le temps qu'il me reste (mon stage se termine bientôt) coup de bol il y avait déjà un sujet ici : https://forum.excel-pratique.com/viewtopic.php?t=54604
Mais là encore petit hic, après avoir ré-adapté la macro (code ci-dessous), elle ouvre nécessairement les fichiers, et donc les dates sont là aussi modifiées.
Ce que je cherche donc, c'est de pouvoir forcer le changement de nature des fichiers désirés sans les ouvrir.
Si cela est, je le crains fort, impossible, auriez-vous une idée de comment surmonter cette galère ? Je n'ai plus d'idée, et je n'aimerai pas laisser à l'entreprise un process pas terminé.
Vous trouverez deux documents exemples.
Code :
Sub CONVERT_XLS()
Dim nomfichier As String
nomfichier = RechercheFichier()
If nomfichier = "" Then
MsgBox "Vous n'avez sélectionné aucun fichier"
Else
Workbooks.OpenText nomfichier _
, Origin:=xlMSDOS, StartRow:=1, DataType:=xlDelimited, TextQualifier:= _
xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, Semicolon:=False, _
Comma:=False, Space:=False, Other:=False, FieldInfo:=Array(Array(1, 1), _
Array(2, 1), Array(3, 1), Array(4, 5), Array(5, 1), Array(6, 1), Array(7, 1), Array(8, 1), _
Array(9, 1), Array(10, 1), Array(11, 1), Array(12, 1), Array(13, 1), Array(14, 1), Array(15 _
, 1), Array(16, 1), Array(17, 1), Array(18, 1)), TrailingMinusNumbers:=True _
End If
Dim extension As String
Dim style As Integer
Application.ScreenUpdating = False
MsgBox ThisWorkbook.Path
With ActiveWorkbook
.SaveAs FileFormat:=xlOpenXMLWorkbook
.Close
End With
End Sub
' permet de choisir un fichier txt à un emplacement donné
Function RechercheFichier() As String
Dim fd As FileDialog
Dim nomfichier As String
Set fd = Application.FileDialog(msoFileDialogFilePicker)
With fd
.Filters.Add "Excel 97-2003", "*.xls"
.Title = "Recherche de fichier"
'mettre le chemin du repertoire
.InitialFileName = "C:\Users\SBL\Desktop\RSR\"
End With
If fd.Show = -1 Then nomfichier = fd.SelectedItems(1)
RechercheFichier = nomfichier
Set fd = Nothing
End Function
Merci pour votre aide!
Nouvelle macro ou j'ai tenté de modifié l'extension avec la fonction Name
Sub CONVERT()
Dim fso As Object 'Système de fichiers
Dim rep As Object 'Répertoire
Dim cfr As Object 'Collection de fichiers du répertoire
Dim fic As Object 'Fichier (élément de la collection cfr)
Dim wbk As Workbook 'Classeur
Dim res As Workbook 'Classeur resultat
Dim rng As Range 'Plage de cellules
Dim dst As Range 'Cellule de destination
Dim pth As String 'Chemin du répertoire
' Définir le répertoire à lire
pth = "C:\Users\Harkebe\Desktop\TESTt"
' Lecture du répertoire
Set fso = CreateObject("Scripting.FileSystemObject")
Set rep = fso.GetFolder(pth)
Set cfr = rep.Files
' Contrôler chaque fichier du répertoire
For Each fic In cfr
' - Vérifier s'il s'agit d'un fichier Excel...
If StrComp(fso.GetExtensionName(fic.Name), "xls", vbTextCompare) = 0 Then
' Puis la remettre en .xls
Name fic As fic & ".txt"
End If
Next fic
End Sub
Du coup j'ai compris d'où ça venait, du ".txt" et non ".xls" au premier essai.
Donc la le fichier est désormais reconnu comme un document texte.
Je fais comment ensuite pour changer sa nature ET son format en Excel ?
EDIT : Résultat
Problème résolu, merci moi!
Explication : si dans une de vos macros, vous voyez une ligne comme ça :
Set res = Workbooks.Open(Filename:=fich, UpdateLinks:=xlUpdateLinksAlways)
Rajoutez Local:=True
à la fin.
De base, comme c'est la macro qui ouvre le fichier, elle l'ouvre dans la langue Visual Basic (USA), et donc reconvertit les dates si elle le peut.
Avec ce petit Local:=True
, la macro ouvre les fichiers dans la langue d'Excel, en l’occurrence pour moi : le français.