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 :

Assembler des colonnes dans une liste. [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Retraité
    Inscrit en
    Août 2017
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Service public

    Informations forums :
    Inscription : Août 2017
    Messages : 23
    Par défaut Assembler des colonnes dans une liste.
    Bonjour
    Je ne sais pas si ce que je demande est fesable mais ça ne coûte rien de demander.
    J'ai un tableau du style:
    NOM PRENOM CODE_1 CODE_2 CODE_3
    AAA aaa 001 003
    BBB bbb 123
    CCC ccc 002 890 123

    et je voudrais qu'il se transmorme dans une liste en :
    NOM PRENOM CODES
    AAA aaa 001
    CCC ccc 002
    AAA aaa 003
    BBB bbb 123
    CCC ccc 123
    CCC ccc 890

    Les codes classés par ordre croissant et les noms par ordre alphabétique dans chaque code.

    Est-ce possible d'une part et si oui, comment faire ?
    (Je précise que je suis très très loin d'être un expert en vba.)

    Merci pour vos réponses

  2. #2
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Bonjour
    Je précise que je suis très très loin d'être un expert en vba.
    Il se trouve que j'ai précisément répondu à une question similaire (quasi identique) il y a vraiment très peu de temps sur le forum VBA.
    Ce site étant doté d'un moteur de recherche, je te laisse d'abord chercher la discussion en question.

  3. #3
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Re-moi :
    Je viens quand-même de le tester, ce moteur de recherche --->>
    1) la discussion en cause (et ta solution) date de moins de 10 jours
    2) c'était la seconde fois que je traitais un problème de cette nature. La seconde, je n'ai pas voulu refaire ce que j'avais fait la première fois (histoire de ne pas m'ennuyer ...)

    3) tu la retrouveras, cette discussion, si tu fais comme moi (chercher).
    Il reste que l'on trouve plus facilement ce qui est assorti d'un titre adéquat. Ce n'est pas le cas du tien ******, au passage !

    ******
    Assembler des colonnes dans une liste
    !!!!!

  4. #4
    Membre averti
    Homme Profil pro
    Retraité
    Inscrit en
    Août 2017
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Service public

    Informations forums :
    Inscription : Août 2017
    Messages : 23
    Par défaut
    J'ai bien trouvé un morceau de votre code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Dim derlig As Long, i As Long, k As Byte, quoi
      derlig = Range("A" & Rows.Count).End(xlUp).Row
      For i = derlig + 1 To 3 Step -1
        quoi = WorksheetFunction.Transpose(Range(Cells(i - 1, 3), Cells(i - 1, 5)))
        For k = 1 To 2
          Rows(i).Insert
          Cells(i, 1).Value = Cells(i, 1).Value
        Next
        Range(Cells(i - 1, 3), Cells(i + 1, 3)).Value = quoi
      Next
      Range("D:E").ClearContents
    qui semble aller dans le sens de mon problème d'après ce que j'ai pu comprendre, mais je ne suis absolument pas assez compétent pour arriver à l'adapter à mon besoin.
    D'après ce que j'ai compris, les lignes sont incrémentées en fonction des premières cellules (NOM Prénom) et on ajoute à la suite ce qui figure dans les autres cellules le tout sur la même feuille, de sorte que le tableau d'origine n’existe plus.
    Moi, c'est l'inverse que je voudrais.
    D'une part la liste modifiée n'est créée que provisoirement sur une autre feuille et seulement destinée à être imprimée, de manière à garder la feuille d'origine intacte. D'autre part, La sélection se fait sur les codes et non sur les noms et prénoms puisqu'il faut que les codes soient par ordre croissant.
    Je ne sais pas si je suis très clair dans mes explications.

    Nom : Sans nom-1.jpg
Affichages : 282
Taille : 421,1 Ko

    C'est peut être plus clair avec un tableau...

  5. #5
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Et nous voilà parti encore une fois avec l'arithmétique.
    Mais cette fois-ci : de manière mille fois plus simple (voire enfantine) , puisque les résultats sont à mettre sur une autre feuille.
    Regarde ce que fait ceci (attention à mes chiffres, hein ... ils correspondent à tes images "avant/après")
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Dim FO As Worksheet, FD As Worksheet
      Set FO = Worksheets("Feuil2") ' ---->> feuille source
      Set FD = Worksheets("Feuil3") ' --->> feuille destination
      derlig = FO.Range("A" & Rows.Count).End(xlUp).Row
      FD.Cells.ClearContents
      n = 2
      For i = 2 To derlig
        combien = Cells(i, Columns.Count).End(xlToLeft).Column - 13
        For k = 1 To combien
          FO.Range("A" & i & ":M" & i).Copy Destination:=FD.Range("A" & n)
          FD.Cells(n, 14).Value = FO.Cells(i, 13 + k).Value
          n = n + 1
        Next
      Next
    Que te reste-t-il à faire ? Tout simplement trier sur colonne de tes codes. Et cela, je ne vais pas te l'écrire aussi. Si tu veux savoir pourquoi --->> parce que l'utilisation toute bête de l'enregistreur de macros t'en ferait découvrir le code à écrire pour ce dernier petit point-là (et que je veux que tu t'y mettes un peu).

  6. #6
    Membre averti
    Homme Profil pro
    Retraité
    Inscrit en
    Août 2017
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Service public

    Informations forums :
    Inscription : Août 2017
    Messages : 23
    Par défaut
    Bonjour,
    Merci pour ce travail.
    Ce code serait parfait s'il ne rajoutait pas des lignes même lorsque les cellules code sont vides.
    Comment éviter cela.
    Pour ce qui est du classement, j'y suis effectivement arrivé avec l'enregistreur. Merci du conseil.

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

Discussions similaires

  1. [VB.NET][ListView]des images dans une list view
    Par pcdj dans le forum Windows Forms
    Réponses: 1
    Dernier message: 16/12/2005, 12h08
  2. Intercaler des "titres" dans une liste ?
    Par tikawua dans le forum Langage SQL
    Réponses: 3
    Dernier message: 18/10/2005, 10h40
  3. [Lisp] Suppression des parenthèses dans une liste
    Par bourdaillet dans le forum Lisp
    Réponses: 3
    Dernier message: 19/12/2004, 21h02
  4. [langage] Comment rajouter des champs dans une liste
    Par toto_titi dans le forum Langage
    Réponses: 4
    Dernier message: 28/08/2003, 14h09

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