[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!

6cxxx19061.xlsx (12.47 Ko)
12cxxx19061.xls (3.99 Ko)

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.

Rechercher des sujets similaires à "2016 changer nature classeur xls ouvrir"