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

julien_débutant_sur_excel -  
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 !
Configuration: Windows XP Internet Explorer 6.0

4 réponses

  1. Contributeur
    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
    1. 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
      1. Contributeur
        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
        1. Contributeur
          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