Macro .csv

sallandm

XLDnaute Nouveau
Bonjour à tous,


Toujours content de revenir sur ce forum sympa….

je sollicite votre aide pour extraire des données d’un fichier .csv (je n'ai pas pu joindre le fichier .csv mais j'ai mis la version excel de celui ci !)


J’ai un équipement de mesure qui ajoute une ligne dans un fichier .csv (séparation par des virgules) à chaque fois que je lance une mesure.

Sur chaque nouvelle ligne, les données sont : date, heure, data1, data2, data3, data4, data5 (7 données)

Les données sont enregistrées de la ligne 9 à ….. (voir fichier attaché)


L’objectif serait de créer une macro qui :

  • Appelle le fichier.csv
  • Extrait les dernières données enregistrées (la derniere ligne)
  • Envoi ces données dans un fichier excel (dans 7 cellules differentes)

Est-ce que vous pouvez m’aider ?


Merci
 

Pièces jointes

  • D8580 planeité.xlsx
    9.8 KB · Affichages: 21

Robert

XLDnaute Barbatruc
Repose en paix
Bonjour,

Pas clair !
Dans ton exemple il y a 13 données séparées par une virgule. Deux vides, la date, l'heure et 9 données.
Tu veux enregistrer quoi au juste :
- tout (date, heure et 9 données)
- que les 9 données (sans la date et l'heure)
- les 7 premières données (sans la date et l'heure)
Le fichier destination est où ?
 

sallandm

XLDnaute Nouveau
Bonjour !

Merci pour vos commentaires.. effectivement, c'est pas clair !
je souhaite récuperer les 9 données et la date (tout sauf l'heure en fait !)
Le site m'empeche de charger un fichier .csv mais je mets une image.
le fichier destination sera un fichier excel avec d'autres données déjà à l'interieur. La macro sera dans ce fichier (ce sera un fichier "type" et l'operateur fera un "save as " . Le fichier source restera intact.


J'espère que je suis plus clair ... ;)

Matthieu
 

Pièces jointes

  • Capture.JPG
    Capture.JPG
    100.2 KB · Affichages: 27

sallandm

XLDnaute Nouveau
Bonjour à tous,
Voici donc le fichier .csv en version zippée.
L'idée est donc de transférer la date et les 9 données de la dernières lignes (ici les der nières valeurs ajoutées sont en ligne 14 mais ça aurait pu etre la 10 ... ) dans l'autre fichier joint aux emplacements suivants:
- en cellule S55 pour la date
- en cellules M22 à U22 pour les 9 données de mesure
Il faudrait donc que la macro soit dans ce deuxième fichier. L'idée est de cliquer sur un bouton et de lancer la récuopération des données.

Merci pour votre patience!!

Matthieu
 

Pièces jointes

  • Files.zip
    481 bytes · Affichages: 23
  • AS9617A-27 ed04 Mechanical measurement report.xls
    405 KB · Affichages: 20

Staple1600

XLDnaute Barbatruc
Bonsoir le fil, le forum

@sallandm
Quand je le lis ceci dans un fichier Excel:
This document and related information are Microsemi MPMP property; do not reproduce or transmit without Microsemi MPMP approval

Je suis soulagé ne pas être le salarié de cette entreprise..:)

Pour ce qui est la question, j'ai testé cette macro avec les PJ
(et si j'ai bien compris ce qu'il faut faire, cela semble donc OK)
VB:
Sub Test_CSV()
Dim strPath$, vCSV As Workbook, vFld, Lig&, vDate, vDatas As Range
strPath = "C:\D8580 planeité.csv" '<= adapter le nom du chemin où se trouve le *.csv

vFld = _
Array(Array(1, 1), Array(2, 1), Array(3, 4), Array(4, 1), Array(5, 1), Array(6, 1), Array(7, 1), _
Array(8, 1), Array(9, 1), Array(10, 1), Array(11, 1), Array(12, 1), Array(13, 1), Array(14, 1))

With Application
    .ScreenUpdating = 0
    
Workbooks.OpenText Filename:=strPath, Origin:=2, StartRow:=6, DataType:=1, Comma:=-1, FieldInfo:=vFld, DecimalSeparator:="."
Set vCSV = ActiveWorkbook

    .DisplayAlerts = False
    Lig = .Match(.Max([C:C]), [C:C], 0)
    vDate = .Cells(Lig, "C")
    Set vDatas = .Cells(Lig, "C").Offset(, 2).Resize(, 9)
End With
'NB:adapter ici le nom de la feuille
ThisWorkbook.Sheets(1).[S55] = vDate
ThisWorkbook.Sheets(1).[M22:U22] = vDatas.Value
vCSV.Close False
End Sub
 
Dernière édition:

sallandm

XLDnaute Nouveau
Bonjour,

Merci Staple1600 pour cette macro ! ca à l'air de très bien marcher !!!
Et pas d'inquietude pour la confidentialité, c'est une phrase qu'on met partout mais il n'y a rien de confidentiel ici !

Encore merci a tous !!!!
 

sallandm

XLDnaute Nouveau
Bonjour,

Je viens de tester la macro après avoir rajouter une série de données et les macro ne me récupère pas la dernière ligne remplie mais celle d'avant...
Pour etre plus clair:
la macro marche bien et récupère bien les données de la cellule A7 (et c'est ce que je veux tant que la celulle A8 reste vide) mais dès que la celulle A8, je souhaite que la macro me récupère les données presentes en A8 (et plus celles en A7)

Est ce que vous pouvez m'aider?

Merci
 

Pièces jointes

  • Prog 1 _ Planéités, hauteurs et parallelisme D8580x.zip
    332 bytes · Affichages: 13

Staple1600

XLDnaute Barbatruc
Bonsoir le fil, le forum

A tester sous toutes les coutures
VB:
Sub Test_CSV_II()
Dim strPath$, vCSV As Workbook, vFld, Lig&, Fin&, vDate, vDatas As Range
strPath = "C:\Users\D8580x.csv" '<= adapter le nom du chemin où se trouve le *.csv
vFld = _
Array(Array(1, 1), Array(2, 1), Array(3, 4), Array(4, 1), Array(5, 1), Array(6, 1), Array(7, 1), _
Array(8, 1), Array(9, 1), Array(10, 1), Array(11, 1), Array(12, 1), Array(13, 1), Array(14, 1))
With Application
    .ScreenUpdating = 0
Workbooks.OpenText Filename:=strPath, Origin:=2, StartRow:=6, DataType:=1, Comma:=-1, FieldInfo:=vFld, DecimalSeparator:="."
Set vCSV = ActiveWorkbook
    .DisplayAlerts = False
    Lig = .Match(.Max([C:C]), [C:C], 0)
    vDate = .Cells(Lig, "C")
    Fin = .Cells(Rows.Count, "C").End(xlUp).Row
    Set vDatas = Range(.Cells(Lig, "C"), .Cells(Fin, "C")).Offset(, 2).Resize(, 9)
End With
'NB:adapter ici le nom de la feuille
ThisWorkbook.Sheets(1).[S55] = vDate
ThisWorkbook.Sheets(1).[M22:U22].Resize(Fin + 1 - Lig) = vDatas.Value
vCSV.Close False
End Sub
 

sallandm

XLDnaute Nouveau
Bonjour ,

Merci pour ta réponse staple1600 !!

Ca marche bien , je récupère bien les 9 valeurs et elles sont bien mises en ligne 22
J'aimerai aller un peu plus loin (mais je sais que ça abuse un peu ... désolé....) car finalement j'ai pas 9 valeurs à récupérer mais 45 et j'aimerai qu'elles soient renvoyer comme suit
- les 3ème, 8éme, 13ème, 18ème, 23ème, 28éme, 33ème, 38ème et 43ème données soient mises en cellule M20, N20, O20, P20, Q20, R20, S20, T20 et U20
- les 4ème, 9éme, 14ème, 19ème, 24ème, 29éme, 34ème, 39ème et 44ème données soit mise en cellule M12, N12, O12, P12, Q12, R12, S12, T12 et U12
- les 5ème, 10éme, 15ème, 20ème, 25ème, 30éme, 35ème, 40ème et 45ème données soit mise en cellule M23, N23, O23, P23, Q23, R23, S23, T23 et U23
- les 6ème, 11éme, 16ème, 21ème, 26ème, 31éme, 36ème, 41ème et 46ème données soit mise en cellule M22, N22, O22, P22, Q22, R22, S22, T22 et U22
- les 7ème, 12éme, 17ème, 22ème, 27ème, 32éme, 37ème, 42ème et 47ème données soit mise en cellule M24, N24, O24, P24, Q24, R24, S24, T24 et U24

Encore merci pour ton aide

Matthieu
 

Pièces jointes

  • D8580x hauteur, planeité et parallelisme.zip
    623 bytes · Affichages: 14

Staple1600

XLDnaute Barbatruc
Bonsoir le fil, le forum

Bonjour ,
Merci pour ta réponse staple1600 !!
Ca marche bien , je récupère bien les 9 valeurs et elles sont bien mises en ligne 22
J'aimerai aller un peu plus loin (mais je sais que ça abuse un peu ... désolé....) car finalement j'ai pas 9 valeurs à récupérer mais 45
Tiens cela ressemble à une question à tiroirs
Or depuis mon enfance, j'ai une phobie des tiroirs ;)
Subséquemment, pour préserver ma santé, je suis obligé de stopper net le suivi de ce fil.

NB: Cela aurait été différent si dès le premier message, le problème avait été clairement posé dans son entièreté...:rolleyes:
 

Discussions similaires

Statistiques des forums

Discussions
312 492
Messages
2 088 936
Membres
103 987
dernier inscrit
Doctami