IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Mettre en colonne un fichier avec plusieurs lignes [XL-2010]


Sujet :

Macros et VBA Excel

  1. #1
    Membre chevronné Avatar de petitours
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Février 2003
    Messages
    1 976
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 976
    Points : 2 169
    Points
    2 169
    Par défaut Mettre en colonne un fichier avec plusieurs lignes
    Bonjour

    Je dispose d'un fichier qui contient des lignes avec une date + une heure + 6 valeurs qui correspondent à la valeur moyenne d'un capteur pendant les 6x 10 minutes de l'heure concernée

    ça fait ça
    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

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

    Comment peut on faire ce genre de chose avec Excel ?

    Merci

  2. #2
    Membre éprouvé
    Avatar de eric4459
    Homme Profil pro
    Ingénieur Gestion de Projets
    Inscrit en
    Avril 2014
    Messages
    605
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes de Haute Provence (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur Gestion de Projets
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2014
    Messages : 605
    Points : 1 124
    Points
    1 124
    Par défaut
    Bonjour,
    Est ce que les données d'entrées
    2012/12/12 03:00:00;43;43;54;65;2;43
    sont dans une seule cellule ou dans plusieurs, si oui dans combien de cellules ?
    Eric

  3. #3
    Membre chevronné Avatar de petitours
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Février 2003
    Messages
    1 976
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 976
    Points : 2 169
    Points
    2 169
    Par défaut
    bonjour

    c'est un fichier texte avec les valeurs séparées par des ; (un csv en gros) donc aucun soucis pour avoir tout ca dans des cellules séparée. Là excel reconnait les dates comme des dates tel qu j’ouvre le fichier, avec 6 cellules par ligne contenant les valeurs à coté.

    Merci

  4. #4
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 674
    Points
    18 674
    Par défaut

    Bonjour, bonjour !

    En double cliquant sur le fichier texte depuis l'Explorateur Windows,
    le fichier est normalement automatiquement ouvert et converti ‼

    Sinon il suffit juste de lire l'aide VBA des méthodes TextToColumns,

    Workbooks.Open (dans une version française son paramètre Local:=True suffit)

    ou encore Workbooks.OpenText, du niveau d'un débutant …

    __________________________________________________________________________________________________

    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion …

    __________________________________________________________________________________________________
    Tous unis, tous Charlie

  5. #5
    Membre chevronné Avatar de petitours
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Février 2003
    Messages
    1 976
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 976
    Points : 2 169
    Points
    2 169
    Par défaut
    Citation Envoyé par Marc-L Voir le message

    Bonjour, bonjour !

    En double cliquant sur le fichier texte depuis l'Explorateur Windows,
    le fichier est normalement automatiquement ouvert et converti ‼

    Sinon il suffit juste de lire l'aide VBA des méthodes TextToColumns,

    Workbooks.Open (dans une version française son paramètre Local:=True suffit)

    ou encore Workbooks.OpenText, du niveau d'un débutant …
    Si je puis me permettre, avant de prendre les gens pour des .ons on commence par lire la question... D'autant que l'ouverture du fichier pourrait très bien poser problème à quelqu'un sans qu'il ne mérite pour autant qu'on ne le prenne pour un .on...

  6. #6
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 674
    Points
    18 674
    Par défaut




    Je ne comprends vraiment pas … Désolé si tu interprètes à tort mes propos ‼

    La qualité des réponses dépendant de celle de la présentation initiale, donc avec une présentation claire & exhaustive …

  7. #7
    Membre chevronné Avatar de petitours
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Février 2003
    Messages
    1 976
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 976
    Points : 2 169
    Points
    2 169
    Par défaut
    si si, j’interprète très bien
    puisque je connais un peu (plus qu'un débutant) la fonction Workbooks.OpenText et que là je n'en ai pas besoin puisque le fichier s'ouvre très bien en "double cliquant sur le fichier texte depuis l'Explorateur Windows", comme je l'avais d'ailleurs déjà répondu à Eric4459 le post avant...
    La question n'est pas là du tout.

  8. #8
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 674
    Points
    18 674
    Par défaut



    Oui en décryptant je vois à peu près, toujours du niveau débutant mais,
    afin de ne plus perdre inutilement du temps faute d'une présentation avec tenants & aboutissants,
    joindre un classeur xlsx avec une feuille source et une feuille résultat
    ou mieux, si l'analyse avait été correcte dès l'origine, un fichier texte source à importer directement
    au format désiré, joindre quand même un classeur résultat …

  9. #9
    Membre chevronné Avatar de petitours
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Février 2003
    Messages
    1 976
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 976
    Points : 2 169
    Points
    2 169
    Par défaut
    tout ceci aurait pu être demandé avant et je suis suffisamment pas débutant pour savoir qu'un fichier texte joint n'aurait rien changé à la compréhension de ma question, d’ailleurs, comme vous n’êtes pas débutant vous savez surement qu'un copier coller de mes données aurait permis de créer le fameux fichier texte en moins de temps qu'il en aurait été nécessaire à le télécharger...

    Me voici un plein troll, sans aide je me débrouille donc avec un autre outil que je maîtrise mieux : c#

  10. #10
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 674
    Points
    18 674
    Par défaut





    Depuis son dernier message, le p'tit ours mal léché (dév C# ) a ouvert la même discussion sur un autre forum !



  11. #11
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 928
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 928
    Points : 28 922
    Points
    28 922
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Voici une procédure VBA qui devrait répondre à ton problème.
    A condition que la liste commence en A1, que la première ligne contienne les étiquettes de colonnes avec une orthographe unique et que bien entendu les données soient dans des cellules séparées.
    Dans ton cas, il suffit d'invoquer cette procédure comme ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     TransposeTable ThisWorkbook.Worksheets("Data"), LabelData:="Temps", LeftColumnNumber:=2
    La nouvelle liste sera exportée dans un nouveau classeur sinon il suffit de remplir l'argument TargetData du nom de la feuille où l'exportation doit avoir lieu.

    A lire les remarques en début de procédures
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    Function TransposeTable(SourceData As Object, _
                              Optional TargetData As Variant, _
                              Optional LabelRow As String = "Row", _
                              Optional LabelData As String = "Data", _
                              Optional LeftColumnNumber As Integer = 1) As Range
     ' Permet de reconstruire une liste de données présentée comme un tableau de résultats
     ' Author : Philippe Tulliez
     ' Version 1.1 (05/07/2013)
     ' LastDate : 30/06/2014
     ' Arguments
     '  SourceData : (Object) - Peut-être de type WorkSheet ou Range
     '  [TargetData] : (Object)
     '  [LabelRow] : (String) Nom de l'étiquette de colonne correspondant à la ligne 1 de la zone Data
     '  [LabelData] : (String) Nom de l'étiquette de colonne correspondant aux données.
     '  [LeftColumnNumber] : (Integer) indique le nombre de colonne à gauche [d:=1)
     '     Exemple : Magasin (Colonne 1), Adresse (Colonne 2) ensuite les données LeftColumnNumber doit être 2
     ' 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, Row As Long, Table()
     Dim flagMove As Boolean
     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 (TargetData)
     Select Case True
      Case IsMissing(TargetData)
       With wkbSource
       .Sheets.Add After:=.Sheets(.Sheets.Count): flagMove = True ' : Sheets(Sheets.Count).Name = "ExportNew"
        Set rngTarget = .Worksheets(.Sheets(.Sheets.Count).Name).Range("A1")
       End With
      Case TypeOf TargetData Is Worksheet: Set rngTarget = TargetData.Range("A1")
      Case TypeOf TargetData Is Range: Set rngTarget = TargetData
      Case TypeName(TargetData) = "String"
       With wkbSource
        On Error Resume Next
        Set rngTarget = .Worksheets(TargetData).Range("A1")
        If Err Then
         .Sheets.Add After:=.Sheets(.Sheets.Count)
         With .Sheets(.Sheets.Count): .Name = TargetData: 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
     If rngSource.Parent.Name = rngTarget.Parent.Name Then Error 10003 ' Déclenchement d'erreur
     On Error GoTo 0
     If rngTarget.CurrentRegion.Count Then rngTarget.Worksheet.Cells.Clear ' Clear Cells
     If rngSource.Count = 1 Then
       With rngSource.CurrentRegion
        Set rngTable = .Offset(, LeftColumnNumber).Resize(, .Columns.Count - LeftColumnNumber)
        Set rngSource = .Resize(, LeftColumnNumber)
       End With
      Else
       With rngSource
        Set rngTable = .Offset(, LeftColumnNumber).Resize(, .Columns.Count - LeftColumnNumber)
        Set rngSource = .Resize(, LeftColumnNumber)
       End With
     End If
      Table = rngTable
     ' Boucle copie
     For Row = 1 To rngTable.Columns.Count
      With rngSource
       If Row = 1 Then
        .Resize(1).Copy rngTarget.Cells(1, 1) ' Copie des étiquettes de colonnes non data
        rngTarget.Offset(, .Columns.Count) = LabelRow: rngTarget.Offset(, .Columns.Count + 1) = LabelData
        ' rngTarget.Offset(, .Columns.Count)
       End If
       Set rngTarget = rngTarget.Resize(.Rows.Count - 1, .Columns.Count)
       rngTarget.Offset(1 + ((Row - 1) * (.Rows.Count - 1))).Value = .Offset(1).Resize(.Rows.Count - 1).Value ' Première colonne
       With rngTarget.Offset(1 + ((Row - 1) * (.Rows.Count - 1)), .Columns.Count).Resize(, 1)
       .Value = Table(1, Row) ' Première ligne de table
        On Error Resume Next: .NumberFormat = rngTable.Cells(Row).NumberFormat
        On Error GoTo 0
       End With
       With rngTarget.Offset(1 + ((Row - 1) * (.Rows.Count - 1)), .Columns.Count + 1).Resize(, 1)
       .Value = rngTable.Offset(1, Row - 1).Resize(.Rows.Count, 1).Value
       .NumberFormat = rngTable.Offset(1, Row - 1).Resize(1, 1).NumberFormat ' Format de la 1ère cellule de la colonne
       End With
      End With
     Next Row
     '
     If flagMove Then rngTarget.Worksheet.Move ' Déplacement feuille cible vers nouveau classeur
    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 : [TargetData] Objet mal défini (WorkSheet) ou (Range) ou type String"
      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

  12. #12
    Membre éprouvé
    Avatar de eric4459
    Homme Profil pro
    Ingénieur Gestion de Projets
    Inscrit en
    Avril 2014
    Messages
    605
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes de Haute Provence (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur Gestion de Projets
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2014
    Messages : 605
    Points : 1 124
    Points
    1 124
    Par défaut
    Bonjour petitours
    Voici un code que je viens de tester avec 3 données de départ, ce n'est pas du même niveau que celui de Philippe mais il semble fonctionner, il faudrait que tu l'essayes avec davantage de lignes

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    Option Explicit
    Sub Transcription()
    Dim SRC As Worksheet
    Dim RES As Worksheet
    Dim SC As Range
    Dim RS As Range
    Set SRC = ThisWorkbook.Sheets("Source")
    Set RES = ThisWorkbook.Sheets("Résultat")
    Set SC = SRC.Range("A1")
    Set RS = RES.Range("A1")
    Dim i As Integer
    Dim j As Integer
    Dim k As Integer
    Dim Der As Integer
    SC = SC.Offset(0)
    RS = RS.Offset(0)
    i = 0
    j = 0
    k = 0
    With Sheets("Source")
        Der = .Cells(1, Columns.Count).End(xlToLeft).Column
    End With
     
        Do While SC.Offset(i + k, 0) <> ""
        i = i + k
        SC.Offset(i, 0).Copy
        RS.Offset(j, 0).PasteSpecial
       ' RS.Offset(j, 0).NumberFormat = "[$-409]dd/mm/yyyy hh:mm  ;@"
        Range(SC.Offset(0 + k, 1), SC.Offset(0 + k, 1).End(xlToRight)).Copy
        RS.Offset(j, 1).PasteSpecial Paste:=xlPasteAll, Transpose:=True
        For i = 1 To Der - 2
            If RS.Offset(i + j + 1, 0) = "" Then
                RS.Offset(i + j, 0).Select
                RS.Offset(i + j, 0) = RS.Offset(i + j - 1, 0)
            End If
        Next i
        i = 0
        j = j + Der - 1
        k = k + 1
        Loop
    Columns("A:A").NumberFormat = "[$-409]dd/mm/yyyy hh:mm  ;@"
    End Sub
    Voilà le fichier joint :

    Test Lignes vers colonnes.xlsm

    Eric

    Un oubli de ma part, dans le code fourni tu peux enlever la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RS.Offset(i + j, 0).Select
    Elle ne me servait que pour faire mes tests et n'est pas utile pour le fonctionnement
    Eric

  13. #13
    Membre chevronné Avatar de petitours
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Février 2003
    Messages
    1 976
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 976
    Points : 2 169
    Points
    2 169
    Par défaut
    Re

    Je pensais au départ que Excel disposait d'une fonction magique capable de faire cette transformation automatiquement et vous m'avez fourni des codes archis complets à la place ! Merci pour le temps consacré !

    J'ai un peu souffert à comprendre les exemples et en prenant un peu de chaque je suis arrivé à ma solution.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    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
    La fonction à construire n’était pas très compliquée finalement mais les détails de vos exemples m'ont appris pleins de trucs, notamment la gestion des erreurs et le passage de paramètres, merci

    Le seul soucis au final est que je me suis encore fait avoir par les limitations d'Excel, j'ai 1,5 millions de points au final, du coup ça ne rentre pas dans Excel je dois donc me rabattre sur C# mais excel me servira à tester des traitements des données avant de les coder en dur.

    Merci beaucoup pour vos exemples.

  14. #14
    Inactif  

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2012
    Messages
    4 903
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4 903
    Points : 10 167
    Points
    10 167
    Billets dans le blog
    36
    Par défaut
    Bonjour,

    Citation Envoyé par petitours Voir le message
    Re

    Je pensais au départ que Excel disposait d'une fonction magique capable de faire cette transformation automatiquement et vous m'avez fourni des codes archis complets à la place ! Merci pour le temps consacré !

    Merci beaucoup pour vos exemples.
    Je n'ai pas tout lu, mais dans Excel, il existe une fonction Transpose pour permuter les lignes en colonnes et les colonnes en ligne. Quoique, si Philippe n'en a pas parlé, c'est probablement parce que cela ne marcherait pas ici

    P.S. Il me semble qu'à partir de Excel 2007, une feuille de calcul peut contenir plus que 1 million de lignes.

    P.P.S Avec le SDK OpenXML, et sa fameuse dll DocumentFormatOpenXML.dll, tu peux utiliser C#, ou n'importe quel autre langage .net pour manipuler n'importe quel fichier Word, Excel ou PowerPoint (2007 et suivants) sans avoir besoin des applications sur ta machine. En fait, la dll ne fait qu'encapsuler certaines "utilisations" de IO.Packaging. Même s'ils disent que le SDK 2.5 est pour Office 2013, je l'utilise sans problème avec Office 2010.

  15. #15
    Membre chevronné Avatar de petitours
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Février 2003
    Messages
    1 976
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 976
    Points : 2 169
    Points
    2 169
    Par défaut
    Bonjour

    2010 a une limite à un peu plus de 1 million, ça m'a clairement pété à la figure tout à l'heure et ça m'était déjà arrivé auparavant.
    De toute manière avec autant de ligne Excel commence a être très lent, trop lent, il faudrait un calculateur de la NASA pour faire la moindre bricole...

    Excel c'est super pratique, flexible et convivial mais forcément il y a des contreparties. Avec C# je me suis fait une appli pour afficher sur des graph des millions (un peu plus de 200M j'ai fait au maximum) de points et je peux zoomer dessus et faire certains calculs statistiques très rapidement mais là ou je mets en place une formule sous Excel en 10minutes il me faut 2 jours de développement et de débug pour faire le même calcul en dur dans mon appli. C'est pareil avec des logiciels plus scientifiques comme R ou Matlab, ça va bien plus vite en calcul et ça n'a pas de limites mais c'est plus compliqué, moins convivial et donc plus lent à mettre en place.

    Là j'avais oublié ce petit détail de la limite du nombre de ligne mais Excel restera le bon outil pour dégrossir mes calculs, en prenant des échantillons de points.

    Merci

  16. #16
    Inactif  

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2012
    Messages
    4 903
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4 903
    Points : 10 167
    Points
    10 167
    Billets dans le blog
    36
    Par défaut
    Bonjour,

    Citation Envoyé par petitours Voir le message
    Bonjour

    Avec C# je me suis fait une appli pour afficher sur des graph des millions (un peu plus de 200M j'ai fait au maximum) de points et je peux zoomer dessus et faire certains calculs statistiques très rapidement mais là ou je mets en place une formule sous Excel en 10minutes il me faut 2 jours de développement et de débug pour faire le même calcul en dur dans mon appli.
    Merci
    Je ne sais pas si cela peut t'aider mais, il existe des bibliothèques NuGet mathématiques gratuites compatibles .net. Elles sont utilisables de la même manière qu'un contrôle.

    FrameWorks scientifiques avec module mathématique:

    AForge.net : http://www.aforgenet.com/

    Accord.net : https://github.com/accord-net/framework/ (Il a besoin de AForge pour fonctionner)

    Les dll des 2 (sans la doc ni les exemples) sont disponibles en Packages NuGet:

    http://www.nuget.org/

    Bibliothèques mathématiques:

    IlNumerics en versions 32 bits et 64 bits. http://www.nuget.org/packages?q=ilnumerics
    Math.Net Numerics et d'autres: http://www.nuget.org/packages?q=numerics

    Bibliothèques graphiques:

    OxyPlot : http://www.nuget.org/packages?q=oxyplot

    ZedGraph : http://www.nuget.org/packages?q=zedGraph

  17. #17
    Membre chevronné Avatar de petitours
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Février 2003
    Messages
    1 976
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 976
    Points : 2 169
    Points
    2 169
    Par défaut
    Bonjour

    Je ne connais pas la majeur partie de ces outils, je vais les regarder de près, notamment pour les traitements mathématiques.
    Merci beaucoup

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Mettre en forme un commentaire avec plusieurs lignes
    Par nicxlsx dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 13/05/2011, 11h26
  2. Ecrire un fichier avec plusieurs types de ligne
    Par guicecal dans le forum Développement de jobs
    Réponses: 6
    Dernier message: 11/01/2011, 11h27
  3. Réponses: 3
    Dernier message: 10/06/2010, 11h15
  4. Comment mettre en colonne des resultats de plusieurs lignes
    Par shaun_the_sheep dans le forum Langage SQL
    Réponses: 1
    Dernier message: 28/04/2009, 11h41
  5. Plusieurs formulaires dans un fichier avec plusieurs méthodes post
    Par cyberdevelopment dans le forum Langage
    Réponses: 2
    Dernier message: 17/08/2006, 15h04

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo