Fusionner 2 tableaux avec des données en communs (ou pas)

orichedo

XLDnaute Nouveau
Bonjour

je vous explique mon soucis.

J'ai 2 tableaux sur 2 onglets différents.

1er onglet des noms de clients et leur chiffres d'affaires sur 2014
2e onglet des noms de clients et leur chiffres d'affaires sur 2015

Certains clients sont présents sur les 2 onglets, d'autres que le 1er et d'autres que le 2e

J'aimerais pouvoir fusionner les données sur un 3e onglets avec en colonne A tous les noms (en évitant les doublons bien sûr), en colonne B les CA 2014 et en colonne C les CA 2015 .

Y'a-t-il une formule rapide pour faire cette opération ?

Merci d'avance pour votre aide.
 

Modeste

XLDnaute Barbatruc
Re : Fusionner 2 tableaux avec des données en communs (ou pas)

Bonjour orichedo,

Y'a-t-il une formule rapide pour faire cette opération ?
Heureusement que tu as dit "rapide" et pas "simple" :eek:

Pour extraire des noms sans doublons, issus de 2 feuilles différentes, j'utiliserais une macro, plutôt qu'une formule, en ce qui me concerne. Cette possibilité te conviendrait-elle?

Pour récupérer les CA, on devrait s'en sortir avec deux RECHERCHEV ...

Il faudrait que tu précises:
- le volume de données à traiter: une centaine de lignes ou ... plusieurs dizaines de milliers?
- tu es en mesure de garantir que deux entreprises différentes n'auront jamais le même nom?
- si tu dois faire cette manipulation une seule fois par année ou s'il faut tenir compte de modifications qui ont lieu 5 fois par jour?

L'idéal -comme tu l'as lu en parcourant Lien supprimé avec attention :rolleyes:- serait de joindre un fichier exemple (sans données confidentielles et en ne reprenant qu'une vingtaine ou une cinquantaine de lignes dans tes deux feuilles)
 

klin89

XLDnaute Accro
Re : Fusionner 2 tableaux avec des données en communs (ou pas)

Bonsoir le forum, orichedo
Salut Modeste :)

Du déjà vu, mais sans fichier, tu risques de revenir à la charge :rolleyes:
J'ai considéré qu'il y avait une ligne d'en-têtes dans chacune de tes feuilles.
A tester :
VB:
Option Explicit

Sub test()
Dim a, i As Long, w, x, y As Long
    a = Sheets(1).Range("a1").CurrentRegion.Value
    With CreateObject("Scripting.Dictionary")
        For i = 2 To UBound(a, 1)
            ReDim w(1 To 3)
            w(1) = a(i, 1): w(2) = a(i, 2)
            .Item(a(i, 1)) = w
        Next
        a = Sheets(2).Range("a1").CurrentRegion.Value
        For i = 2 To UBound(a, 1)
            If .exists(a(i, 1)) Then
                w = .Item(a(i, 1))
                w(3) = a(i, 2)
            Else
                ReDim w(1 To 3)
                w(1) = a(i, 1): w(3) = a(i, 2)
            End If
            .Item(a(i, 1)) = w
        Next
        x = .items: y = .Count
    End With
    Application.ScreenUpdating = False
    On Error Resume Next
    Application.DisplayAlerts = False
    Sheets("Résultat").Delete
    On Error GoTo 0
    Sheets.Add(after:=Sheets(Sheets.Count)).Name = "Résultat"
    With Sheets("Résultat").Cells(1)
        .Resize(1, 3).Value = Array("Clients", "CA 2014", "CA 2015")
        .Offset(1).Resize(y, 3).Value = _
        Application.Transpose(Application.Transpose(x))
        With .CurrentRegion
            .Font.Name = "calibri"
            .Font.Size = 10
            .VerticalAlignment = xlCenter
            .BorderAround Weight:=xlThin
            .Borders(xlInsideVertical).Weight = xlThin
            With .Rows(1)
                .BorderAround Weight:=xlThin
                .Interior.ColorIndex = 38
            End With
            .Columns.AutoFit
        End With
    End With
    Application.ScreenUpdating = True
End Sub
klin89
 

BOISGONTIER

XLDnaute Barbatruc
Repose en paix
Re : Fusionner 2 tableaux avec des données en communs (ou pas)

Bonsoir,

Code:
Sub fusion()
  Set d1 = CreateObject("Scripting.Dictionary")
  Set f1 = Sheets("ca2014")
  a = f1.Range("A2:B" & f1.[a65000].End(xlUp).Row)
  Set f2 = Sheets("ca2015")
  b = f2.Range("A2:B" & f2.[a65000].End(xlUp).Row)
  n = UBound(a) + UBound(b)
  Dim c: ReDim c(1 To n, 1 To 3)
  m = 0
  For i = LBound(a) To UBound(a)
    If Not d1.exists(a(i, 1)) Then m = m + 1: d1(a(i, 1)) = m: p = m Else p = d1(a(i, 1))
    c(p, 1) = a(i, 1): c(p, 2) = a(i, 2)
  Next i
  For i = LBound(b) To UBound(b)
    If Not d1.exists(b(i, 1)) Then m = m + 1: d1(b(i, 1)) = m: p = m Else p = d1(b(i, 1))
    c(p, 1) = b(i, 1): c(p, 3) = b(i, 2)
  Next i
  Sheets("fusion").[A2].Resize(d1.Count, UBound(c, 2)) = c
End Sub

fusion5.gif

JB
 

Pièces jointes

  • Fusion2014_2015.xls
    41.5 KB · Affichages: 68
Dernière édition:

Philippe Tulliez

XLDnaute Nouveau
Re : Fusionner 2 tableaux avec des données en communs (ou pas)

Bonjour,
Une autre solution à l'aide de la méthode Consolidate de l'objet Range
Pour l'exemple la feuille cible se nomme Consolidation, les feuilles sources 2014 et 2015. Il suffit de modifier la valeur des constantes se trouvant en tête de procédure.
Les données sources commencent en cellule A1 avec en ligne 1 les étiquettes de colonnes (Nom et CAaaaa) ou aaaa est l'année 2014 ou 2015
Il y a donc deux colonnes, la première contient les noms et la deuxième le chiffre d'affaires de l'année correspondant à la feuille source
Code de la procédure
Code:
Sub Consolidate()
 Const shtSourceNames As String = "2014;2015" ' Nom des feuilles sources
 Const shtTargetName As String = "Consolidation"
 Dim SheetNames() As String, rngSourceAddress() As String, sh As Byte
 Dim rngTarget As Range
 Set rngTarget = ThisWorkbook.Worksheets(shtTargetName).Range("A1")
 SheetNames = Split(shtSourceNames, ";")
 ReDim rngSourceAddress(UBound(SheetNames))
 ' Affectation des adresses des plages sources
 With ThisWorkbook
  For sh = 0 To UBound(SheetNames)
   rngSourceAddress(sh) = .Worksheets(SheetNames(sh)).Range("A1").CurrentRegion.Address(ReferenceStyle:=xlR1C1, external:=True)
  Next
 End With
 ' Consolidation
 With rngTarget
 .Worksheet.Cells.Clear ' Efface les cellules de la feuille cible
 .Consolidate sources:=rngSourceAddress(), Function:=xlSum, TopRow:=True, LeftColumn:=True
 End With
End Sub

Fichier exemple
 

Pièces jointes

  • 151213 xlD - Consolidate.xls
    50.5 KB · Affichages: 76
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
314 450
Messages
2 109 730
Membres
110 553
dernier inscrit
loic55