Extraction de données
Bonjour,
Voila ma question :
Je suis commerçant et chaque jour, je reçois un rapport de mes ventes sous fichier Excel.
J'y ai un code produit sur 3 chiffres (ex : 405)
Le nombre de vente, leur prix, etc...
Je souhaiterai créer une feuille "Total janvier" pour connaître la quantité de mes ventes pour chaque produit sur le mois complet.
Comment puis extraire les données de chaque fichier quotidien.
Les fichiers se trouvent dans un dossier mensuel (janvier, février, ... etc) et sont tous enregistrés sous le même format (ex : 20190102, 20190103, ... etc).
Les infos : Code produit et quantités sont toujours en colonne B et D.
La longueur (nombre de lignes) quand à elle est variable en fonction des ventes.
Merci pour vos pistes.
Fichiers joint du 02/01/2019 d'où doivent être extraite les données.
Bonjour,
Si j'ai bien compris, tu as 12 dossiers (un par mois) et dans chaque dossier se trouve un fichier par jour (donc 31 le mois de janvier ? On compte les jours non ouvrables aussi ?)
20190102 correspond aux ventes du 2 janvier 2019 ?
Salut,
Effectivement, il y a des jours non ouvrables en général les lundi.
Pour janvier, j'ai 26 fichiers excel sous le même format.
Le nom du fichier :
20190102 correspond bien au 2 janvier 2019.
Faut t'il que je passe par du VBA (que je connais un peu) pour mieux m'en sortir ?
Je regardais d'abord si il y avait une solution plus simple avant.
Effectivement je pense que le VBA serait plus simple pour ce type de problématique.
Je laisse quand même le temps aux autres membres de donner leur avis, quelqu'un aura peut-être une idée encore plus simple !
Je repasse demain pour voir le fil et tenter de t'apporter un coup de main si besoin.
Bonne soirée
Bonjour Pizzaïolo
Effectivement je pense que le VBA serait plus simple pour ce type de problématique.
Je laisse quand même le temps aux autres membres de donner leur avis, quelqu'un aura peut-être une idée encore plus simple !
Je repasse demain pour voir le fil et tenter de t'apporter un coup de main si besoin.
Puisque que SlimShady m'autorise à répondre ...
Option Explicit
Dim destinataire As Workbook
Sub compiler()
Set destinataire = ActiveWorkbook
Sheets("Synthèse").Range("A1").CurrentRegion.Offset(1, 0).ClearContents
Range("A2").Select
MsgBox "Début de la compilation ..."
ListeFichiers ThisWorkbook.Path
MsgBox "Fin de la compilation ..."
End Sub
Sub ListeFichiers(Repertoire As String)
Dim nbRows As Integer
Dim Fso, SourceFolder, SubFolder, fichier As Object
Set Fso = CreateObject("Scripting.FileSystemObject")
Set SourceFolder = Fso.GetFolder(Repertoire)
' boucle sur tous les fichiers du répertoire
For Each fichier In SourceFolder.Files
If fichier.Name Like "*.xls" Then
If Left(fichier.Name, 2) <> "~$" Then
Workbooks.Open Filename:=Repertoire & "\" & fichier.Name
Range("A1").CurrentRegion.Offset(1, 0).Select
nbRows = Range("A1").CurrentRegion.Rows.Count
Selection.Copy
' change de fichier
destinataire.Activate
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
Application.CutCopyMode = False
Windows(fichier.Name).Activate
ActiveWindow.Close
' place le curseur sous les données
destinataire.Activate
Selection.Offset(nbRows - 1, 0).Select
End If
End If
Next fichier
' appel récursif pour les sous-répertoires
For Each SubFolder In SourceFolder.subfolders
ListeFichiers SubFolder.Path
Next SubFolder
End Sub
Tu mets ce fichier dans un dossier qui contient aussi les mois en sous-dossier
On verra pour la suite ...
Merci,
Sinon, as-tu vu la feuille dans laquelle je veux ranger mes données ?
Apparemment, ce que tu m'as écris extrait les données en listing.
Je voulais aller un peu plus loin
Peut-être un peu trop loin
Oui,
Cela fonctionne en fait, c'est juste que j'ai mes fichiers sur le cloud et je perd la connexion de temps à autre.
Merci pour la piste, il faut que je développe pour extraire chaque produit en fait.
Option Explicit
Dim compil As Workbook
Sub compiler()
Set compil = ActiveWorkbook
ResetTableAvecFormules ActiveSheet.ListObjects(1)
Range("A2").Select
ListeFichiers ThisWorkbook.Path
Sheets("ventes").Select
ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotCache.Refresh
End Sub
Sub ListeFichiers(Repertoire As String)
Dim nbRows As Integer
Dim Fso, SourceFolder, SubFolder, fichier As Object
Set Fso = CreateObject("Scripting.FileSystemObject")
Set SourceFolder = Fso.GetFolder(Repertoire)
' boucle sur tous les fichiers du répertoire
For Each fichier In SourceFolder.Files
If fichier.Name Like "*.xls" Then
If Left(fichier.Name, 2) <> "~$" Then
Workbooks.Open Filename:=Repertoire & "\" & fichier.Name
nbRows = Range("A1").CurrentRegion.Rows.Count
Range("A1").CurrentRegion.Offset(1, 0).Resize(nbRows - 1).Select
Selection.Copy
' change de fichier
compil.Activate
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
Application.CutCopyMode = False
Windows(fichier.Name).Activate
ActiveWindow.Close
' place le curseur sous les données
compil.Activate
Selection.Offset(nbRows - 1, 0).Select
End If
End If
Next fichier
' appel récursif pour les sous-répertoires
For Each SubFolder In SourceFolder.subfolders
ListeFichiers SubFolder.Path
Next SubFolder
End Sub
Sub ResetTableAvecFormules(myTable As ListObject)
With myTable
With .DataBodyRange
If .Rows.Count > 1 Then
.Offset(1, 0).Resize(.Rows.Count - 1, .Columns.Count).Rows.Delete
End If
End With
If .DataBodyRange(.ListRows.Count, 1) <> "" Then .DataBodyRange.Rows(1).SpecialCells(xlCellTypeConstants).ClearContents
End With
End Sub
Bonjour le forum
@Steelson, tu as très bien fait de répondre car je n'aurais pas fais mieux
Bonne journée !
Merci beaucoup,
C'est déjà un grand pas pour ce que je recherche.
Le programme bugg de temps en temps et ne peut finir entièrement l'extraction.
Je vais essayer de me "plonger" dedans.
Encore merci.
Problème de cloud ! ou plutôt de connexion.
Quel cloud utilises-tu ? La plupart proposent une duplication sur le PC (nextcloud, ownCloud, oneDrive entre autres). Choisis une duplication locale si tu peux.
C'est one drive.
J'ai rapatrié mes fichiers sur le PC, mais c'est pareil..
Des fois il bloque à 3-4, d'autres je peux aller jusqu'à 20.
Je ne pige pas
Bonjour à tous,
Juste pour le fun, on peut aussi centraliser les données dans un .accdb (voir démo).
Bouton 'Acquisition' pour pointer sur le dossier principal contenant les fichiers journaliers.
(ça permet de ne pas alourdir le fichier Excel)
Et ensuite faire des requêtes en Sql ordinaire (en A2 puis bouton 'Bilan'), 2 exemples basiques dans la démo.
Dans cette démo, on peut copier/coller les feuilles pour avoir une requête par feuille (autant de fois que nécessaire).
Pierre
Bonjour,
Ce fichier fonctionne parfaitement bien
En plus, 'il est très rapide.
Je vais aussi regarder cela de plus près.
Merci
Ok, alors si ça te plait voici une suite.
Dans ce fichier, il y a un onglet supplémentaire "Mois" (ton tableau en fait) dans lequel on peut choisir le mois et l'année.
Quand on change le mois ou l'année ou suite à un clic sur le bouton de mise à jour, la base est interrogée et le tableau est complété.
A noter, si un code n'est pas trouvé dans la liste c'est la dernière ligne qui est incrémentée.
On peut bien sûr compléter la liste (tout en laissant une dernière ligne sans codes au cas où)
Est-ce que j'ai bon?
Pierre
Pas mal du tout.
Je dois par contre effacer A1 pour effectuer l’acquisition du mois suivant.
Je pensais aussi avoir une feuille par mois pour effectuer des comparaisons voir quel produit progresse ou régresse.
Mais ce que vous avez fait est 200 fois mieux que ce que j'aurai pu écrire.
Merci à vous deux pour avoir pris le temps.
Bonjour à tous,
Je dois par contre effacer A1 pour effectuer l’acquisition du mois suivant.
Si on pointe sur le dossier Parent "2019" et non sur le sous-dossier "2019-01" (ou autre mois), il n'est plus nécessaire d'effacer le chemin en A1.
Ou si on veut à chaque fois avoir le choix de pointer sur un dossier, il suffit d'effacer la ligne
Sheets(1).Range("A1") = rep
au début de la procédure "Acquisition"
Content que ça te soit utile
Pierre
Hello,
En pointant un dossier parent [2019] pour avoir les sous dossiers [2019 01] et [2019 02] la BDD reste vide...
Il me faut sélectionner le sous dossier qui contient les feuilles journalière.