Récupérer Kilométrage parc véhicules
Bonjour,
J'ai besoin de votre aide pour créer un tableau récupérant les kms de début et de fin de plusieurs véhicules d'un parc depuis plusieurs classeurs.
je souhaiterai récupéré le kilométrage des véhicules se trouvant dans plusieurs classeurs fermés ayant plusieurs feuilles
Mes contraintes :
A partir d'un tableau recensant tous les véhicules d'un parc de bus
récupérer le plus petit et le plus grand kilométrage d'un véhicule en comparant tous les kilométrages ( des différents classeurs ) de ce même véhicule.
Certains véhicules peuvent être plusieurs fois présents sur la même feuille et peuvent être aussi présent sur la 2eme et 3eme feuille du même classeur (car peuvent circuler sur plusieurs lignes le même jour).
Les fichiers (source) ne peuvent pas être modifiés (mise en forme) et doivent rester fermés (si possible)
fichiers joints :
2 classeurs 01.xls et 02.xls contenant les numéros de véhicules avec leur kilométrage ( avec 3 feuilles par classeur )
result.xls , le tableau résultat que je souhaite obtenir.
Mes connaissances en Excel et VBA étant très limitées, j'ai besoin de pistes ou conseils sur les fonctions ou macros à utiliser.
Merci d'avance
Bonjour,
mets les fichiers dans un seul dossier (et rien d'autres)
Option Explicit
Sub importer()
Dim wbk1 As Workbook, tbl1 As ListObject, wbk2 As Workbook, ws2 As Worksheet
Dim MonRepertoire, Repertoire As FileDialog, monFichier$
Dim col, derL, lig
Set Repertoire = Application.FileDialog(msoFileDialogFolderPicker)
Application.FileDialog(msoFileDialogFolderPicker).Title = "Choix du répertoire de stockage des fichiers générés"
Repertoire.Show
If Repertoire.SelectedItems.Count = 0 Then Exit Sub
MonRepertoire = Repertoire.SelectedItems(1) & "\"
Set wbk1 = ThisWorkbook
Set tbl1 = wbk1.ActiveSheet.ListObjects(1)
If Not tbl1.DataBodyRange Is Nothing Then tbl1.DataBodyRange.Delete
monFichier = Dir(MonRepertoire & "*.xls*")
Do While monFichier <> ""
Debug.Print monFichier
Set wbk2 = Workbooks.Open(MonRepertoire & monFichier)
For Each ws2 In wbk2.Worksheets
For col = 2 To ws2.Cells(1, Columns.Count).End(xlToLeft).Column Step 6
derL = ws2.Cells(Rows.Count, col).End(xlUp).Row
If derL > 1 Then
tbl1.ListRows.Add
lig = tbl1.ListRows.Count
ws2.Cells(2, col).Resize(derL - 1, 4).Copy Destination:=tbl1.DataBodyRange.Cells(lig, 1)
End If
Next
Next
Application.DisplayAlerts = False
wbk2.Close False
Application.DisplayAlerts = True
monFichier = Dir
Loop
Sheets(2).Select
ActiveSheet.PivotTables(1).PivotCache.Refresh
End Sub
Bonjour à tous
Une version PowerQuery
Modifier le chemin puis Données, Actualiser Tout
A noter que les sources ne sont pas très propres : tantôt on trouve véhicule avec ou sans accent
Si d'autres écarts de ce type, la requête peut ne pas fonctionner
Bonjour et merci à tous les 2 pour votre réactivité et le temps passer sur ma demande.
En fait j’ai plus de 30 fichiers à traiter 01.xls..30.xls
le power query me retourne des erreurs, faut que je vérifie la propreté des fichiers .
la requête vba ne traite pas bien les kms de début et fin de kms ,pour chaque véhicule , faut que je regarde en détail pourquoi .
En tout cas merci pour votre travail , je vais investiguer à partir de vos solutions qui semblent bien correspondre à mes besoins .
Bonne soirée
Pour ma part, par véhicule, je prends la valeur mini du début et maxi de la fin. Il faut bi sûr que le véhicule soit parfaitement identifié de la même façon. Il faut aussi que la structure du document soit respecté en terme de positionnement des tableaux. S'il faut dans certains cas faire une recherche du positionnement des tableaux c'st possible.
Bonjour à tous
C'est sûr qu'une modification des tableaux sources pour l'avenir serait bienvenue :
- pas de tableaux superposés, qui plus est à des positions variables qui créent un chevauchement de lignes,
- des titres homogènes
Comme on dit vulgairement mer...e IN, mer...e OUT
Que ce soit en VBA ou PowerQuery cela simplifierait et et accélèrerait nettement le traitement