Organisation des données

lry

XLDnaute Nouveau
Bonjour,
Utilisateur basique de excel, j'ai besoin d’organiser des données et je ne sais pas trop par ou attaquer mon problème. Cela ne me semble pas insurmontable mais ...
Plutôt qu'un gros blabla incompréhensible, je joints un fichier explicatif. si quelqu'un peu me mettre sur le chemin.
Merci d'avance
 

Pièces jointes

  • exemple.xlsx
    12 KB · Affichages: 37
  • exemple.xlsx
    12 KB · Affichages: 39
  • exemple.xlsx
    12 KB · Affichages: 38

Robert

XLDnaute Barbatruc
Repose en paix
Re : Organisation des données

Bonsoir Iry, Gareth, bonsoir le forum,

Une proposition VBA avec le code ci-dessous :
Code:
Sub Macro1()
Dim dl As Integer 'déclare la variable dl (Dernière Ligne)
Dim pl As Range 'déclare la variable pl (PLage)
Dim dico1 As Object 'déclare la variable dico1 (DICtiOnnaire 1)
Dim cel1 As Range 'déclare la variable cel1 (CELlule 1)
Dim temp1 As Variant 'déclare la variable temp1 (tableau TEMPoraire 1)
Dim i As Integer 'déclare la variable i (Incrément)
Dim dico2 As Object 'déclare la variable dico2 (DICtiOnnaire 2)
Dim cel2 As Range 'déclare la variable cel2 (CELlule 2)
Dim temp2 As Variant 'déclare la variable temp2 (tableau TEMPoraire 2)
Dim r As Range 'déclare la variable r (Recherche)
Dim x As Integer 'déclare la variable x (incrément)
Dim j As Integer 'déclare la variable j (incrément)

Application.ScreenUpdating = False 'masque les changements à l'écran
With Sheets("Feuil1") 'prend en compte l'onglet "Feuil1"
    dl = .Cells(Application.Rows.Count, 1).End(xlUp).Row 'définit la dernière liogne éditée dl de la colonne 1 (=A)
    Set pl = .Range("A5:A" & dl) 'définit la plage pl
    Set dico1 = CreateObject("Scripting.Dictionary") 'définit le dictionnaire dico1
    For Each cel1 In pl.Offset(0, 1) 'boucle sur toutes les cellules cel1 de la plage pl décalé de une colonne à droite (B)
        dico1(cel1.Value) = "" 'alimente le dictionnaire
    Next cel1 'prochaine cellule de la boucle
    temp1 = dico1.keys 'récupère le dictionnaire dico1 sans doublon dans le tableau temp1
    For i = LBound(temp1) To UBound(temp1) 'boucles sur toutes les éléments du tableau temp1
        .Range("A4").AutoFilter 'lance le filtre automatique
        .Range("A4").AutoFilter Field:=2, Criteria1:=temp1(i) 'filtre la colonne 2 (=B) selon le critère : élément du tableau temp1
        Set dico2 = CreateObject("Scripting.Dictionary") 'définit le dictionnaire dico2
        For Each cel2 In pl.SpecialCells(xlCellTypeVisible) 'boucle sur toutes les cellules cel2 des lignes visible de la plage pl
            dico2(cel2.Value) = "" 'alimente le dictionnaire dico2
        Next cel2 'prochaine cellule de la boucle
        temp2 = dico2.keys 'récupère le dictionnaire dico2 sans doublon dans le tableau temp2
        'définit la recherche r (recherche la valeur temp1(i) dans la colonne 1 de l'onglet "Feuil2"
        Set r = Sheets("Feuil2").Columns(1).Find(temp1(i), , xlValues, xlWhole)
        x = 1 'initialise la variable x
        For j = LBound(temp2) To UBound(temp2) 'boucles sur toutes les éléments du tableau temp2
            .Range("A4").AutoFilter Field:=1, Criteria1:=temp2(j) 'filtre la colonne 1 (=A) selon le critère : élément du tableau temp2
            Range(r.Offset(x, 0), r.Offset(x, 1)).Insert Shift:=xlDown 'insère deux cellules sour r
            Range(r.Offset(x, 0), r.Offset(x, 1)).Interior.ColorIndex = xlNone 'couleur blances dans les cellules insérées
            'place sour r la valeur de temp2(j), place à cotés la somme
            r.Offset(x, 0).Value = temp2(j): r.Offset(x, 1).Value = Application.WorksheetFunction.Sum(pl.Offset(0, 2).SpecialCells(xlCellTypeVisible))
            x = x + 1 'incrément i
        Next j 'prochain élément du tableau temp2
        .Range("A4").AutoFilter 'annule le filtre automatique
    Next i 'prochain élément du tableau temp1
End With 'fin de la prise en compte de l'onglet "Feuil1"
Application.ScreenUpdating = True 'affiche les changements à l'écran
End Sub
Le fichier :
 

Pièces jointes

  • Iry_v01.xls
    49 KB · Affichages: 30

Discussions similaires

Statistiques des forums

Discussions
312 612
Messages
2 090 227
Membres
104 453
dernier inscrit
benjiii88