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 . que les administrateurs n'hésitent pas à faire le ménage !

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 Sub

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

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 Function

En tous cas merci pour l'exemple !

Rechercher des sujets similaires à "mettre colonne fichier lignes"