• Initiateur de la discussion Initiateur de la discussion sallandm
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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

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ù ?
 
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: 33
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

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:
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

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
 
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

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é...🙄
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
3
Affichages
1 K
Réponses
11
Affichages
2 K
Réponses
1
Affichages
972
Retour