XL 2010 Comparer 2 colonnes sur 3 feuilles

Manutd7

XLDnaute Nouveau
Bonjour tout le monde,

Voila, j'essaie depuis plus de 2 heures et après avoir parcouru une multitude de forums de comparer 2 colonnes sur 3 feuilles mais en vain.

J'ai 3 feuilles Excel, sur chaque feuille, j'ai 2 colonnes, par exemple :

Feuille 1 (Janvier)

Colonne 1 (Utilisateur) - Colonne2 (Volume)

Arnaud - 0
Nicolas - 150
Pierre - 1500
Jamel - 400
Bertrand - 0

Feuille 2 (Février)

Colonne 1 (Utilisateur) - Colonne2 (Volume)

Léo - 150
Arnaud - 0
François - 300
Bertrand - 0
Marc - 10

Feuille 3 (Mars)

Colonne 1 (Utilisateur) - Colonne2 (Volume)

Bertrand - 0
Thibault- 150
François - 700
Jean - 450
Arnaud - 0

1 / Je souhaiterai sur une feuille 4 afficher sur 2 colonnes (Utilisateurs et volume) les utilisateurs ayant un volume à 0 sur les 3 mois (dans cet exemple, il y en a 2, Arnaud et Bertrand)

2/ Je souhaiterai sur une feuille 5 afficher sur 2 colonnes (Utilisateurs et volume) le total par utilisateur du volume des 3 mois. (dans cet exemple et su on prends François , ce sera 1000 et aisni de suite pour les autres).

Je suis preneur de toutes formules, ça me ferai gagner un maximum de temps :)

Merci par avance pour votre aide
 

gosselien

XLDnaute Barbatruc
Bonjour et désolé mais pouvez-vous m'indiquer ce que j'ai mal fait car je viens de lire la page est rien ne m'a sauté aux yeux.
La possibilité de joindre des fichiers est donnée sur ce forum. Ne pas hésiter à utiliser cette fonction, tout en veillant que les données soient bidons et donc qu’aucune donnée confidentielle, nominative ne soit dans le fichier.
 

gosselien

XLDnaute Barbatruc
re,

tout d'abord, il est inutile de mettre tes données (sauf si 100.000 / mois) dans des onglets différents :)
Tout regroupé dans un seul avec la date en + de l'utilisateur et du volume .
Une "base de données " a toujours un titre par colonne et une donnée dans chaque cellule.

Un tcd et ça roule
ps: tu n'as pas donné ta version XL :)
 

Pièces jointes

  • Exemple (3).xlsx
    14.8 KB · Affichages: 44

Manutd7

XLDnaute Nouveau
Merci Gosselien, c'est pas mal du tout, je connais pas les tableux croisés dynamique (mais je pars en formation Excel 2 jours dans 3 semaines pour voir ça entre autres).

Pour la version d'Excel, c'est Excel 2010, ça je l'avais bien mis dans le titre ;-)

Mon seul soucis, c'est que j'aurai bien voulu garder mes feuilles 1, 2 et 3 et avoir le résultat en feuille 4 car ta façon (qui est déjà super pour moi) me demande de préparer un nouveau tableau et comme ma vrai feuille 1 contient 5232 lignes et mes autres feuilles autant voir plus, ça serait plus pratique surtout que je vais devoir répéter l'opération régulièrement.

Tu crois que tu peux m'expliquer comment faire ça ?

Merci beaucoup
 

gosselien

XLDnaute Barbatruc
re,

Il doit y avoir plusieurs manières de faire, d'autres ici peuvent te conseiller mieux mais je persiste dans l'idée de tout mettre dans un seul onglet...

Toutefois, dans ce cas il faut venir y coller - avec le mois - les nouvelles données soit à la mimine soit par vba mais j'ai du mal s'il y a 2 fichiers moi...

Avec la version 2010 tu peux y aller niveau du nombre de lignes :) (5232 ce n'est pas la mer à boire)
Il est aussi possible de copier coller les 3 onglets dans un 4e en vba pour aller plus vite et de là faire le tcd.

On sait aussi, faire un TCD en ayant 3 sources différentes mais c'est un peu moins clair, les titres originaux disparaissant.
Attends de voir ce que des spécialistes peuvent dire :)

P.
 

klin89

XLDnaute Accro
Bonjour à tous, :)

Pour répondre à la deuxième question
Attention à bien calibrer la 1ère dimension de la variable b
VB:
Option Explicit
Sub test()
Dim a, b(), dico As Object, ws As Worksheet, n As Long, i As Long
    Set dico = CreateObject("Scripting.Dictionary")
    dico.CompareMode = 1
    'attention à la 1ère dimension
    ReDim b(1 To 100, 1 To 2)
    For Each ws In Worksheets([{"Feuil1","Feuil2","Feuil3"}])
        a = ws.Cells(1).CurrentRegion.Value
        For i = 2 To UBound(a, 1)
            If Not dico.exists(a(i, 1)) Then
                n = n + 1
                b(n, 1) = a(i, 1)
                dico(a(i, 1)) = n
            End If
            b(dico(a(i, 1)), 2) = b(dico(a(i, 1)), 2) + a(i, 2)
        Next
    Next
    With Sheets("Feuil5").Cells(1)
        .CurrentRegion.Clear
        .Resize(1, 2) = Array("Utilisateurs", "Volume")
        .Offset(1).Resize(n, UBound(b, 2)).Value = b
    End With
    Set dico = Nothing
End Sub
klin89
 
Dernière édition:

Manutd7

XLDnaute Nouveau
Bonjour Klin89 et merci pour le script,

Par contre je ne sais pas comment l'intégrer, je ne connais pas grand chose aux macros.

Pourrais-tu s'il te plait l'intégrer au fichier exemple.xlsx que j'ai uploadé sur le site ? Comme ça je suis sur que ça sera bien fait :)

Merci pour ton aide

PS : Bonjour Gosselien, j'ai réussi à faire un TCD à partir de mes 3 feuilles et avec un résultat sur la 4ième en m'inspirant du TDC que tu m'as fait, merci.
 

klin89

XLDnaute Accro
Re Manudt7 :)

Pour répondre à la 1ère question :
VB:
Option Explicit
Sub test1()
Dim a, i As Long, e, w(), dico As Object, ws As Worksheet
    Set dico = CreateObject("Scripting.Dictionary")
    dico.CompareMode = 1
    For Each ws In Worksheets
        If ws.Name <> "Feuil4" And ws.Name <> "Feuil5" Then
            a = ws.Cells(1).CurrentRegion.Value
            For i = 2 To UBound(a, 1)
                If Not dico.exists(a(i, 1)) Then
                    dico(a(i, 1)) = VBA.Array(a(i, 1), a(i, 2))
                Else
                    w = dico(a(i, 1))
                    w(1) = w(1) + a(i, 2)
                    dico(a(i, 1)) = w
                End If
            Next
        End If
    Next
    For Each e In dico.keys
        If dico.Item(e)(1) <> 0 Then
            dico.Remove e
        End If
    Next
    With Sheets("Feuil4").Cells(1)
        .CurrentRegion.Clear
        .Resize(1, 2) = Array("Utilisateurs", "Volume")
        If dico.Count > 0 Then
            .Offset(1).Resize(dico.Count, 2).Value = _
            Application.Transpose(Application.Transpose(dico.items))
        Else
            MsgBox "aucune donnée"
        End If
    End With
    Set dico = Nothing
End Sub
klin89
 

Manutd7

XLDnaute Nouveau
Messieurs,

Encore besoin d'un p'tit coup de main SVP

J'essaie de faire un TCD avec une colonne de plus (donc 4 colonnes, voir fichier exemple) mais je n'arrive pas à obtenir le même rendu que lorsque j'essaie avec 3 colonnes.

Je voudrais avoir un découpage par utilisateur et par mois pour les colonnes volume et heures (la même présentation que le fichier exemple(3).xls de Gosselien, il doit y avoir une subtilité mais j'ai pas trouvé.

Merci :)
 

Pièces jointes

  • Exemple (4 colonnes).xlsx
    11.4 KB · Affichages: 36

Discussions similaires

Réponses
7
Affichages
346