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

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

  • exemple_grenouille.xlsx
    8.3 KB · Affichages: 24
Dernière édition:

Modeste geedee

XLDnaute Barbatruc
Bonsour®
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!
:( 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

:oops: Pour un travail à façon le cahier des charges est trop mince ...
et ce n'est pas ici !!!​
 

job75

XLDnaute Barbatruc
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

  • exemple_grenouille(1).xlsm
    26.3 KB · Affichages: 12

job75

XLDnaute Barbatruc
Re,

On peut se passer du bouton et utiliser une macro évènementielle Worksheet_Change.

Voyez ce fichier (2), la macro est dans le code de la feuille (clic droit sur l'onglet et Visualiser le code).

A+
 

Pièces jointes

  • exemple_grenouille(2).xlsm
    27.9 KB · Affichages: 15

Discussions similaires

Membres actuellement en ligne

Statistiques des forums

Discussions
312 177
Messages
2 085 972
Membres
103 073
dernier inscrit
MSCHOE16