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 des données horizontales en vertical avec dédoublement de ligne variable


Sujet :

Macros et VBA Excel

  1. #1
    Candidat au Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2014
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Avril 2014
    Messages : 6
    Points : 3
    Points
    3
    Par défaut Transposer des données horizontales en vertical avec dédoublement de ligne variable
    Bonjour,

    j'ai un tableau avec pas mal de données (200 lignes et une quinzaine de colonnes). Chaque association est enregistrée sur une ligne avec un nombre de colonnes indiquant les différents besoins auxquels elle répond (Alimentation / Santé / Hébergement / Education / ...).
    J'ai besoin de créer une ligne pour chaque besoin auquel répond une association.

    En clair passer de mon tableau A au tableau B en automatisant ma tâche car manuellement c'est excessivement laborieux.

    Nom : Capture.PNG
Affichages : 609
Taille : 17,7 Ko

    J'ai tenté d'automatiser une macro en vain.

    Merci pour votre aide !

  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
    J'ai tenté d'automatiser une macro en vain.

    Merci pour votre aide !
    Je veux bien te donner cette aide, mais après que tu auras mis ici le code que tu as tenté. C'est chez moi un principe.
    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
    Administrateur de base de données
    Inscrit en
    Avril 2014
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Avril 2014
    Messages : 6
    Points : 3
    Points
    3
    Par défaut
    Je n'y connais rien en programmation, je me débrouille en excel en utilisation courante.

    J'ai simplement tenté d'enregistrer une macro décomposant les tâches : insérer des lignes, copier coller par transposition. Mais ça ne fonctionne pas.

    J'ai tenté un bricolage manuel :
    - filtrer toutes les colonnes où il y a une croix pour le remplacer par le nom du besoin
    - insérer autant de lignes qu'il y a de besoins potentiels en numérotant chaque ligne pour les insérer automatiquement entre chaque ligne déjà existante
    - copier coller par transposition.
    Mais je suis contraint de le faire ligne par ligne et ensuite de supprimer toutes les lignes vierges. J'ai essayé avec 20 lignes j'y ai passé pas mal de temps et j'en ai plus de 200 par 12 besoins...

    Je crois avoir atteint mon seuil d'incompétence.

  4. #4
    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 vais te dire très franchement ce qui me gêne :
    c'est la quatrième fois en moins d'un mois qu'est présentée sur ce forum une demande presque totalement identique, ce qui commence à me faire penser qu'il s'agit là d'exercices scolaires correspondant à un stade d'enseignement.
    N'aimant personnellement pas du tout ni copier sur d'autres, ni copier sur moi-même, j'ai donné trois solutions totalement différentes pour chacune des trois demandes précédentes.
    Je veux bien donner pour ta demande une quatrième solution, encore différente elle-même, mais :

    - 1) : confirme-moi ici qu'il ne s'agit que d'un besoin personnel et non d'un devoir à faire
    Je te préviens : s'il s'agit d'un devoir, la solution que je me prépare à te donner te mettra dans un embarras certain car je vais la coder de telle manière qu'un examinateur comprendra immédiatement qu'elle ne peut être le fruit de ton propre travail (ni de l'un quelconque de ses élèves). Il aura d'ailleurs sans doute lui-même des difficultés à l'analyser, bien que constatant son bon fonctionnement. Il t'interrogera alors et tu ne seras pas capable d'expliquer la moindre petite partie du mécanisme que je vais construire.
    S'il s'agit par contre vraiment d'un simple besoin personnel ponctuel et que ce que tu dis là :
    Je n'y connais rien en programmation
    est vrai : --->> il te suffira de copier/coller mon code, sans plus ...(et donc sans explication aucune)

    - 2) ce que je mettrai alors en oeuvre ne sera cette fois-ci que mathématiques (les trois autres fois ayant été un mélange d'arithmétique et de fonctions VBA. Et - je le répète - je m'interdis de faire deux fois la même chose ... question de principe personnel ...)

    - 3) précise-moi :
    --- a) le nom de la feuille où se situent tes données sources
    --- b) le N° de la ligne et le N° de la colonne du 1er titre de ton "tableau" (de la cellule, donc, où se trouve le titre "Association")
    --- c) confirme-moi que les colonnes montrées dans l'image que tu as jointe sont celles montrées et aucune autre
    --- d) ton "image" ne montre pas ce que tu as (et comment transposer cette donnée) dans la colonne "Adresse" -->> précise cela maintenant car si je ne l'inclus pas d'ores et déjà dans mon mécanisme, tu seras totalement incapable de le faire toi-même ensuite.
    --- e) le nom de la feuille de destination du résultat et l'emplacement de ce résultat sur ladite feuille.

    Je t'attends
    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.

  5. #5
    Candidat au Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2014
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Avril 2014
    Messages : 6
    Points : 3
    Points
    3
    Par défaut
    Merci pour ton retour.

    Je vais chercher les autres solutions auxquelles tu fais référence sur le forum.
    Je te confirme qu'il s'agit d'un besoin associatif/professionnel et non d'enseignement. L'objectif est de recenser tous les acteurs oeuvrant pour l'accueil des migrants sur un territoire donné pour pouvoir le modéliser l'écosystème via le logiciel "Kumu.io" et les tables de Kumu fonctionne par ligne pour chaque label et chaque connexion nécessitant un retraitement manuel lourd de notre table.

    Voici en réponse à ta demande de précision :
    --- a) le nom de la feuille où se situent tes données sources : "Fiches dispositifs"
    --- b) le N° de la ligne et le N° de la colonne du 1er titre de ton "tableau" (de la cellule, donc, où se trouve le titre "Association") : "B2"
    --- c) confirme-moi que les colonnes montrées dans l'image que tu as jointe sont celles montrées et aucune autre : non en effet notre table est plus complexe, voici la succession des colonnes :
    NUMERO ; Nom du dispositif ; Mission ; Organisation ; adresse ; Ville ; Alimentation ; Accès aux droits ; Mobilité ; Santé ; Insertion sociale ; Emploi / Formation professionnelle ; Langue ; Education ; Protection de l'enfance ; Protection des femmes ; Hygiène / Vestimentaire ; Hébergement ; Logement ; Répit ; Niveau d'implication dans l'accueil de migrants
    --- d) ton "image" ne montre pas ce que tu as (et comment transposer cette donnée) dans la colonne "Adresse" -->> précise cela maintenant car si je ne l'inclus pas d'ores et déjà dans mon mécanisme, tu seras totalement incapable de le faire toi-même ensuite : il y a en fait deux champs pour l'adresse "adresse" qui contient le numéro et le nom de la rue et un champ "Ville" qui contient donc le nom de la ville.
    --- e) le nom de la feuille de destination du résultat et l'emplacement de ce résultat sur ladite feuille : peu importe tant qu'il s'agit d'une feuille nouvelle n'altérant pas la feuille "Fiches dispositifs".

    Cette aide serait précieuse pour nos travaux qui n'ont rien à voir avec de la programmation mais relève de mise en oeuvre de politiques publiques en lien avec les acteurs associatifs.

    Bien cordialement

  6. #6
    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
    Ta réponse d) n'est pas complète. Elle ne me dit pas ce qu'il faut faire de ces adresses lors de la "transposition" !
    Il sera certainement plus simple que tu montres maintenant ici les deux images (images et non fichier joint) suivantes :
    1) une image complète de la feuille source (quelques lignes, toutes colonnes présentes)
    1) une image complète de la feuille destination voulue.

    C'est très important car je doute très fort qu'il sera ensuite possible, si l'on ne maîtrise pas vraiment certains mécanismes, de procéder à des "ajouts" dans mon code).

    Je m'occuperai de cela en fin de soirée, au vu de ta réponse précise.
    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.

  7. #7
    Candidat au Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2014
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Avril 2014
    Messages : 6
    Points : 3
    Points
    3
    Par défaut
    Comme demandé, voici l'image de la table initiale:
    Nom : Fiches dispositifs.PNG
Affichages : 456
Taille : 18,3 Ko

    Et voici le résultat de la table attendue :
    Nom : Kumu.PNG
Affichages : 530
Taille : 24,0 Ko

  8. #8
    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
    Désolé, mais :
    1) je ne vois pas où tu "puises" les données qui figrurent dans la colonne H du résultat (Niveau d'implication dans l'accueil des migrants) !
    2) ta première image n'est pas complète. C'est évident. On n'y voit par exemple aucune colonne "Répit" alors que ce contenu est apparent dans le tableau des résultats !

    J'insiste donc : il est IMPERATIF que ton image 1 montre la TOTALITE utilisée. Si ton image est trop large, redimensionne-la donc (même si colonnes alors mal lisibles, je saurais utiliser cette image, mais entière ...hein ...).
    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.

  9. #9
    Candidat au Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2014
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Avril 2014
    Messages : 6
    Points : 3
    Points
    3
    Par défaut
    En effet j'ai coupé l'image par souci de lisibilité, voici la capture complète :

    Nom : Fiches dispositifs 2.PNG
Affichages : 514
Taille : 14,5 Ko

  10. #10
    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
    Bien
    Voici qui me permet maintenant de travailler en connaissance de cause.
    Je m'occuperai de cela cette nuit, à mon retour de la pêche.
    A plus.
    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.

  11. #11
    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
    Bon (en honneur à une belle louvine qui s'est bien défendue)
    Prépare une feuille "Résultat" en ne te préoccupant que des couleurs et des dimensions des colonnes. N'y écris rien (je l'efface de toutes manières)
    Sur ta feuille Fiches dispositifs, ce code (dans une macro ou au click d'un bouton) :
    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
    Dim dl As Long, t0 As Range, t1 As Range, i As Long, d0 As Long, d1 As Long, k As Integer
     Dim ou As Long, b As Long, c As String, q As String
      dl = Range("A" & Rows.Count).End(xlUp).Row
      Set t0 = Worksheets("Fiches dispositifs").Range("A1:U" & dl)
      Set t1 = Worksheets("Resultat").Range("A1:U60000")
      Worksheets("Resultat").Cells.ClearContents
      For i = 1 To 6
        t1(i) = t0(i)
      Next
      t1(7) = "Besoins": t1(8) = t0(21)
      ou = 22:   b = 21
      For i = 22 To (WorksheetFunction.CountIf(t0, "x") + WorksheetFunction.CountIf(t0, "X") + 1) * 21
        If LCase(t0(i)) = "x" Then
          d0 = IIf(i Mod b = 0, b, i Mod b):   q = t0(d0)
          d1 = IIf(i Mod b = 0, (i - 1) \ b, 1 + (i \ b) * b)
          c = t0(d1):   t1(ou) = c: t1(ou + 6) = q
          For k = 1 To 5
            t1(ou + k) = t0(d1 + k)
          Next
          t1(ou + 7) = t0(d1 + 20)
          ou = ou + b
        End If
      Next
    Ce code fait très exactement ce que tu dis vouloir.
    Attention : ta feuille "Fiches dispositifs" doit être disposée très exactement (et aux même cellules) que sur l'image que tu as déposée.
    Lance et regarde tes résultats en feuille "Resultat"

    Tel qu'écrit là, ce code ne pourra être modifié (si feuille source réorganisée) que par un développeur aguerri, sachant analyser et maîtrisant ce genre de mécanisme. Les autres : s'abstenir, sinon -->> dégâts garantis.

    J'ai VOULU faire cela ainsi :
    1) pour ne pas copier mes propres codes antérieurs
    2) dans le but(l'esprit de mon message 4) que j'ai exposé plus haut (impossible de le présenter à un examinateur éventuel).

    Ceci étant dit : je vois bien que le but apparent est plus qu'honorable.
    Il me sera agréable (mais après avoir laissé passer un délai de un mois), de tout réécrire (autre mécanisme) de sorte à en faciliter la maintenance ou l'évolution.
    Il te suffira alors de revenir ici et de me le demander dans un mois -->> je ferai
    Voilà.
    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.

  12. #12
    Candidat au Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2014
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Avril 2014
    Messages : 6
    Points : 3
    Points
    3
    Par défaut
    C'est parfait, je te remercie sincèrement pour ton aide. Nous devrions finaliser la modélisation de notre écosystème en fin de semaine. Je t'en tiendrai informé pour que tu puisses en voir la finalité. Bonne pêche pour la suite !

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

Discussions similaires

  1. [XL-2016] Transposer des données avec des données fixes
    Par Feupy dans le forum Excel
    Réponses: 5
    Dernier message: 02/03/2016, 17h28
  2. Réponses: 3
    Dernier message: 24/12/2015, 11h58
  3. Réponses: 2
    Dernier message: 15/04/2005, 15h51
  4. Importer des données dans sql server avec DELPHI ???
    Par moutanakid dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 11/08/2004, 17h22

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