XL 2016 Croiser 2 tableaux

HelloDy

XLDnaute Junior
Bonjour à tous,

Je dispose de deux tableaux de 7 colonnes et X et Y lignes. Les tableaux sont identiques dans leur format, seul le contenu change ainsi que le nombre de lignes.
J'aurais besoin de faire "matcher" ces tableaux et d'en obtenir un 3ème contenant l'ensemble des lignes qu'ont les 2 tableaux en commun.
Et si possible par ailleurs faire disparaître les lignes en commun des deux premiers.
Y a-t-il une manière "simple" d'y arriver ?

Merci beaucoup :)


Elo
 

HelloDy

XLDnaute Junior
Bonsoir @BOISGONTIER,

Oui j'y ai pensé mais ils contiennent des infos confidentielles, et supprimer ces infos enlèverait tout intérêt de les joindre ^^
Merci pour les liens, je vais y jeter un oeil :)

Bonne soirée.

Edit : je viens de regarder les 2 exemples mais ça ne correspond pas à ce que je cherche malheureusement. Je cherche à extraire les lignes identiques dans 2 tableaux, pas à "assembler" 2 tableaux. Merci quand même pour ces exemples qui pourront me servir une prochaine fois :)

Elo
 
Dernière édition:

chris

XLDnaute Barbatruc
Bonjour

Faisable facilement par une requête PowerQuery, intégré à ta version pour traiter les communs. Il faut définir les points communs.

On peut aussi faire le delta pour chaque tableau : le résultat de la requête sera à déconnecté de la source qui pourra être supprimée.
 

laurent950

XLDnaute Accro
Bonsoir Chris;
J'aimerais bien essayer un Power Query, Vous avez un exemple pour comprendre le fonctionnement s'il vous plaît Chris

Ps : Hello Dy (ce n'est pas très compliqué à mettre en oeuvre, il faut juste écrire le petit bout d’algorithmes, aussi j'aurais bien aimé apprendre avec PowerQuery aussi.
Lien : https://support.office.com/fr-fr/ar...er-query-7104fbee-9e62-4cb9-a02e-5bfb1a6c536a

J'ai compris le principe, Merci Chris pour cette info que je ne connaissais pas.

Laurent
 
Dernière édition:

BOISGONTIER

XLDnaute Barbatruc
Repose en paix
VB:
Sub Communs()
  a = Sheets(1).Range("B2:B" & Sheets(1).[B65000].End(xlUp).Row)
  Set MonDico1 = CreateObject("Scripting.Dictionary")
  For i = 1 To UBound(a)
   MonDico1(a(i, 1)) = i
  Next i
  b = Sheets(2).Range("B2:B" & Sheets(2).[B65000].End(xlUp).Row)
  Tbl2 = Sheets(2).Range("A2:G" & Sheets(2).[B65000].End(xlUp).Row)
  Set mondico2 = CreateObject("Scripting.Dictionary")
  For i = 1 To UBound(b)
    If MonDico1.exists(b(i, 1)) Then If Not mondico2.exists(b(i, 1)) Then mondico2(b(i, 1)) = i
  Next i
  ReDim Tbl3(1 To mondico2.Count, 1 To UBound(Tbl2, 2))
  j = 0
  For Each k In mondico2.keys
    j = j + 1: ligne = mondico2(k)
    For i = 1 To UBound(Tbl2, 2)
      Tbl3(j, i) = Tbl2(ligne, i)
    Next i
  Next k
  Sheets(3).[A2].Resize(UBound(Tbl3), UBound(Tbl3, 2)) = Tbl3
End Sub

Boisgontier
 

Pièces jointes

  • Communs2BD.XLS
    116 KB · Affichages: 6

chris

XLDnaute Barbatruc
Re
Il faut charger chacun des tableau dans PowerQuery
Puis faire une requête de fusion en faisant correspondre chacune des colonnes en jointure interne
Seules restent les lignes correspondantes

1036722

Pour les autres lignes (non concordance) refaire de même, une fois par table (Fich1 en premier, puis Fich2 en premier) mais en jointure externe gauche.
On déplie un champ de la table liée et on filtre les null
1036723

1036724
 
Dernière édition:

chris

XLDnaute Barbatruc
Re

Si tu pars d'un fichier vierge, Données, Obtenir des données, A partir d'un fichier, A partir d'un classeur.

Cela va ouvrir l'interface PowerQuery, tu auras à choisir l'onglet et le contenu s'affichera.

Pour le second tu peux la faire depuis l'interface PowerQuery : Accueil, Nouvelle source, Fichier, Excel

Tes fichiers ne sont pas clean donc sur chaque il faut filtrer le N° de commande pour éliminer null avant de les croiser
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 113
Messages
2 085 426
Membres
102 887
dernier inscrit
MarcVeretz