Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

XL 2010 Comment réorganiser des données en lignes possédant des colonnes partiellement différentes

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Grenouille80

XLDnaute Nouveau
Bonjour,

J'ai beaucoup de données en lignes qui ne contiennent pas toutes les mêmes colonnes. J'aimerais pouvoir les combiner ensemble (les lignes les unes par dessus les autres dans le même fichier et donc un même tableau) et que toutes les colonnes possibles soient là, quitte à ce qu'il y ait des cellules vides dans mon tableau.

C'est Excel 2010.

Un énorme merci!
 

Pièces jointes

Dernière édition:
Bonsour® 🙁 l'exemple est trop succinct...

- peut-il y avoir des noms en doublons ?
- ces noms (clé ou Id) sont-ils toujours dans la même colonne ?
- le groupe de données est-il toujours constitué de 2 lignes : entêtes et données ?
- existe-t-il une liste des entêtes possibles ?

- fréquence de cette mise en forme ?
- les données viennent-elles de :
_ fichiers séparés (.xls ou .txt)
_ onglets séparés
_ lignes multiples(plusieurs Clé ou Id) dans la même source

😳 Pour un travail à façon le cahier des charges est trop mince ...
et ce n'est pas ici !!!​
 
Bonjour Grenouille80, chris, Modeste geedee,

Le problème me paraît très clair.

Seulement pour repérer facilement les tableaux à consolider le plus simple est de les organiser en tableaux Excel.

Voyez le fichier joint et cette macro :
Code:
Sub Consolider()
Dim dest As Range, d As Object, LO As ListObject, nlig&, c As Range, n%
Dim tablo(), titres As Range, cc%, r As Range, i&, j%
With Feuil1 'CodeName de la feuille
    Set dest = .[I3] '1ère cellule des résultats, à adapter
    '---titres---
    Set d = CreateObject("Scripting.Dictionary")
    d.CompareMode = vbTextCompare 'la casse est ignorée
    For Each LO In .ListObjects
        nlig = nlig + LO.DataBodyRange.Rows.Count
        For Each c In LO.HeaderRowRange
            If Not d.exists(c.Value) Then n = n + 1: d(c.Value) = n
    Next c, LO
    dest.Resize(, n) = d.keys 'restitution
    '---tableau des valeurs---
    ReDim tablo(1 To nlig, 1 To n)
    For Each LO In .ListObjects
        Set titres = LO.HeaderRowRange
        cc = titres.Count
        For Each r In LO.DataBodyRange.Rows
            If r.Cells(1) <> "" Then
                i = i + 1
                For j = 1 To cc
                    tablo(i, d(titres(j).Value)) = r.Cells(j)
                Next j
            End If
    Next r, LO
    dest(2).Resize(nlig, n) = tablo 'restitution
End With
End Sub
A+
 

Pièces jointes

- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
3
Affichages
316
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…