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 une colonne en ligne


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Mars 2009
    Messages
    105
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 105
    Par défaut Transposer une colonne en ligne
    salut le forum,

    Je suis un débutant en VBA, mes connaissances sont très limitées, ci-dessous je vous explique ce que je souhaite faire en espérant que quelqu'un pourra m'éclairer.

    Je souhaite transposer une colonne Z d'une feuille 1 en ligne 1 sur la feuille 2 (à partir de la cellule (1,4) inclus).

    Sur la feuille 1 de mon excel :

    Dans un premier temps je dois automatiser la création de cette colonne Z qui correspond à la concaténation des colonnes G jusqu'à Q si la condition suivante est respectée : les cellules de la colonne X = Main.

    Dans un second temps je veux classer cette colonne afin d'éliminer les doublons un à un (car dans mon cas les concaténations peuvent avoir le même nom).

    Sur la feuille 2 de mon excel :

    Finalement je souhaite coller les valeurs des concaténations de la colonne Z de la feuille 1 à la feuille 2 en les transposant. (coller dans la feuille 2 à partir de la cellule (1,4) inclus)

  2. #2
    Membre confirmé
    Inscrit en
    Mars 2009
    Messages
    105
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 105
    Par défaut
    Resalu,

    Ce que je souhaite faire en fait c'est pouvoir mettre à jour la ligne de la feuille 2 qui correspond à des concaténations de la feuille 1.

    En fait je fesais des concaténations à la main et je les copier coller manuellement sur la deuxieme feuille Excel, le grand problème qui s'est posé à moi c'est le fait que le contenu de la feuille 1 change quotidiennement et du coup le nombre de concaténations peut changer, si je ne réussi pas à coder cela je devrais changer le contenu de la ligne 1 de la feuille 1 tous les jours manuellement.

    Voila voila
    si quelqu'un à des pistes n'hésitez pas à m'écrire....

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Mai 2007
    Messages : 88
    Par défaut
    salut, je ne suis pas sûr de tout bien comprendre, mais j'ai peut-être une piste quand même, ce n'est pas parce qu'on à rien à dire qu'il faut se taire...

    pour la concaténation, je mettrais une simple formule dans la colonne Z. charge à toi de la dupliquer manuellement s'il y a des nouvelles lignes (remarque, on pourrait aussi le faire par macro)
    = IF (X1 = "Main"; G1&H1&I&...&Q1;"")

    pour recopier dans feuille 2, en transposant, et en enlevant les doublons
    (attention j'ai pas testé, c'est pas bien)
    :
    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
     
    Sub RecopierColZetTransposerSansDoublons()
        Dim PlageSource As Range
        Dim FeuilleResultat As Worksheet
        Dim NumColonneResultat as integer
        Dim NumLigneResultat as integer
        Dim Cell As Range
        Dim Un As Collection
        Dim i As Long
     
        ' nommer tous les endroits sur lesquels on travaille. ca permettra de modifier plus facilement plus tard
         PlageSource = Workbooks("LeNomDeTonFichierSource").Worksheets("LeNomDeTaFeuille").Range("Z:Z")
         FeuilleResultat = Workbooks("LeNomDeTonFichierResultat").Worksheets("LeNomDeTaFeuille")
         NumColonneResultat = 4
         NumLigneResultat = 1
     
        ' creer une liste sans doublons, d'après un tuto de Silkyroad
        Set Un = New Collection
        On Error Resume Next
        'Boucle sur la plage de cellule
        For Each Cell In PlageSource
            'If Cell <> "" Permet de ne pas prendre en compte les cellules vides
            'Un.Add Cell, CStr(Cell) Ajoute le contenu de la cellule dans la collection
            'le 2ème argument Cstr(cell) est le TAG de l'élément. Le tag est unique, c'est ca qui évite les doublons
            'ici on choisi le contenu de la cellule, transformé en chaine de caractere (par Cstr)
            If Cell <> "" Then Un.Add Cell, CStr(Cell)
        Next Cell
        On Error GoTo 0
     
        'Boucle sur les éléments de la collection
        'les écrire dans feuille2, en chagneant de colonne à chaque fois
        For i = 1 To Un.Count
            FeuilleResultat.Cells(NumLigneResultat, NumColonneResultat + i - 1) = CStr(Un)
        Next i
     
        Set Un = Nothing
    End Sub

  4. #4
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    S'il s'agit de copier en colonne des données en ligne, pourquoi n'utilises-tu pas la fonction de la feuille de calculs "Collage spécial -> Transposer les données"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        Range("A5:I5").Copy
        Range("A7").PasteSpecial Paste:=xlPasteAll, Transpose:=True
    Tu as une autre façon consistant à utiliser WorksheetFunction.transpose
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("C7:C15") = WorksheetFunction.Transpose(Range("A5:I5"))
    Ces deux codes font la même chose.
    Si c'est bien ta demande

  5. #5
    Membre confirmé
    Inscrit en
    Mars 2009
    Messages
    105
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 105
    Par défaut
    Je te remercie le petit nicolas pour ton intervention...
    je suis en train d'essayer ca pour l'instant..
    pour plus de détails concernant ce que je souhaite faire je vous mets ci joint un bout de mon tableau...
    mon objectif est de créer les clés qui se trouve dans sur la 1ere ligne de la feuille 2 automatiquement à partir de la feuille 1. ( en utilisant biensur la condition les cellules de la colonne X=main)
    La feuille 1 variant tout le temps, ceci me permettra de mettre à jour mon tableau.

  6. #6
    Membre confirmé
    Inscrit en
    Mars 2009
    Messages
    105
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 105
    Par défaut
    Bonsoir ouskel'n'or,

    merci pour ton intervention, mais le problème c'est que j'ai des conditions sur le collage (colonne X feuille1).
    si tu lis le message que je viens de poster avant, il y a plus de détails.

    Merci d'avance

  7. #7
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Sub test()
    Dim i As Long, NoCol As Integer, laClef As String, tablo As Variant
        For i = 2 To Split(Worksheets("feuille1").UsedRange.Address, "$")(4)
            tablo = Range(Cells(i, 1), Cells(i, 17)).Value '
            For NoCol = 7 To 17
                laClef = laClef & tablo(1, NoCol)
                'là tu colles la clé où tu veux
            Next
            laClef = ""
        Next
    End Sub
    Ne reste plus qu'à les coller dans l'autre feuille.
    Aucune transposition dans ce cas, seulement une orientation du texte à 90°

  8. #8
    Membre confirmé
    Inscrit en
    Mars 2009
    Messages
    105
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 105
    Par défaut
    salut ouskel'n'or,

    je ne comprends pas très bien cette partie du code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    For i = 2 To Split(Worksheets("feuille1").UsedRange.Address, "$")(4)
    si j'ai bien compris ca permet de parcourir toute les lignes de ma feuille jusqu'à la dernière ligne vide??

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

Discussions similaires

  1. [XL-2010] transposer des colonnes en lignes d'une manière spéciale
    Par olivverte dans le forum Excel
    Réponses: 2
    Dernier message: 08/08/2014, 12h18
  2. Transposer une colonne en une ligne
    Par Okena dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 29/03/2010, 18h14
  3. Personnaliser les cellules d'une colonne ou lignes
    Par opensource dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 25/12/2007, 15h39
  4. [SQL] Lister une colonne en ligne
    Par spg40 dans le forum Oracle
    Réponses: 3
    Dernier message: 28/07/2006, 15h55
  5. [SQL] Transposer des colonnes en lignes + LIKE et SOUNDEX
    Par Anne1969 dans le forum Langage SQL
    Réponses: 4
    Dernier message: 23/11/2005, 13h44

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