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 données de plusieurs colonnes sur une même lligne


Sujet :

Macros et VBA Excel

  1. #1
    Candidat au Club
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Mars 2013
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Technicien réseau
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Mars 2013
    Messages : 7
    Points : 3
    Points
    3
    Par défaut Transposer données de plusieurs colonnes sur une même lligne
    Bonjour à tous !

    D'habitude je trouve une solution en parcourant le forum, mais la je bloque...
    Pourtant, ca doit être faisable pour quelqu'un qui s'y connait !

    Voici le type de tableau que j'ai (En bien plus important bien sûr, j'ai raccourci pour l'exemple) :

    Nom : Capture Ecran le 24-08-16 à 10-13.JPG
Affichages : 317
Taille : 89,2 Ko

    Et voici ce que j'aimerais que cela m'affiche automatiquement.
    Une seule ligne par nom, avec les logiciels qui s'affichent bout à bout sur cette même ligne :

    Nom : Capture Ecran le 24-08-16 à 10-17.JPG
Affichages : 197
Taille : 66,6 Ko

    Voila ! J'ai testé quelques fonctions Excel, une Macro mais qui devait être a une année lumière, et je bien planté sur ce truc
    Si quelqu'un a une idée ! Je suis preneur

    Merci !

    Baptiste

  2. #2
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 82
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 422
    Points
    12 422
    Par défaut
    Bonjour
    Je t'aiderai volontiers, mais pas sans avoir d'abord vu l'effort que tu as au moins fait pour y parvenir.
    Une des pistes possibles :
    - parcourir ta colonne A du bas vers le haut
    - chaque fois que la ligne au-dessus est égale à la ligne parcourue :
    ---- copier à partir de la colonne D de la ligne au-dessus les données figurant à partir de la colonne C de la ligne parcourue (méthode Range.copy)
    --- supprimer la ligne en cours
    Montre-moi ce que tu tentes d'écrire sur ces bases.
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.

  3. #3
    Candidat au Club
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Mars 2013
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Technicien réseau
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Mars 2013
    Messages : 7
    Points : 3
    Points
    3
    Par défaut

    Le truc c'est que j'ai passé deux heures dessus ce matin et j'ai fini par tout supprimer parce que je n'arrivais à rien et j'étais un peu blasé...
    J'avais des erreurs dès la première ligne , ca doit sembler simple pour vous mais Je patauge complet (je suis plus Batch généralement...).

    Globalement j'étais partie dans cette direction, je déclarais mes variables de boucle et une pour stocker la valeur du logiciel

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Sub TRI()
    Dim PremCellule As Integer
    Dim celluleSuiv As Integer
    Dim i as Integer
    i = 2
    PremCellule = i
    celluleSuiv = i + 1
    Do While Range("A" & celluleSuiv) = Range("A" & PremCellule)
    celluleSuiv = celluleSuiv + 1
    Loop
    Après je sais qu'il fallait utiliser la formule range, mais je ne sais pas trop comment l'utiliser...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Range(Cells(??), Cells(??)).Select
    Selection.Copy
    Sheets(soft_list).Select
    Range("??").Select
    ActiveSheet.Paste
    Du coup, j'ai laissé tombé, je suis reparti d'une Macro que j'utilisais pour un autre fichier mais que j'ai du faire il y a 2-3ans...
    je l'avais un peu arrangé mais vu que j'avais pas trop mi de note sur quelle ligne faisait quoi.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Sub TRI()
    Dim Plage As Range, 
    Cell As Range
    Dim VAR As Collection
    Dim i As Long, Ligne As Long
        Set VAR = New Collection
        With Worksheets("Extraction")
            Set Plage = .Range(.Range("A1"), .Range("A" & Rows.Count).End(xlUp))
           End With
        On Error Resume Next
        For Each Cell In Plage
    Après j'ai cherché sur le net à nouveau, mais c'est trop spécifique visiblement ce que je demande.
    Donc j'ai posté ici, parce que je peux pas trop me permettre de passer une demi-journée sur une macro au taf là, je perds plus temps que j'en gagne pour le moment.
    Et ca me permettrai peut être de comprendre...

    Donc ton aide serait la bienvenue ! Sinon, je ferai sans...

  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 677
    Points
    18 677
    Par défaut



    Bonjour,

    deux possibilités : soit via le B-A-BA d'Excel (donc niveau débutant) soit via l'objet Dictionary
    Joindre un classeur enregistré au format xlsx et donc sans code.


    _________________________________________________________________________________________________________
    Je suis Paris, Nice, Bruxelles, Charlie, …
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  5. #5
    Candidat au Club
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Mars 2013
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Technicien réseau
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Mars 2013
    Messages : 7
    Points : 3
    Points
    3
    Par défaut
    Bonjour Marc,

    On peut le faire depuis des fonctionnalisés Excel ??
    Fichiers attachés Fichiers attachés

  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 677
    Points
    18 677
    Par défaut


    Ben oui : tout ce que tu peux utiliser manuellement dans Excel est aussi exploitable en VBA, comme il n'y a pas beaucoup de données,
    rien qu'en activant l'Enregistreur de macros ! Et pas besoin d'une demie-journée …
    Je regarderais plus tard s'il n'y a pas eu de proposition.
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  7. #7
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 82
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 422
    Points
    12 422
    Par défaut
    Avec ce simple petit bout de code (basé très fidèlement sur ce j'ai dit plus haut) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Dim derlig As Long, i As Long
    derlig = Range("A" & Rows.Count).End(xlUp).Row
    For i = derlig To 2 Step -1
      If Range("A" & i - 1).Value = Range("A" & i).Value Then
        Range("C" & i & ":ZZ" & i).Copy Destination:=Range("D" & i - 1)
        Rows(i).EntireRow.Delete
      End If
    Next
    Non ?

    PS ; j'ai mis jusqu'à la colonne "XX" car cela est plus simple à comprendre et est très largement suffisant.
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.

  8. #8
    Candidat au Club
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Mars 2013
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Technicien réseau
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Mars 2013
    Messages : 7
    Points : 3
    Points
    3
    Par défaut
    Merci unparia !

    Je confirme que cela fonctionne, je l'ai un peu adapté pour mon tableau qui est plus volumineux, je n'aurai plus qu'à faire l'extraction complète qui doit faire plus de 15000 lignes et laisser tourner un peu...
    Par contre, je ne l'ai pas encore totalement compris, je regarde demain matin et si tu peux m'éclairer plus en détail pour mieux la comprendre (pour que j'arrive à la reproduire sans vous embêter )

    J'ai essayé de faire pour que cela copie dans une autre feuille parce que la c'a m'écrase le tout à la fin, mais ce n'était pas très fructueux... Il n'y avait qu'une partie qui se copiait dans la feuille. Mais cela m'a permis de mieux comprendre le fonctionnement !


    @Marc-L
    Si tu as aussi l'astuce pour le faire sans VBA, je serais preneur ! Je me coucherai plus intelligent ! (ou moins bête , question de point de vu)

    Merci à vous

  9. #9
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 82
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 422
    Points
    12 422
    Par défaut
    je regarde demain matin et si tu peux m'éclairer plus en détail pour mieux la comprendre (pour que j'arrive à la reproduire sans vous embêter
    Tu veux que je t'"éclaire" sur quoi ?
    Il n'y a dans mon code que tu très rudimentaire. Et le mécanisme est celui que j'exposais dans mon tout premier message.
    Je me vois mal faire un "cours particulier", sur ce forum, pour finalement répéter (avec les mêmes mots !) ce que tu peux lire dans l'aide VBA, notamment en ce qui concerne l'utilisation de la méthode Range.Copy.

    EDIT : quant à :
    J'ai essayé de faire pour que cela copie dans une autre feuille parce que la c'a m'écrase le tout à la fin, mais ce n'était pas très fructueux...
    J'aurais écrit le code autrement si tu avais précisé cette finalité dans ta demande, ce que tu n'as pas fait
    Je ne vais pas maintenant écrire un second code.
    Reste que rien ne t'empêche de :
    1) copier ta feuille source vers la feuille de destination
    2) appliquer à la feuille de destination le code que je t'ai donné.
    Non ?
    (ce sera peut-être plus simple pour toi).
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.

Discussions similaires

  1. Réponses: 7
    Dernier message: 04/06/2015, 11h23
  2. [2008] Plusieurs colonnes sur une même ligne
    Par JonathanMQ dans le forum Développement
    Réponses: 1
    Dernier message: 22/01/2014, 10h31
  3. Réponses: 1
    Dernier message: 24/02/2011, 19h11
  4. Plusieurs colonnes sur une même ligne
    Par LBO72 dans le forum SQL
    Réponses: 4
    Dernier message: 16/02/2011, 15h33
  5. Plusieurs applications sur une même base de données
    Par ellene dans le forum Hibernate
    Réponses: 8
    Dernier message: 13/11/2007, 10h04

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