Mettre en colonne un fichier avec plusieurs lignes
Bonjour
Je dispose d'un fichier qui contient des lignes avec une date + une heure puis 6 valeurs qui correspondent à la valeur moyenne d'un capteur pendant les 6x 10 minutes de l'heure concernée
Les données sont ainsi
2012/12/12 03:00:00;43;43;54;65;2;43
2012/12/12 04:00:00;53;46;87;23;12;4
2012/12/12 05:00:00;3;76;14;23;32;56
avec une date par heure dans la première cellule puis 6 cellules contenant les données des 10n de minutes suivantes
Je souhaite pouvoir afficher et traiter mes données et j'ai donc besoin de la mettre comme ceci en colonne :
2012/12/12 03:00:00;43
2012/12/12 03:10:00;43
2012/12/12 03:20:00;54
2012/12/12 03:30:00;65
2012/12/12 03:40:00;2
2012/12/12 03:50:00;43
2012/12/12 04:00:00;53
2012/12/12 04:10:00;46
Avec une date par 10n de minute dans la première colonne et la valeur correspondante dans la deuxième colonne.
Comment peut on faire ce genre de chose avec Excel ?
Merci
Cross posting sauvage non apprécié quelque soit le forum ‼
Merci de mettre les liens sur chaque forum où la question a déjà été postée …
Oui c'est possible avec une présentation digne de ce nom mais il n'y a eu aucun progrès de ce côté !
Sans compter la possibilité de joindre un classeur avec une feuille source et une feuille résultat,
déjà demandé en vain sur un autre forum …
ayant été trollé sur un autre part, donc sans espoir d'avoir une réponse, je suis naturellement allé voir aillieurs pour comprendre, même si j'ai résolu mon besoin avec un autre outil.
Mais je constate que les trolleurs visitent beaucoup de forums, surement pour faire perdre encore plus de temps aux autres et permettre la réponse à plus de questions...
allé tant pis
et contre tout espoir, quelqu'un d'intelligent a répondu malgré le trollage ! merci à lui.
En espérant que la réponse rendra service à d'autres.
Tu n'as pas été clair au départ, du reste je ne suis pas le seul à t'avoir posé une question,
est-ce si difficile de répondre ?! …
T'as eu effectivement en retour une belle p'tite usine afin que tu puisses l'adapter …
Avec des précisions, tu aurais eu un code aussi efficace en bien moins d'une cinquantaine de lignes ! (trente environ)
On m'a posé des questions et j'y ai répondu...
Vous n'avez pas posé de question pour éclaircir ma question peut être mal posée
vous n'avez pas lu la question et les réponses parues avant votre arrivée
Vous avez dit que c’était un problème de débutant en suggérant une question qui ne correspondait pas à la question.
Vous avez ensuite dit moi, je moi, je moi je sais... sans donner de réponse et en redisant que c’était un truc de débutant. (a noter que l'aide que la personne m'a apporté ne me fait pas penser à un problème de débutant....)
Vous levez ici une polémique de "double forum"
Ceci est la définition même du trollage ; vous êtes surement compétent mais avant tout un trolleur. Quand on passe du temps sur un forum pour aider (ou apprendre), on aide, on ne se contente pas de dire "mouarf le .on il pose une question, quel nul !"
Désolé pour les membres de ce forums, je ne pensais pas avoir un trolleur aux pieds, je voulais juste me coucher avec une réponse à une question
Quand j'ai pris la discussion, elle s'arrêtait à la question d'Eric qui lui aussi doutait vu la présentation initiale;
j'aurais dû effectivement vérifier s'il y avait eu entre temps d'autres réponses avant de poster mon premier message …
Je n'ai jamais dit moi je sais mais ai demandé soit un complément d'information soit à défaut un classeur joint !
Encore une fois ne pas déformer mes propos …
Oui un Copier / Coller de données n'est pas compliqué, à la portée donc d'un débutant grillant une paire de neurones !
Ce n'est pas une polémique mais le cross posting sauvage est juste un usage mal vu, à bon entendeur …
Bonjour à toutes et à tous,
Bonjour le trolleur,
Code à adapter (mise en forme date!?)
Cdlt.
Option Explicit
Public Sub test()
Dim ws As Worksheet
Dim lastRow As Long, lastCol As Long, lRow As Long
Dim i As Long, j As Long
Application.ScreenUpdating = False
Set ws = ActiveWorkbook.ActiveSheet
With ws
lastRow = .Cells(Rows.Count, 1).End(xlUp).Row
lastCol = .Cells(1, Columns.Count).End(xlToLeft).Column
lRow = 1
For i = 1 To lastRow
For j = 2 To lastCol
.Cells(lRow, lastCol + 2) = .Cells(i, 1)
.Cells(lRow, lastCol + 3) = .Cells(i, j)
lRow = lRow + 1
Next j
Next i
End With
Set ws = Nothing
End SubLe "trolleur" t'informe de l'inutilité de la variable objet ws en incluant directement la feuille dans l'initialisation du With :
With ActiveWorkbook.ActiveSheet …
Bonjour Marc L,
Marc L a écrit :Cross posting sauvage non apprécié quelque soit le forum ‼
Merci de mettre les liens sur chaque forum où la question a déjà été postée …
Oui c'est possible avec une présentation digne de ce nom mais il n'y a eu aucun progrès de ce côté !
Sans compter la possibilité de joindre un classeur avec une feuille source et une feuille résultat,
déjà demandé en vain sur un autre forum …
Je n'apprécie pas non plus que plusieurs demandes identiques soient postées sur plusieurs forums simultanément, mais il n'est pas nécessaire pour autant de lui répondre aussi sèchement ... Ce n'est pas dans l'esprit de ce forum.
Marc L a écrit :Le "trolleur" t'informe de l'inutilité de la variable objet ws en incluant directement la feuille dans l'initialisation du With :
With ActiveWorkbook.ActiveSheet
Jean-Eric a pris la peine de répondre à la question posée ici, toi en revanche tu n'y as pas répondu ici (libre à toi) mais tu te permets de "critiquer gratuitement" sa réponse ... Encore une fois, ce n'est pas dans l'esprit de ce forum.
Si tu n'as pas envie de répondre de manière plus positive/courtoise sur ce forum, merci de t'abstenir ... Rappelle-toi que tu es libre de ne pas répondre aux posts qui t'énervent comme ça semble être le cas ici
Cordialement
Bonjour Sébastien !
En ce qui concerne ma réponse envers Jean-Eric, j'ai commencé par un smiley tout sourire le saluant !
C'était à titre amical, suite à son salut au "trolleur", dans chaque sens donc …
Je suis resté courtois, sans invective ni insulte, faut se détendre, faut pas s'énerver pour si peu, en tout cas je ne le suis pas …
Et c'est vrai on n'est pas obligé d'envoyer des fleurs à ceux qui abusent (j'ai été modérateur dans des forums),
faut juste me prévenir si ici c'est un forum de bobos ou de bisounours ou autres dans le même genre …
Cordialement.
Re bonjour
Merci Jean Eric pour l'exemple, il m'a été bien utile et m'a appris pleins de choses.
J'ai finalement codé ca qui marche à merveille mais je suis au final bloqué par la taille de mon lot de donnée (1.5millions de points), j'aurais du l'anticiper vu que je suis déjà fait avoir dans le passé...
Option Explicit
Sub transpose()
'mise en colonne des données
TransposeTable ThisWorkbook.Worksheets("Source"), "1colon"
End Sub
Function TransposeTable(SourceData As Object, _
Optional TargetName As String)
' Permet de reconstruire une liste de données présentée comme un tableau de résultats
' Author : Philippe Tulliez, eric4459 et Jean-Eric
' Version 1.1 (05/07/2013)
' LastDate : 30/06/2014
' Arguments
' SourceData : (Object) - Peut-être de type WorkSheet ou Range
' [TargetName] : (String) Nom de la feuille que l'on veut créer avec le résultat
' Déclaration des variables
Const ErrTitle As String = "Procédure - TransposeTable":
Dim ErrMsg As String: ErrMsg = "*** Sortie de procédure ***" & vbCrLf & vbCrLf
Dim wkbSource As Workbook, rngSource As Range, rngTarget As Range, rngTable As Range
Dim lastRow As Long
Dim PosInSource As Long, PosInTarget As Long, i As Integer
Dim DateEnCours As Date
Application.ScreenUpdating = False
' Teste les arguments
' 1er argument (SourceData)
On Error GoTo ErrorHandler
Select Case True
Case TypeOf SourceData Is Worksheet: Set rngSource = SourceData.Range("A1")
Case TypeOf SourceData Is Range: Set rngSource = SourceData
Case Else: Error 10001 ' Déclenchement d'erreur
End Select
Set wkbSource = rngSource.Worksheet.Parent
' 2ème argument (TargetName)
Select Case True
Case TypeName(TargetName) = "String"
With wkbSource
On Error Resume Next
Set rngTarget = .Worksheets(TargetName).Range("A1")
If Err Then
.Sheets.Add After:=.Sheets(.Sheets.Count)
With .Sheets(.Sheets.Count): .Name = TargetName: Set rngTarget = .Range("A1"): End With
End If
On Error GoTo 0
End With
On Error GoTo ErrorHandler
Case Else: Error 10002 ' Déclenchement d'erreur
End Select
' vérification que le nom de la feuille de sortie n'est pas le même que la source
If rngSource.Parent.Name = rngTarget.Parent.Name Then Error 10003
On Error GoTo 0
'Effacement de la sortie
If rngTarget.CurrentRegion.Count Then rngTarget.Worksheet.Cells.Clear ' Clear Cells
' desactivation de la mise a jour de l'affichage pour ne pas ralentir l'execution
Application.ScreenUpdating = False
lastRow = rngSource.Range("A1").End(xlDown).Row 'donne le nombre de lignes pleines dans la colonne de A1
PosInTarget = 1
For PosInSource = 1 To lastRow
DateEnCours = rngSource.Cells(PosInSource, 1)
For i = 2 To 7
rngTarget.Cells(PosInTarget, 1) = DateEnCours 'Ecriture de la date de la ligne
rngTarget.Cells(PosInTarget, 1).NumberFormat = "[$-409]dd/mm/yyyy hh:mm ;@" 'mise au bon format
rngTarget.Cells(PosInTarget, 2) = rngSource.Cells(PosInSource, i)
PosInTarget = PosInTarget + 1 'on passe à la ligne suivante dans le fichier de sortie
DateEnCours = DateAdd("n", 10, DateEnCours)
Next
Next
' re-activation de la mise a jour de l'affichage
Application.ScreenUpdating = True
EndOfProcedure: ' Fin de procédure
Set rngSource = Nothing: Set rngTarget = Nothing: Set rngTable = Nothing
Exit Function
ErrorHandler: ' Interception des erreurs et sortie de fonction
Select Case Err
Case 10001 ' Erreur suite 1er argument
ErrMsg = ErrMsg & "Problème : [SourceData] Objet mal défini (WorkSheet) ou (Range)"
Case 10002 ' Erreur suite 2ème argument
ErrMsg = ErrMsg & "Problème : [TargetName] Nom de la feuille de sortie pas ou mal définie."
Case 10003 ' Erreur Feuille Source même que Feuille Target
ErrMsg = ErrMsg & "Problème Feuille : <SheetName>" & vbCrLf & "Arguments [SourceData] & [TargetData] identiques":
ErrMsg = Replace(ErrMsg, "<SheetName>", rngSource.Worksheet.Name)
Case Else
MsgBox "Erreur " & Err.Number & "non gérée"
End Select
' Affichage de l'erreur
On Error GoTo 0
MsgBox Prompt:=ErrMsg, Buttons:=vbCritical, Title:=ErrTitle
GoTo EndOfProcedure
End FunctionEn tous cas merci pour l'exemple !