Recupérer données CSV pour addition
Bonjour,
pour commencer je n'ai aucune compétence en programmation de macro sous excel... ce qui ne facilite pas les choses...
Je vous explique la situation: j'ai une machine outils pour fabriquer des pièces qui me crée tous les jours un fichier .csv avec
des informations sur les pièces machiné dans la journée, nbre de pièce total, temps de machinage,...donc 1 fichier par jour.
maintenant mon patron me demande si c'est possible d'additionner les nbres de pièces et les temps de machinage rapidement
en partant des fichiers .csv
le souci c'est que j'en ai plus de 400 alors de les passer 1 à 1 c'est un peu long et pas très productif...
Est-ce que quelqu'un pourrait me mettre sur un piste a suivre pour y arriver?
il me faudrait additionner tous les "quantité totale" de chaque fichier (sachant que suivant le nombre de pièce différente faite dans la journée la cellule n'est par forcément la meme mais toujours dans la colonne C)
il me faudrait aussi additionner tous les "T totale" de chaque fichier et de chaque ligne (sachant que le nbr de "T totale" est variable suivant le nbr de pièce machiné)
Merci d'avance
Bonsoir,
Regarde si cela te convient. Il te faut adapter le chemin du dossier où se trouvent tes fichiers. Une fois cette modif effectuée, tu appuis sur F5 pour lancer le code. Fais attention que la feuille active du classeur de récup (celui où tu mets ce code) soit vide :
Sub Totaliser()
Dim TblFichiers() As String
Dim Ligne As String
Dim I As Long
Dim J As Long
Dim K As Integer
Dim L As Integer
'récupère les fichiers, --> adapter le chemin du dossier
'à la place de "D:\Dossier1\" (ne pas toucher au reste et mettre 1 \ à la fin)
TblFichiers = RecupFichiers("D:\Dossier1\", "*", ".csv")
'boucle sur les fichiers
For K = 1 To UBound(TblFichiers)
'les ouvre en lecture
Open TblFichiers(K) For Input As #1
Do While Not EOF(1)
'récupère la ligne entière
Line Input #1, Ligne
I = I + 1
'recherche le mot "Quantité totale" en colonne C puisqu'elle ne varie pas
'si trouvé, donne la valeur de I à J afin de récupérer la valeur située à la
'ligne suivante
If Split(Ligne, ";")(2) = "Quantité totale" Then
J = I
End If
'récupère les valeurs de la ligne des totaux ainsi que le nom du fichier (à virer si pas utile)
'et les inscris dans la feuille active à partir de A1, B1 et C1
If I = J + 1 And J > 0 Then
L = L + 1
Cells(L, 1) = Dir(TblFichiers(K))
Cells(L, 2) = Split(Ligne, ";")(1)
Cells(L, 3) = Split(Ligne, ";")(2)
End If
Loop
Close #1
Next K
'une fois tous les fichiers passés, inscrit les formules deux lignes au dessous des valeurs
Cells(L + 2, 2) = "Total :"
Cells(L + 2, 2).Formula = "=SUM(B1:B" & L & ")"
Cells(L + 2, 3).Formula = "=SUM(C1:C" & L & ")"
End Sub
Function RecupFichiers(Chemin As String, _
Racine As String, _
Ext As String) As String()
Dim TableauFichiers() As String
Dim Fichier As String
Dim I As Integer
'boucle dans le dossier jusqu'à la fin des fichiers et rempli le tableau
Fichier = Dir(Chemin & Racine & Ext)
Do While (Len(Fichier) > 0)
I = I + 1
ReDim Preserve TableauFichiers(1 To I)
TableauFichiers(I) = Chemin & Fichier
Fichier = Dir()
Loop
RecupFichiers = TableauFichiers()
End FunctionHervé.
Salut Douis, Salut Hervé,
Comme je me suis également penché sur le sujet et que mon approche est peut-être plus simple à mettre en place – il ne faut rien adapter, puisque Douis indique ne pas connaître grand-chose aux macros – je me permets de vous soumettre également ma solution.
Il suffit de placer le fichier ci-joint dans le même dossier que les fichiers .csv à additionner et de cliquer sur le bouton en place.
J’ai donc compris que l’on ne pouvait pas utiliser le total inscrit au fond de la colonne B de chaque fichier .csv, mais qu’il fallait refaire le total de la colonne G de ces mêmes fichiers. Est-ce bien correct ?douis a écrit :il me faudrait aussi additionner tous les "T totale" de chaque fichier ET DE CHAQUE LIGNE
Cordialement.
oui c'est bien correct pour le total, il faut additionner la colonne G et pas le T totale qui est en bas à gauche.
je vais essayer tout ça ce matin!
je vous tiens au courant dès que j'ai pu faire quelque chose.
En tout cas merci pour la réactivité
WAW! parfait! excellent le fichier base.xls!
Un grand merci j'en demandais pas tant!
a+ et encore merci
Juste une question : En fonction du plus grand nombre de fichiers que tu traites en une fois, quelle est la durée de traitement ?
Cordialement.
pour 220 fichier qui correspond à 1 an de données, cela prend environ 1min30
Ok, merci pour ta réponse.
Bonne continuation.