Excel_2 tblx en 1 meme libéllés ordres diff

Fermé
julien_débutant_sur_excel - 25 mai 2009 à 16:35
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 - 25 mai 2009 à 21:55
Bonjour,

J'extrais régulièrement des informations de deux bases de données différentes, que je dois assembler.
Comme j'utilise pour cela le même outil j'obtiens sur Excel :
Deux tableaux (sur des feuilles différentes) ayant la même nature d'information et les mêmes libéllés de colonnes.
Cependant, les colonnes ne sont pas du tout dans le même ordre.
Je souhaite effectuer un manip la plus rapide possible, à fin d'assembler le tout dans un meme tableau.
Ainsi je pourrais exploiter une base de donnée homogène, pour des tableaux croisés dynamiques notamment.

Le principe est donc : de reconnaitre deux colonnes ayant le même ilibéllé, se trouvant sur deux feuilles différentes et de mettre à la suite les informations de ces deux colonnes dans uen même colonne.

PS: plus de 80 colonnes et ordres complétement différents, mais libéllés identiques.

Si vous parvenez à m'aider vous me ferrez gagner un paquet de temps !

Alors un grand merci d'avance !

4 réponses

michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 306
25 mai 2009 à 16:59
bonjour,
J'extrais régulièrement des informations de deux bases de données différentes

c'est peut-être au niveau de cette extraction qu'il faudrait agir...
donc, quel est le logiciel base de données ,
quel est ce même outil ?

Met un extrait de ces 2 feuilles (quelques lignes suffiront) pour qu'on puisse étudier le problème par une méthode ou une autre. Dis nous quand m^me combien de lignes environ sont en voyées par les 2 bases
pour envoyer
https://www.cjoint.com/
et tu copes le lien proposé par le message
0
julien_débutant_sur_excel
25 mai 2009 à 17:55
Merci pour votre réponse rapide,

Il s'agit d'une base de donnée du type "cube à trois dimension".
Nous avons retourné le probleme dans tous les sens, malheureusement à la base ca n'est pas fait pour des exportation en tableur.

Les tableaux sous Ecxel se présentent comme cela:

A B C D
1 Date Poste Entreprise Solde
2 01/01/2001 X L 4
3 01/01/2001 Y M 5
4 01/01/2001 Z N 6

A B C D
1 Entreprise Poste Solde Date
2 L X 4 01/01/2001
3 M Y 5 01/01/2001
4 N Z 6 01/01/2001


Et je souhaite "juste" compiler ceci dans une meme base homogene (81 colonnes et une moyenne de 6000 lignes)
D'avance merci !
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 306
25 mai 2009 à 18:10
OK, je vois a peu près le topo
intéressant!
le principe serait de
1/ construire un tableau VBA (array) à 2 dimensions: titre et numéro de colonne pour la 1° feuille

2/ rechercher la colonne (par ex date) dans la feuille 2 avec son numéro de colonne et de la copier sous la dernière ligne utilisée de date en feuil1 (on connait le numéro de colonne par le tablau -array)

Je regarderai ça à la fraiche demain à moins qu'avec ce principe, tu te sentes "capdel'faire" (tu le dis, merci)
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 306
25 mai 2009 à 21:55
re,
important : les premiers champs sont en colonne A
ci dessous macro proposée à adapter
maquette de travail:
https://www.cjoint.com/?fzv26RY5Yi

Option Explicit

Sub ranger_col()
Dim der_col As Byte, lig_vid As Long
Dim tablo
Dim cptr As Byte, col As Byte
Dim der_lig2 As Long

'initialisation
With Sheets("maitre")
    der_col = .Range("IV1").End(xlToLeft).Column
    lig_vid = .Range("A65536").End(xlUp).Row + 1
    'memorise les noms de champ feuille maitre
    tablo = .Range(.Cells(1, 1), .Cells(1, der_col))
End With

'rcherche la position des champs dans feuille second
With Sheets("second")
    'nbre de ligne feuille second
    der_lig2 = .Range("A65536").End(xlUp).Row
    
    Application.ScreenUpdating = False
    For cptr = 1 To der_col
        'recherche la colonne du champ renvoyé par le compteur du tablo
        col = Application.Match(tablo(1, cptr), .Range(.Cells(1, 1), .Cells(1, der_col)), 0)
        'copie la colonne dans maitre
       .Range(.Cells(2, col), .Cells(der_lig2, col)).Copy Sheets("maitre").Cells(lig_vid, cptr)
   Next
End With
End Sub
0