Moyenne de fichiers scv à récupérer dans tableur

Fermé
emcherrier Messages postés 4 Date d'inscription dimanche 1 mai 2016 Statut Membre Dernière intervention 3 mai 2016 - 1 mai 2016 à 20:05
 emcherrier - 10 mai 2016 à 12:17
Bonsoir,
Je parcours depuis quelques jours tous les forums VBA, je n'arrive pas à trouver une astuce qui répondrait à ma problématique.
J'ai une machine qui me génère 1 fichier scv toutes les 2 heures. j'aurais besoin de faire des courbes sur les moyennes sur 1 semaine, voir 1 mois.
J'ai trouvé et modifié une appli VBA qui me convertit tous les fichiers scv en xls;
mais il faudrait que je récupère la moyenne de 5 colonnes de chaque fichier pour les intégrer dans un tableau récapitulatif ...
Toute aide, idée serait la bienvenue ...
A voir également:

7 réponses

f894009 Messages postés 17191 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 20 mai 2024 1 707
2 mai 2016 à 09:29
0
emcherrier Messages postés 4 Date d'inscription dimanche 1 mai 2016 Statut Membre Dernière intervention 3 mai 2016
2 mai 2016 à 12:47
Merci f894009 pour le lien vers macro formule moyenne ...
Malheureusement ce n'est pas si simple, car il faut que "l'appli" VBA effectue dans chacun des fichiers (1 fichier scv généré toutes les 2 heures; environ 250 fichiers à traiter) 5 moyennes (5 colonnes (C, K, T, Z, AG)) de la ligne 45 à la ligne 11677 à calculer ... copier ces valeurs et les coller dans un nouveau tableur, 5 cellules juxtaposées en ligne par fichier traité ... donc le tableur "recap" devrait comporter autant de lignes que de fichiers traités ...
J'ai déjà "l'appli" pour convertir les scv en xls, mais elle "renomme" l'onglet comme le nom du fichier; et là également ça me pose problème ...
Donc toute aide, et tous conseil fortement bienvenus ;-)
0
Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 776
2 mai 2016 à 13:09
Bonjour,

Sans les fichiers, il est difficile d'aller au-delà des réponses déjà données !!!
Mets tes fichiers, celui avec la macro et un csv, sur https://www.cjoint.com/ et donnes les deux liens obtenus dans ton prochain message.
https://www.commentcamarche.net/faq/29493-utiliser-cjoint-pour-heberger-des-fichiers#q=cjoint&cur=2&url=%2F

Patrice
0
emcherrier Messages postés 4 Date d'inscription dimanche 1 mai 2016 Statut Membre Dernière intervention 3 mai 2016 > Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023
2 mai 2016 à 17:56
Merci Patrice33740 pour votre temps;
le fichier scv
https://www.cjoint.com/c/FEcpZxrRkY3
le fichier xls converti
http://www.cjoint.com/c/FEcp1E6Y4V3
et enfin mon fichier récap
http://www.cjoint.com/c/FEcp3j02G33
A vous lire
0
f894009 Messages postés 17191 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 20 mai 2024 1 707
3 mai 2016 à 09:00
Bonjour,

J'ai déjà "l'appli" pour convertir les scv en xls, mais elle "renomme" l'onglet Ben oui, mais c'est peut-etre normale, faudrait aussi nous la mettre a dispo car il est possible de faire les calculs sans sauvegarder les fichiers en xls
0
Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 776
Modifié par Patrice33740 le 3/05/2016 à 15:14
Bonjour,

Ça manque cruellement d'explications sur la façon de traiter les informations contenues dans chaque fichier csv !

Voici une méthode à mettre dans un module standard du fichier recap :
Option Explicit
Option Private Module
Public Sub Ouvrir_csv()
' Ouverture d'un fichier csv
' 03/05/16    Patrice
'
'Adresses des informations du fichier csv
Const adrDat As String = "B2"     'Date
Const adrHre As String = "B3"     'Heure
Dim wbkCsv As Workbook            'Fichier csv
Dim rowRec As Range               'Ligne du fichier recap
Dim strRep As String              'Répertoire des fichiers csv
Dim strNom As String              'Nom du fichier csv

  'Pour la feuille récap :
  With ThisWorkbook.Worksheets(1)
    '- définir la 1° ligne de destination des informations
    Set rowRec = .Rows(3)
    '- effacer les informations précedentes
    rowRec.Resize(.UsedRange.Rows.Count).ClearContents
  End With
  'Répertoire csv et nom du premier fichier
  strRep = ThisWorkbook.Path & "/Csv/"
  strNom = Dir(strRep & "*.csv")
  If strNom = "" Then Exit Sub
  'Arrêter l'actualisation de l'écran
  Application.ScreenUpdating = False
  'Ouvrir les fichiers csv un à un.
  Do While strNom <> ""
    Set wbkCsv = Workbooks.Open(Filename:=strRep & strNom, _
                                Format:=2, local:=False)
    'Pour la feuille ouverte :
    With wbkCsv.Worksheets(1)
      '- mettre en place les informations
      rowRec.Cells(1, "A").Value = .Range(adrDat).Value
      rowRec.Cells(1, "B").Value = .Range(adrHre).Value
      ' ...
      ' ...
      ' ...
    End With
    wbkCsv.Close False
    strNom = Dir                    ' fichier suivant
    Set rowRec = rowRec.Offset(1)   ' ligne suivante
  Loop
  'Rétablir l'actualisation de l'écran
  Application.ScreenUpdating = True
End Sub




Cordialement
Patrice
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
emcherrier Messages postés 4 Date d'inscription dimanche 1 mai 2016 Statut Membre Dernière intervention 3 mai 2016
3 mai 2016 à 19:02
Merci Patrice33740

Ci-dessous la macro utilisée pour la conversion scv en xls

Sub try()
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Dim myPath As String, myFile As String, aa As String

myPath = ThisWorkbook.Path
myFile = Dir(myPath & "\*.csv")

c = 1
Do Until myFile = ""
aa = Mid(myFile, 1, Len(myFile) - 4)
Workbooks.Open Filename:=myPath & "\" & myFile
ActiveWorkbook.SaveAs Filename:=myPath & "\" & aa & ".xls", FileFormat:=xlExcel8
ActiveWorkbook.Close
myFile = Dir
c = c + 1
Loop
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub

Mon soucis est qu'ensuite je dois faire la moyenne de 5 colonnes, récupérer ces 5 valeurs de chaque fichier pour les incorporer dans un fichier récap.

La macro que tu proposes ne solutionne pas complétement ma problématique ...
Soit je pars des fichiers xls convertis, et via une autre macro je fais calculer les moyennes des 5 plages de chaque fichier: soucis principal, le convertisseur scv-xls a dans la moulinette renommé l'onglet au nom du fichier (il y a en 250 à traiter);
Soit je repars des fichiers originaux scv pour récupérer les données, faire 5 moyennes par fichier et incorporer dans un fichier recap ...
Bref mon pbm n'est pas simple; et pour couronner le tout je débute en VBA ;-)
Bref merci pour le coup de main ...
0
Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 776
5 mai 2016 à 10:19
Bonjour,

Je ne vois pas où est le problème,dans la macro que je t'ai proposé le nom de l'onglet n'a aucune importance ! Les données sont directement écrites depuis le fichier csv ouvert dans Excel vers le fichier Recap, il est totalement inutile d'enregistrer les fichiers convertis !
Par contre tu ne précises pas comment on détermine l'emplacement des données dont il faut faire la moyenne, c'est pourquoi j'ai mis des '... dans la macro !
0
emcherrier > Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023
6 mai 2016 à 10:26
Bonjour Patrice,
C'est vraiment cool le temps que tu prends pour m'aider.
En fait:
- il faut récupérer les données à partir de la ligne 46, jusqu'à la ligne 11677 de chaque fichier .scv
exemple ligne 46 ci-dessous
68,6,2501,54,54,41,45,1,0,6,1029,55,55,41,2,2,0,21,6,1816,55,55,2,2,7,2130,55,55,42,12,1,7,1598,55,1,0
- prendre les 3ème, 11ème, 20ème, 26ème et 33ème valeurs (soit 2501 pour colonne 3èmes valeurs / 1029 pour colonne 11èmes valeurs / 1816 pour colonne 20èmes valeurs / 2130 pour colonne 26èmes valeurs / 1598 pour colonne 33èmes valeurs
- faire la moyenne de toutes les valeurs de la 3ème colonne, copier cette moyenne et la reporter sur la cellule ligne 1 colonne D du fichier recap.xls
- faire la moyenne de toutes les valeurs de la 11ème colonne, copier cette moyenne et la reporter sur la cellule ligne 1 colonne E, du fichier recap.xls
- faire la moyenne de toutes les valeurs de la 20ème colonne, copier cette moyenne et la reporter sur la cellule ligne 1 colonne F du fichier recap.xls
- faire la moyenne de toutes les valeurs de la 26ème colonne, copier cette moyenne et la reporter sur la cellule ligne 1 colonne G du fichier recap.xls
- faire la moyenne de toutes les valeurs de la 33ème colonne, copier cette moyenne et la reporter sur la cellule ligne 1 colonne H du fichier recap.xls
- faire ainsi pour chaque fichier scv inclus dans la directory où est situé le dichier recap.xls
- idéalement chaque ligne de la colonne A du fichier recap.xls pourrait comporter le nom du fichier scv "traité";
- la colonne B la copie de la cellule 2:A (date) du fichier scv traité
- la colonne C la copie de la cellule 3:A (heure) du fichier scv traité
Je te (ou vous) suis d'une grande reconnaissance si tu (vous) me donner des pistes pour résoudre cet épineuse problématique ...
Cordialement
0
Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 776
6 mai 2016 à 23:24
Bonjour,

Tes explications ne sont pas très limpides et peut-être erronées !

Quand je regardes le fichier exemple que tu as fourni, les données de la ligne 46 ne correspondent pas !

Si j'ai bien compris la structure de ce fichier csv, dans ce cas il faut mettre la moyenne des données de la 3° colonne (TF1) en C, celle de 11° (NRJ12) en K, celle de la 26° (TMC) en T, celle de la 20° (NT1) en Z et celle de la 33° (LCP) en AG

En réalité le titre de la colonne est indiqué dans l'en-tête, lignes 10 à 40, par l'info PCR:

En espérant que tous les fichiers ont le même type d'en-tête, voici ton fichier en retour avec un code qui analyse cet en-tête :
https://www.cjoint.com/c/FEgvtyIRESX
0
Bonsoir Patrice,
Je te remercie encore pour le temps que tu prends.
Je pense que tu as bien compris la problématique:
Oui je souhaite récupérer les valeurs de PCR de chaque ligne, de chaque colonne des fichiers csv et en faire la moyenne.
Oui le "header" est en ligne 44, et les valeurs sont toujours de la ligne 46 à 11677.
Quand j'ouvre le fichier xlsm que tu m'as gentiment préparé, j'ai bien exactement ce que je souhaite (tu as même préparé un graphique !)
Par contre quand je selectionne la fonction, la macro semble s'éxécuter mais s'arrête à l'éffacement des données que tu avais affiché ...
J'ai crée un seul directory dans C avec le fichier xlsm et 7 fichiers csv seulement pour tester; mais hélas, aucune données moyennes ne s'affiche ...
Je pense que j'ai raté un épisode ...
Merci de ton aide, je pense que tu es trés proche d'une solution qui je suis sur me facilitera ENORMEMENT la tâche ;-)
Bonne fin de WE.
Cordialement
0
Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 776
8 mai 2016 à 19:33
Bonjour,

Le graphique c'est toi qui l'a crée, je n'ai fait qu'ajouter la macro dans le fichier exemple que tu as fourni !

La macro s'arrête car elle ne trouve pas les fichier csv :
1. mets le fichier récap dans le répertoire que tu veux.
2. dans ce répertoire, crée un dossier (un sous-répertoire) nommé Csv
3. mets tous les fichiers csv à analyser dans ce dossier Csv.
0
Bonjour Patrice,
Je n'avais pas vu ta réponse (que je guettais pourtant avec "impatience") ;-)
C'EST IMPECCABLE et fonctionne comme souhaité ... il faut vraiment que je me plonge à fond dans toutes ces commandes VBA, car vraiment fortes utiles ...
Si tu passes en RP mets moi un message en MP pour un petit resto ;-)
0