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 :

Transposer plusieurs lignes sur une seule colonne


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    126
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 126
    Points : 53
    Points
    53
    Par défaut Transposer plusieurs lignes sur une seule colonne
    Bonjour,

    Voilà, j'ai actuellement entre les mains un fichier qui se présente sous cette forme là :

    codeInseeCommune___champ1_____ champ2___champ3___ ....
    _____09100___________17__________95________0.1_____ ....
    _____25200___________25__________15_________1_____ ....
    _____36200___________12__________10_________5_____ ....
    ....

    et le résultat que je souhaiterais obtenir en faisant une transposition est celui-ci

    codeInseeCommune____nomDuChamp_____Valeur
    _____09100____________champ1_________17
    _____09100____________champ2_________95
    _____09100____________champ3_________0.1
    _____25200____________champ1_________25
    _____25200____________champ2_________15
    _____25200____________champ3_________1
    _____36200____________champ1_________12
    _____36200____________champ2_________10
    _____36200____________champ3_________5

    Il ne s'agit donc pas d'une simple transposition...
    Quelqu'un aurait-il une idée de la manière dont je pourrais automatiser la tâche? Car j'ai beaucoup beaucoup de fichiers dans le style à traiter...
    Idéalement, si au passage quelqu'un connait le logiciel FME, et un moyen de transposer ces données directement grâce à un transformer, ce serait génial.

    Merci d'avance pour vos propositions,

  2. #2
    Membre régulier
    Inscrit en
    Mai 2007
    Messages
    85
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations forums :
    Inscription : Mai 2007
    Messages : 85
    Points : 93
    Points
    93
    Par défaut
    salut,

    je ne comprends pas vraiment où est le problème. Tu n'arrive pas à le faire avec une "simple" macro qui parcours les lignes du premier fichier puis pour chaque ligne toutes ses colonnes et tu écris dans ton seconds ?


    je n'ai peut-être pas vu quelque chose...

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    126
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 126
    Points : 53
    Points
    53
    Par défaut
    Oui, en fait je n'ai pas encore beaucoup réfléchi je l'avoue... Mais ça me semblait compliqué de faire une macro qui devait dupliquer les infos d'une partie de mon tableau et en transposer une autre partie.
    Donc d'aprés toi il faudrait faire une macro du style :

    1- Pour chaque ligne
    2- Pour chaque colonne de la ligne
    2.1- copier la valeur de la première cellule, et la coller
    2.2- copier le nom du champ de la colonne, et le coller
    2.3- copier la valeur de la cellule en cours, et la coller

    Tu me dis si je me trompe, si ça se trouve c'est moi qui n'est pas compris ta réponse...
    Si c'est ok, sachant que mes fichiers sont de taille trés hétérogéne au niveau du nb de lignes et de colonnes, pourrais-tu me dire comment je peux déterminer ces valeurs au début de ma macro? Pour que mes boucles sachent combien de lignes et de colonnes elles ont à parcourir.

    Merci de tes réponses

  4. #4
    Expert éminent
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    3 898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 898
    Points : 8 529
    Points
    8 529
    Par défaut
    Salut
    Oui ta macro doit boucler sur la colonne A (attention la dimension de la colonne va augmenter)
    Pour chaque cellule tu insères une ligne, dans cette ligne la 1er cellule contient N°Insee, 2eme TerreMasse,
    puis une autre ligne avec
    1er N°Insee,2eme TerreNeutre
    puis ... pareil avec le coef K
    :p
    Je me trompe pour le nom des champs?
    A++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    126
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 126
    Points : 53
    Points
    53
    Par défaut
    Euh... c'est à mon problème que tu répondais Qwazerty?

  6. #6
    Expert éminent
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    3 898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 898
    Points : 8 529
    Points
    8 529
    Par défaut
    Salut
    oui c'est bien a ton problème, je pensais juste deviner a quoi correspondait champs1, champs2 et champs3, mais visiblement je me suis planté. Peu importe le reste de ma réponse reste valide, crées un code a partir de ca et reviens nous
    A++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    126
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 126
    Points : 53
    Points
    53
    Par défaut
    Ok... ben non, c'est pas ça!
    Est-ce que tu pourrais expliciter un peu plus ta réponse (avec les champs de mon exemple)? Je ne comprend pas vraiment, ça veut dire q'une fois la macro terminée, j'aurais des lignes de cellules mélangées avec les lignes initiales? De plus, je ne sais pas comment gérer la longueur du tableau.
    Enfin bref, ce n'est pas trés clair pour l'instant... ms je sens que ça va venir!

  8. #8
    Expert éminent
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    3 898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 898
    Points : 8 529
    Points
    8 529
    Par défaut
    Re
    Bon aller tu as pas l'aire bien décidé
    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
    Sub Reorganiser()
    Dim I As Long
     
    'On coupe la mise a jour de l'affichage (gain de temps)
    Application.ScreenUpdating = False
     
     
    'On boucle sur toutes les cellule de la colonne A, on quittera sur contenu cellule vide
    For I = 1 To Rows.Count
        If Cells(I, "A") = "" Then Exit For
        'on ajoute une ligne sous la cellule
        Cells(I + 1, "A").EntireRow.Insert
        'on lui donne le meme contenue (n°Insee)
        Cells(I + 1, "A").Value = Cells(I, "A").Value
        'On met le contenue de la 3eme colonne dans la 2eme colonne de la ligne suivnate
        Cells(I, "D").Cut Cells(I + 1, "B")
     
        'on ajoute une ligne sous la cellule
        Cells(I + 1, "A").EntireRow.Insert
        'on lui donne le meme contenue (n°Insee)
        Cells(I + 1, "A").Value = Cells(I, "A").Value
        'On met le contenue de la 2eme colonne dans la 2eme colonne de la ligne suivnate
        Cells(I, "C").Cut Cells(I + 1, "B")
     
        'On saute les 2 ligne fraichement rajoutées
        I = I + 2
    Next
     
    'On remet l'affichage
    Application.ScreenUpdating = True
     
    End Sub
    Ce code ne supporte pas de contenu en colonne A vide.
    A++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    126
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 126
    Points : 53
    Points
    53
    Par défaut
    Alors, ça marche impec donc c'est une bonne base sur laquelle je vais essayer de faire ma petite tambouille...
    Car le problème c'est que le nombre de colonnes est trés variable d'un fichier à l'autre, et il dépasse parfois 100.
    Donc il faut que j'arrive à trouver le moyen de faire ma deuxième boucle tout en sautant le nb de lignes approprié... Et là, ça va me demander un peu de temps car il faut que je réfléchisse (même si ça n'a pas l'air d'être trés compliqué) !

    En tous cas merci pour tout, je vous tiens au courant de la suite des évênements

  10. #10
    Expert éminent
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    3 898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 898
    Points : 8 529
    Points
    8 529
    Par défaut
    Salut
    Je n'ai pas excel, par conséquent je n'ai pas testé, mais essaies ça ou inspires toi en.

    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
    Sub Reorganiser()
    Dim I As Long
    Dim Col As Integer
    Dim NbrSaute As Integer
     
    'On coupe la mise a jour de l'affichage (gain de temps)
    Application.ScreenUpdating = False
     
     
    'On boucle sur toutes les cellule de la colonne A, on quittera sur contenu cellule vide
    For I = 1 To Rows.Count
        If Cells(I, "A") = "" Then Exit For
     
        'On regarde le nombre de ligne qui vont etre créer
        NbrSaute = cells(i, columns.count).End(xlToLeft).Column - 2 '-2 pour ne pas tenir compte de A et B
     
        'On boucle de la derniere colonne remplie a la colonne C
        For Col = range(cells(i, columns.count).End(xlToLeft),cells(i,"C") Step -1
            'on ajoute une ligne sous la cellule
            Cells(I + 1, "A").EntireRow.Insert
            'on lui donne le meme contenue (n°Insee)
            Cells(I + 1, "A").Value = Cells(I, "A").Value
            'On met le contenue de la colonne Col dans la 2eme colonne de la ligne suivnate
            Cells(I, Col).Cut Cells(I + 1, "B")
        Next    
        'On saute les 2 ligne fraichement rajoutées
        I = I + NbrSaute
    Next
     
    'On remet l'affichage
    Application.ScreenUpdating = True
     
    End Sub
    A++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

Discussions similaires

  1. Réponses: 2
    Dernier message: 12/04/2013, 08h30
  2. Regrouper plusieurs lignes sur une seule
    Par Mygush dans le forum Langage SQL
    Réponses: 2
    Dernier message: 15/09/2009, 11h05
  3. saisir plusieurs lignes sur une seule rangee
    Par stpaul04 dans le forum Langage SQL
    Réponses: 1
    Dernier message: 22/02/2008, 22h14
  4. Afficher plusieur colonnes sur une seule colonne ?
    Par Interruption13h dans le forum Langage SQL
    Réponses: 4
    Dernier message: 04/02/2007, 16h57
  5. Plusieures infos sur une seule ligne avec ou sans tableau
    Par Him dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 17/03/2006, 14h16

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