Regroupement de données de 2 tableaux

pitchie1808

XLDnaute Nouveau
Salut tout le monde,

Je désespère de trouver une solution à mon problème.
J'ai 2 tableaux: 1 reprenant des facturations, et 1 reprenant des livraisons.
Je cherche à partir des données de livraisons de regrouper les données de facturation par référence.

Sur le fichier exemple, en gros je cherche à remplir le tableau à créer par les données en rouge.

Si quelqu'un a une solution à proposer, je suis preneur.....

Merci beaucoup
 

Fichiers joints

pitchie1808

XLDnaute Nouveau
Salut,
J'ai du mal m'exprimer.
En fait, à partir du tableau livraison en haut à droite, je veux faire un tableau récapitulatif (en bas à droite) qui ferait une sorte de sous total par référence (ex : la référence 1234 qui est sur plusieurs lignes se retrouve sur une seule ligne avec la quantité totale), avec une recherche de toutes les factures qui s'y rapportent (tableau en haut à gauche) et les quantités facturées.

Je sais pas si je suis plus clair là..... La recherchev va me donner la première donnée du tableau mais pas l'exhaustivité des données (il me ramènera la première facture trouvée mais pas toutes.).


Merci en tout cas pour ta réponse rapide.
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Bonsoir pitchie1808,

Dans le tableau résultat, la référence 4567 a une quantité livrée de 1. Ne serait ce pas plutôt une quantité livrée égale à 2 ?
 

pitchie1808

XLDnaute Nouveau
Super, mais de K17 à K20 doit aussi être le résultat d'une formule. Tout ce qui est en rouge doit être une formule qui récupère les données des tableaux en fonction des cellules I et J 17 à 20.

En tout cas merci beaucoup, c'est déjà pas mal.
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Re,

Pour ce que j'en ai compris, un essai via une macro VBA. Cliquez sur le bouton Hop !

La macro est dans module1.
VB:
Sub Regrouper()
Dim Fact, Livre, dicFact, dicLivre, Res, ref, fac
Dim i&, n&, k&

   Application.ScreenUpdating = False
   With Sheets("feuil1")
      i = .Cells(.Rows.Count, "f").End(xlUp).Row
      Livre = .Range("f5:g" & i).Value
      i = .Cells(.Rows.Count, "b").End(xlUp).Row
      Fact = .Range("b5:d" & i).Value
      Set dicLivre = CreateObject("scripting.dictionary")
      For i = 1 To UBound(Livre)
         dicLivre(CStr(Livre(i, 1))) = dicLivre(CStr(Livre(i, 1))) + Livre(i, 2)
      Next i
    
      ReDim Res(1 To dicLivre.Count * UBound(Fact), 1 To 4)
      n = 0
      For Each ref In dicLivre.keys
         Set dicFact = CreateObject("scripting.dictionary")
         For k = 1 To UBound(Fact)
            If CStr(Fact(k, 1)) = ref Then
               dicFact(Fact(k, 2)) = dicFact(Fact(k, 2)) + Fact(k, 3)
            End If
         Next k
        n = n + 1
        Res(n, 1) = CLng(ref)
         Res(n, 2) = dicLivre(ref)
         n = n - 1
         For Each fac In dicFact
            n = n + 1
            Res(n, 3) = fac
            Res(n, 4) = dicFact(fac)
         Next fac
      Next ref
    
      .Range("i5:L" & .Rows.Count).Clear
      .Range("i5").Resize(n, 4) = Res
      .Range("i5").Resize(n, 4).Borders.LineStyle = xlContinuous
      .Range("i5").Offset(, 2).Resize(n, 2).Font.Color = RGB(255, 0, 0)
   End With
End Sub
 

Fichiers joints

Staple1600

XLDnaute Barbatruc
Bonsoir le fil, le form

@mapomme
[aparté]
Pointillisme d'avant minuit quand tu nous tiens
(à tester sur une feuille vide)
VB:
Sub PointOuPasPoint()
Dim i&,j&
With ActiveSheet
    .Range("A1:A1600") = [PI()]
    i = .Cells(Rows.Count, 1).End(xlUp).Row 'sans le point
    j = .Cells(.Rows.Count, 1).End(xlUp).Row 'avec le point
End With
MsgBox i & Space(3) & j
End Sub
[/aparté]
Cet aparté était motivé simplement par le plaisir de croiser mapomme ;)
(avec un petit taquinement d'avant dodo en bonus)
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Bonsoir taquin Staple1600 ;),

Pointillisme d'avant minuit quand tu nous tiens
(à tester sur une feuille vide)
J'avais l'habitude de ne pas utiliser le point pour Rows.Count et Columns.Count.
Puis on m'a demandé de commenter un code l'utilisant. Pour ne pas me lancer dans de longues explications pour un néophyte en VBA, j'ai décidé depuis de préfixer ces deux termes. D'ailleurs, cela me semble respecter une certaine logique. On travaille sur une feuille et cette feuille est désignée au moyen de With... donc on utilise le point pour des propriétés relatives à cette feuille. Même si la propriété est identique quelque soit la feuille.

Quoique ! Dans le fichier joint, un exemple (de derrière les fagots) où le point est indispensable. Cliquer sur le bouton Hop! de la feuille graphique :p

Bonnet de nuit :cool:
 

Fichiers joints

Dernière édition:

Staple1600

XLDnaute Barbatruc
Re

Je me dispense de l'indispensable ;)
VB:
Sub PointOuPasPoint()
Dim i&, j&, z&
z = Feuil1.Rows.Count
With Sheets("Feuil1")
      j = .Cells(z, 1).End(3).Row   'sans le point
      i = .Cells(z, 1).End(3).Row   'le point, non merci
End With
MsgBox i & Space(1600 / 1600) & j
End Sub
By the way, tu peux m'expliquer pourquoi End(xlUP) équivaut à End(3), stp.
(Pour t'aider dans le solutionnement de la chose, enfin peut-être ;) )
https://www.excel-downloads.com/threads/de-laide-pour-une-macro-boucle.20021658/page-4
 

Discussions similaires


Haut Bas