Regrouper des données

  • Initiateur de la discussion Initiateur de la discussion pad01
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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

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+
 
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

Dernière édition:
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

- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
4
Affichages
271
Réponses
16
Affichages
418
Retour