Bonjour à toutes et à tous,
J'ai crée une macro permettant de rassembler dans un nouveau classeur des données provenant d'autres classeurs, afin d'effectuer des traitements par la suite.
Problème : Là où les dates sont au bon format dans le fichier d'origine, la copie est défectueuse pour certaines cases. Certaines sont copiées correctement au format DATE dans la destination, d'autres sont recopiées au format STANDARD avec pleins d'espaces inutiles à la fin!!!
Vous verrez dans la macro jointe, que j'ai tenté tout ce que j'ai trouvé pour reconvertir correctement les dates, sans y parvenir...
Un fichier test contenant les valeurs à extraire est également joint.
Sub E3_BACN_FACTUR()
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
Dim etc As Boolean 'En tête copié
Const lig$ = "1" 'Adresse de la première ligne des tableaux à copier
Const col$ = "C" 'Adresse de la colonne à tester
Const titre As Integer = 5
Dim datelim As Date
datelim = InputBox("Inscrivez la date limite", "Action requise", Date)
'------------------------------------------1------------------------------------------
' Définir le répertoire à lire
pth = "C:\Users\ISSOU\Desktop\TEST"
' Créer le fichier résultat
Set res = Workbooks.Add(xlWBATWorksheet)
Set dst = res.Worksheets(1).Range("A1")
i = 1
' Lecture du répertoire
Set fso = CreateObject("Scripting.FileSystemObject")
Set rep = fso.GetFolder(pth)[attachment=0]TEST.xls[/attachment]
Set cfr = rep.Files
' Contrôler chaque fichier du répertoire
For Each fic In cfr
On Error Resume Next
' - Vérifier s'il s'agit d'un fichier Excel...
If StrComp(fso.GetExtensionName(fic.Name), "xls", vbTextCompare) = 0 And fic.Name Like "*TEST*" Then
' ... dans l'affirmative, ouvrir le fichier et mettre à jour les liaisons
Set wbk = Workbooks.Open(Filename:=pth & "\" & fic.Name, UpdateLinks:=xlUpdateLinksAlways)
' Définir les lignes à copier
With wbk.Worksheets(1)
Set rng = .Rows(lig & ":" & .Cells(.Rows.Count, col).End(xlUp).Row)
End With
' Copier les lignes entières
rng.Copy
dst.PasteSpecial Paste:=xlPasteValuesAndNumberFormats
' Destination suivante
i = i + 1
Set wrs = res.Worksheets.Add
Set dst = res.Worksheets("Feuil" & i).Range("A1")
' Fermer le fichier sans le modifier
wbk.Close False
End If
Next fic
Application.DisplayAlerts = False
' Pour chaque feuille dans le nouveau classeur...
For Each wrs In res.Worksheets
' ...Si elle est vide...
If Cells.Find("*") Is Nothing Then
' ...La supprimer
wrs.Delete
End If
Next wrs
Application.DisplayAlerts = True
res.Worksheets("Feuil1").Name = "FACT LP"
res.Worksheets("Feuil2").Name = "TOT LP"
Set wsh1 = res.Worksheets("FACT LP")
Set wsh2 = res.Worksheets("TOT LP")
With wsh1
Lastlig = .Cells(Rows.Count, col).End(xlUp).Row
Lastcol = .Cells(titre, Columns.Count).End(xlToLeft).Column
Application.Calculation = xlCalculationManual
Application.Calculation = xlCalculationAutomatic
For i = titre + 1 To Lastlig
Cells(i, 6).Value = Trim(Cells(i, 6).Value)
Cells(i, 6).Calculate
Next i
Range(Cells(titre + 1, 6), Cells(Lastlig, 6)).TextToColumns , xlFixedWidth, Array(0, 3)
For i = Lastlig To titre Step -1
If Cells(i, 6).Value <= datelim Then
Cells(i, 6).EntireRow.Delete
End If
Next i
End With
res.SaveAs "C:\users\ISSOU\Desktop\Facturation LP.xls"
Si l'un(e) de vous a une solution, merci d'avance.