Microsoft 365 Décompte via plusieurs fichiers CSV

lolo_excelbeginner

XLDnaute Nouveau
Bonjour à tous,

Je vais tenter d'exposer mon problème,

Je souhaite créer un fichier Excel, calculant la totalité de certains articles consommés dont les quantités sont disponibles dans des fichiers csv. (voir images)

Pour cela je cherche donc ouvrir 1 par 1 mes fichiers csv, et à tester chaque ligne pour trouver sa correspondance dans mon fichier final et incrémenter la quantité dans mon fichier final.

J'ai pour cela écrit 2 petites macro mais elles ne fonctionnent pas...

Sub Transfert(Fichier)
Dim MonFichier As Workbook 'Fichier dans lequel on importe les données
Set MonFichier = ThisWorkbook
With Workbooks(Fichier)
With .ActiveSheet
For i = 1 To 200
x = Application.Match(.Cells(i, 1), MonFichier.Range("A45:A806"), 0)
If IsError(x) Then
GoTo suite
Else: Debug.Print i, .Cells(i, 1), x
MonFichier.Cells(x, 5).Value = .Cells(i, 2).Value + MonFichier.Cells(x, 5).Value
suite:
.Close
End With
End If
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub

Sub DQE()
Dim Fichier As Workbook 'déclare la variable Fichier (Fichier où on exporte les données)
Fichier = Application.GetOpenFilename(MultiSelect:=True)

If Fichier = "Faux" Then
Exit Sub
Else
Workbooks.Open (Fichier)
End If
var_nomfichier = Dir(Fichier) 'on recupere le nom du fichier à partir de son chemin comple

Do While Fichier <> "" 'boucle tant qu'il existe des fichiers F
Workbooks.Open (Fichier)
Transfert (Fichier)
Fichier = Dir 'classeur suivant
Loop 'boucle
MsgBox "Traitement terminé"
End Sub


Saurez-vous m'aider ??

Cordialement,

LOLO
 

Pièces jointes

  • Fichier_csv.PNG
    Fichier_csv.PNG
    14.5 KB · Affichages: 16
  • Fichier_Final.PNG
    Fichier_Final.PNG
    11.9 KB · Affichages: 18
Dernière édition:
Solution
Dans Excel tu vas dans données/ obtenir des données/a partir d'un fichier/a partir d'un dossier
1687187354025.png


Un fois que tu es là tu pointe sur le répertoire avec tous tes fichiers CSV et tu cliques sur "Ouvrir".

Tous les fichiers qui sont dans le repertoire vont être affiché.

Si tu veux tous les compiler tu peux cliquer sur "Combiner/Combiner et transformer les données"

Sélectionne la colonne avec les codes articles "puis regrouper par"
1687187666796.png


Puis tu choisis de regrouper par Code article, tu nommes le nom de colonne, si je comprends bien ta demande dans Opération tu mets Somme et dans colonne "les quantités"

En principe tu auras fait 95% du travail.

Si tu ajoutes un fichier CSV dans le repertoire, tu as juste a cliquer...

lolo_excelbeginner

XLDnaute Nouveau
Bonjour lolo_excelbeginner,
Si tout tes csv sont stockés au meme endroit, le plus simple est probablement de passer par PowerQuery qui est inclu dans ta version d'Excel
Bonjour WTF,

Malheureusement je n'ai jamais utilisé PowerQuery et ne sais absolument comment cela fonctionne et encore obtenir ce que je souhaiterais obtenir..

J'ai tenté de regarder si je pouvais obtenir quelque chose sur PowerQuery suite à ton message mais je suis complètement perdu..

Merci malgré tout !
 
Dernière édition:

WTF

XLDnaute Impliqué
Dans Excel tu vas dans données/ obtenir des données/a partir d'un fichier/a partir d'un dossier
1687187354025.png


Un fois que tu es là tu pointe sur le répertoire avec tous tes fichiers CSV et tu cliques sur "Ouvrir".

Tous les fichiers qui sont dans le repertoire vont être affiché.

Si tu veux tous les compiler tu peux cliquer sur "Combiner/Combiner et transformer les données"

Sélectionne la colonne avec les codes articles "puis regrouper par"
1687187666796.png


Puis tu choisis de regrouper par Code article, tu nommes le nom de colonne, si je comprends bien ta demande dans Opération tu mets Somme et dans colonne "les quantités"

En principe tu auras fait 95% du travail.

Si tu ajoutes un fichier CSV dans le repertoire, tu as juste a cliquer sur données/actualiser de ton fichier excel pour tt mettre à jour.
 

lolo_excelbeginner

XLDnaute Nouveau
Dans Excel tu vas dans données/ obtenir des données/a partir d'un fichier/a partir d'un dossier
Regarde la pièce jointe 1172893

Un fois que tu es là tu pointe sur le répertoire avec tous tes fichiers CSV et tu cliques sur "Ouvrir".

Tous les fichiers qui sont dans le repertoire vont être affiché.

Si tu veux tous les compiler tu peux cliquer sur "Combiner/Combiner et transformer les données"

Sélectionne la colonne avec les codes articles "puis regrouper par"
Regarde la pièce jointe 1172896

Puis tu choisis de regrouper par Code article, tu nommes le nom de colonne, si je comprends bien ta demande dans Opération tu mets Somme et dans colonne "les quantités"

En principe tu auras fait 95% du travail.

Si tu ajoutes un fichier CSV dans le repertoire, tu as juste a cliquer sur données/actualiser de ton fichier excel pour tt mettre à jour.
Merci de ton retour,

Je vais essayer ça merci.

Après juste pour la progression si tu arrives arrives à trouver l'erreur dans ma macro ça m'intéresse !

Cordialement,

LOLO
 

Staple1600

XLDnaute Barbatruc
Bonsoir


En passant, avant le souper
Si je n'abuse, ici tu ne références pas le nom de la feuille, non ?
x = Application.Match(.Cells(i, 1), MonFichier.Range("A45:A806"), 0)
Peut-être est-ce là, la source de l'erreur, non ?

Dans ce petit exemple où j'indique la feuille, plus d'erreur
(Pour tester un classeur vierge avec deux feuilles nommées AAA et BBB
Lancer d'abord la macro exemple puis la macro test
Enrichi (BBcode):
Sub test()
Set MonFichier = ThisWorkbook
For i = 1 To 5
x = Application.Match(Sheets("AAA").Cells(i, 1), MonFichier.Worksheets("BBB").Range("$A$1:$A$5"), 0)
MsgBox x
Next
End Sub
Sub exemple()
Sheets("AAA").Range("A1:A5") = Application.Transpose(Array(11, 22, 33, 44, 55))
Sheets("BBB").Range("A1:A5") = Application.Transpose(Array(55, 44, 33, 22, 11))
End Sub
 

lolo_excelbeginner

XLDnaute Nouveau
Dans Excel tu vas dans données/ obtenir des données/a partir d'un fichier/a partir d'un dossier
Regarde la pièce jointe 1172893

Un fois que tu es là tu pointe sur le répertoire avec tous tes fichiers CSV et tu cliques sur "Ouvrir".

Tous les fichiers qui sont dans le repertoire vont être affiché.

Si tu veux tous les compiler tu peux cliquer sur "Combiner/Combiner et transformer les données"

Sélectionne la colonne avec les codes articles "puis regrouper par"
Regarde la pièce jointe 1172896

Puis tu choisis de regrouper par Code article, tu nommes le nom de colonne, si je comprends bien ta demande dans Opération tu mets Somme et dans colonne "les quantités"

En principe tu auras fait 95% du travail.

Si tu ajoutes un fichier CSV dans le repertoire, tu as juste a cliquer sur données/actualiser de ton fichier excel pour tt mettre à jour.
Bonjour WTF,

Encore merci de ta réponse, j'ai quasiment pu faire ce que je voulais faire!
Dernier petit point pour essayer de remettre mes données dans mon fichier principal, j'essaye de faire un rechercheV avec les données obtenues par Power Query. Problème je ne parviens pas à comparer les données... par exemple l'article "1101" de Power Query et différent du "1101" de ma feuille Excel, je ne comprends pas pourquoi ?... Le format de cellule est bien le même pourtant...

Aurais-tu une solution ?

Cordialement,

LOLO
 

lolo_excelbeginner

XLDnaute Nouveau
Bonsoir


En passant, avant le souper
Si je n'abuse, ici tu ne références pas le nom de la feuille, non ?
x = Application.Match(.Cells(i, 1), MonFichier.Range("A45:A806"), 0)
Peut-être est-ce là, la source de l'erreur, non ?

Dans ce petit exemple où j'indique la feuille, plus d'erreur
(Pour tester un classeur vierge avec deux feuilles nommées AAA et BBB
Lancer d'abord la macro exemple puis la macro test
Enrichi (BBcode):
Sub test()
Set MonFichier = ThisWorkbook
For i = 1 To 5
x = Application.Match(Sheets("AAA").Cells(i, 1), MonFichier.Worksheets("BBB").Range("$A$1:$A$5"), 0)
MsgBox x
Next
End Sub
Sub exemple()
Sheets("AAA").Range("A1:A5") = Application.Transpose(Array(11, 22, 33, 44, 55))
Sheets("BBB").Range("A1:A5") = Application.Transpose(Array(55, 44, 33, 22, 11))
End Sub
Bonjour Stapple 1600,

Merci de ta réponse! Malheureusment j'ai une centaine de csv à ouvrir, c'est pour cela que dans ma macro, j'ai essayé d'inclure un "MultiSelect", mais je ne parviens pas à le gérer, je pense que le problème vient de là..

Ma ligne "Fichier = Application.GetOpenFilename(MultiSelect:=True)" ne fonctionne pas, je ne sais pas pourquoi ...

Cordialement,

LOLO
 
Dernière édition:

Cousinhub

XLDnaute Barbatruc
Inactif
Bonjour,
Le problème vient sans doute du typage de données...
Lorsque tu sélectionnes la colonne contenant cette valeur, tu as un menu déroulant "Type de données" dans le ruban "Accueil" de l'éditeur PQ.
Peut-être qu'en passant en "Nombre entier", il retrouvera ses petits?
PQ peut également effectuer cette recherche en interne, sans formule, donc sans charger les fichiers csv dans ton fichier xlsx
Par contre, si tu n'y arrives pas, il va te falloir joindre 1 fichier exemple .csv et 1 fichier exemple de ton xlsx...
Bonne journée
 

lolo_excelbeginner

XLDnaute Nouveau
Bonjour,
Le problème vient sans doute du typage de données...
Lorsque tu sélectionnes la colonne contenant cette valeur, tu as un menu déroulant "Type de données" dans le ruban "Accueil" de l'éditeur PQ.
Peut-être qu'en passant en "Nombre entier", il retrouvera ses petits?
PQ peut également effectuer cette recherche en interne, sans formule, donc sans charger les fichiers csv dans ton fichier xlsx
Par contre, si tu n'y arrives pas, il va te falloir joindre 1 fichier exemple .csv et 1 fichier exemple de ton xlsx...
Bonne journée
Bonjour Cousinhub,

Merci de ton retour !
Effectivement cela fonctionne en passant en "Nombre entier" merci !

Juste une dernière petite question. Je souhaiterais que pour la valeur "10001" j'ai une moyenne plutôt qu'une somme, est-ce possible ? et je souhaiterais également supprimer la ligne 0 et ne pas avoir à le refaire systématiquement si j'actualise mon dossier de données, est-ce possible via de requêtes ?

Cordialement,

LOLO
 

Pièces jointes

  • 1687243761736.png
    1687243761736.png
    12.5 KB · Affichages: 16

Cousinhub

XLDnaute Barbatruc
Inactif
Re-,
Avec le type de fichiers que tu mets en pièce jointe, je ne vois que Photoshop pour le faire...
Tu as donc une centaine de fichiers csv à traiter... -> OK
Tu voudrais en sortir des infos -> Lesquelles?
Parfois des moyennes, parfois des ???
Qu'y a-t-il dans ton fichier Excel devant récupérer ces infos?
Bref, sans fichier joint (2 csv anonymisés + ton fichier xl anonymisé), ça va pas être simple..
 

WTF

XLDnaute Impliqué
Bonjour WTF,

Encore merci de ta réponse, j'ai quasiment pu faire ce que je voulais faire!
Dernier petit point pour essayer de remettre mes données dans mon fichier principal, j'essaye de faire un rechercheV avec les données obtenues par Power Query. Problème je ne parviens pas à comparer les données... par exemple l'article "1101" de Power Query et différent du "1101" de ma feuille Excel, je ne comprends pas pourquoi ?... Le format de cellule est bien le même pourtant...

Aurais-tu une solution ?

Cordialement,

LOLO
Contents que tu soit presque au bout et que cela fonctionne.
Pour ton sujet de rechercheV, peut être que dans l'une des 2 feuilles l'information est considérée comme du texte et dans l'autre comme un chiffre. Difficile de te répondre sans les données.

Petite astuce : tu peux faire x1 dans ta formule à chaque fois que tu rencontre ton code article, cela le transformera en chiffre automatiquement (ne fonctionne pas si tu as des codes alpha-numériques)
 

WTF

XLDnaute Impliqué
Bonjour Cousinhub,

Merci de ton retour !
Effectivement cela fonctionne en passant en "Nombre entier" merci !

Juste une dernière petite question. Je souhaiterais que pour la valeur "10001" j'ai une moyenne plutôt qu'une somme, est-ce possible ? et je souhaiterais également supprimer la ligne 0 et ne pas avoir à le refaire systématiquement si j'actualise mon dossier de données, est-ce possible via de requêtes ?

Cordialement,

LOLO
Dans l'éditeur PQ, tu peux faire des filtres qui s'appliquerons dans tes données.
Par exemple si tu fais un filtre en enlevant les cellules vides ou celles qui sont à 0, elles n'apparaitrons plus dans ton fichier de données.
 

Discussions similaires

  • Question
Microsoft 365 Code VBA
Réponses
10
Affichages
747

Membres actuellement en ligne

Aucun membre en ligne actuellement.

Statistiques des forums

Discussions
315 087
Messages
2 116 084
Membres
112 655
dernier inscrit
fannycordi