Regrouper des données

pad01

XLDnaute Occasionnel
Bonjour le Forum,
Je dois regrouper par personne le volume total de km des déplacements et le nombre total de déplacement.
Les données sont enregistrées sur une base par date et lieu de déplacement (feuil Base). Je voudrais récupérer par nom le nombre total de kilomètre parcouru et le nombre de déplacement (feuil Récap).
Je ne sais pas s'il faut faire du VBA ou de la formule (matricielle ?)
Merci de votre aide
 

Pièces jointes

  • Déplacement Pad01.xlsx
    8.8 KB · Affichages: 38

pad01

XLDnaute Occasionnel
Re : Regrouper des données

Bonjour CHALET53, le Forum,
Super, cela correspond a la solution finale.
Le problème est de récupérer les noms car je n'ai pas la cette information initiale.
Donc dans un premier temps, il faudrait récupérer les noms sans doublon (A, B, C et D) puis récupérer le kilométrage et le nombre de déplacement.
Merci CHALET53 de cette précieuse aide.
A+
 

Dranreb

XLDnaute Barbatruc
Re : Regrouper des données

Bonjour.

Voir solution avec ma fonction GroupOrg.

Remarque: la présence éventuelle d'un même nom en double dans une ligne n'est pas vérifiée. Le voyage serait compté plusieurs fois pour cette personne.
 

Pièces jointes

  • GrpOrgPad01.xls
    140 KB · Affichages: 45
Dernière édition:

job75

XLDnaute Barbatruc
Re : Regrouper des données

Bonjour pad01, CHALET53, Bernard,

Une solution très classique avec 2 objets "Dictionary" :

Code:
Private Sub Worksheet_Activate()
Dim t, ncol%, d1 As Object, d2 As Object, i&, j%, nom$, a, b, c
t = Feuil1.[A1].CurrentRegion 'CodeName de la feuille
ncol = UBound(t, 2)
Set d1 = CreateObject("Scripting.Dictionary")
Set d2 = CreateObject("Scripting.Dictionary")
For i = 2 To UBound(t)
  For j = 4 To ncol
    nom = t(i, j)
    If nom <> "" Then
      d1(nom) = d1(nom) + t(i, 3)
      d2(nom) = d2(nom) + 1
    End If
  Next
Next
If d1.Count Then
  '---transposition---
  ReDim t(d1.Count - 1, 2) 'base 0
  a = d1.keys: b = d1.items: c = d2.items
  For i = 0 To d1.Count - 1
    t(i, 0) = a(i): t(i, 1) = b(i): t(i, 2) = c(i)
  Next
  '---restitution et tri---
  Application.ScreenUpdating = False
  With [A2].Resize(i, 3)
    .Value = t
    .Borders.Weight = xlThin 'bordures
    .Sort .Columns(1), xlAscending, Header:=xlNo
  End With
End If
Range("A" & d1.Count + 2 & ":C" & Rows.Count).Delete xlUp
End Sub
Fichier joint.

A+
 

Pièces jointes

  • Déplacement Pad01(1).xlsm
    17.8 KB · Affichages: 45

Discussions similaires

Statistiques des forums

Discussions
312 047
Messages
2 084 857
Membres
102 688
dernier inscrit
Biquet78