Regroupement données sur une feuille

melanie18

XLDnaute Nouveau
Bonjour

J'ai deux feuilles AM1 et AM2 avec des données.
Pour la feuille AM1, pour chaque numéro j'ai un solde restant AM1 mais je n'ai pas le solde AM2 qui est sur
la feuille 2.

Je souhaite regrouper les données AM1 et AM2 sur une feuille "Résultats"
Pour chaque numéro (ColA), il peut y avoir soit seulement le solde AM1, soit seulement le solde AM2, soit les 2 en résultats.

Dans la feuille "Résultats" je souhaite donc afficher tous les numéros en regroupant AM1 et AM2 sur la même ligne (numéro) ET aussi les lignes où il y a que l'AM1 ou AM2 en solde.

Merci :)

Exemple fichier

http://demo.ovh.eu/fr/59cd11b571d07ee42f3100f502567dd8/
 

Fichiers joints

Dernière édition:

CISCO

XLDnaute Barbatruc
Re : Regroupement données sur une feuille

Bonjour

Par principe, pour que ce fichier reste accessible à tous, même dans deux années, pourrais tu mettre un petit fichier représentatif sur le forum, en pièce jointe ?

@ plus
 

CISCO

XLDnaute Barbatruc
Re : Regroupement données sur une feuille

Bonsoir

En E2
Code:
SIERREUR(RECHERCHEV(Résultats!A2;'AM1'!A$2:E$6;5;0);"")
Je te laisse voir la syntaxe de la fonction RECHERCHEV pour l'appliquer à la colonne G.

@ plus
 

melanie18

XLDnaute Nouveau
Re : Regroupement données sur une feuille

Merci, c'est en parti ce que je veux faire.

Je me suis mal exprimée, en fait, je souhaite crée une nouvelle base en regroupant les informations des feuilles AM1 et AM2.
Pas uniquement rajouter l'information manquante (AM1, solde, AM2 solde) pour chaque numéro.

Pour faire plus simple, j'ai regroupé les données de la feuille AM1 et AM2 sur une nouvelle feuille "regroupementAM1_AM2"
Sur cette feuille ou une autre feuille (résultats), je souhaite que les données soient regroupées sur une seule ligne pour chaque numéro de manière automatique, j'ai plus de 5000 lignes.

A partir de cette feuille regroupement, je souhaite ressortir sur une nouvelle feuille tous les numéros de lignes ET qu'il me regroupe sur une ligne les infos AM1/solde AM2/solde quand le numéro est sur deux dans la feuille regroupement

Exemple :
Le numéro 259648 et 785923 ont deux soldes et chacun leur AM1 et AM2. Je souhaite regrouper sur une ligne l'info AM1, solde, AM2, solde.
Et aussi sur cette même feuille, tous les autres numéros dont il y a uniquement soit AM1/solde OU AM2/solde.

Nvelle pièce jointe : ajout d'une feuille : regroupementAM1_AM2
 

Fichiers joints

CISCO

XLDnaute Barbatruc
Re : Regroupement données sur une feuille

Bonjour

Une possibilité en pièce jointe. Il y a malheureusement une formule matricielle en colonne A (à valider avec Ctrl+maj tempo+entrer) qui prend beaucoup de temps de calcul dans le cas d'un fichier contenant 5000 lignes. Avec une macro, cela irait beaucoup plus vite.

@ plus
 

Fichiers joints

melanie18

XLDnaute Nouveau
Re : Regroupement données sur une feuille

Bonsoir

Merci pour la proposition.

En fait, il faudrait partir comme base sur la nouvelle feuille "regroupement" :(
Ne plus utiliser les feuilles AM1 et AM2, je pense que c'est plus simple, toutes les données sont sur une feuille.


Concernant la formule matricielle, j'ai pas saisi tempo ? j'appuie simultanément sur ctrl+maj+entrer ?
ça marche que si une nouvelle ligne AM1 est inséré ?

Le plus simple, partir sur la feuille regroupement.

AM3 joint :rolleyes:
 

Fichiers joints

CISCO

XLDnaute Barbatruc
Re : Regroupement données sur une feuille

Bonsoir

Pour valider une fonction matricielle, il faut, après avoir sélectionné la cellule contenant cette formule, cliquer dans la barre de formule, puis appuyer sur Ctrl + maj tempo (la touche avec la flèche, pas avec le cadenas) + entrer.

Cf. en pièce jointe un nouveau fichier, sans formule matricielle en colonne A, et avec une seule formule en B2, formule que l'on peut copier-coller vers la droite et vers le bas. Ensuite, tu sélectionnes toutes les colonnes, et tu tries sur la première colonne pour mettre les lignes vides à la fin.

@ plus

P.S : Ceci dit, je ne vois pas trop l'intérêt de la manip, si tu dois faire la feuille regroupement à la main...
 

Fichiers joints

klin89

XLDnaute Impliqué
Re : Regroupement données sur une feuille

Bonsoir CISCO, melanie18, le forum :)

A tester avec le fichier du post #7
Question : sur quelle(s) colonne(s) se base t-on pour déterminer les doublons ?
Colonne A, le même numéro ne renvoie pas la même nom en colonne D, est-ce normal !
785923 renvoie BA2 et NH :confused: on retient quoi ?

VB:
Option Explicit

Sub Regroupement()
Dim a, i As Long, j As Long, txt As String, n As Long
    With Sheets(1).Range("a1").CurrentRegion
        a = .Value
        With CreateObject("Scripting.Dictionary")
            .CompareMode = 1
            For i = 1 To UBound(a, 1)
                txt = a(i, 1)
                If Not .exists(txt) Then
                    n = n + 1
                    .Item(txt) = n
                    For j = 1 To UBound(a, 2)
                        a(n, j) = a(i, j)
                    Next
                Else
                    For j = 7 To 8
                        a(.Item(txt), j) = a(i, j)
                    Next
                End If
            Next
        End With
        Application.ScreenUpdating = False
        With Sheets(2).Cells(1).Resize(n, UBound(a, 2))
            .CurrentRegion.Clear
            .Value = a
            .Cells(1, .Columns.Count + 1).Value = "Solde total"
            .Columns(.Columns.Count + 1).Offset(1).Resize(n - 1).Formula = "=rc[-4]+rc[-2]"
            With .CurrentRegion
                .Font.Name = "calibri"
                .Font.Size = 10
                .HorizontalAlignment = xlCenter
                .VerticalAlignment = xlCenter
                .Borders(xlInsideVertical).Weight = xlThin
                .BorderAround Weight:=xlThin
                With .Rows(1)
                    .Font.Size = 11
                    .Interior.ColorIndex = 38
                    .BorderAround Weight:=xlThin
                End With
            End With
        End With
        Application.ScreenUpdating = True
    End With
End Sub
klin89
 

melanie18

XLDnaute Nouveau
Re : Regroupement données sur une feuille

Bonjour

Pour Cisco, sur le tableau résultats, je ne vois pas de regroupement sur une seule ligne des données AM1/solde -Am2/solde.
J'ai l'impression que le tableau supprime les doublons, OK, mais ne regroupe pas les données sur la même ligne correspondant au même numéro (ColA).
Exemple, sur la ligne du numéro 259648, il devrait m'afficher les données AM2 et solde

Cf fichier sur le premier post, feuille résultats


Concernant le regroupement sur un tableau, il est très facile de regrouper pour moi les données dans mon fichier original, étant donné que le nombre de colonnes sont les mêmes pour Am1 et AM2.


Pour Klin89:
Effectivement, dans mon fichier exemple, je me suis trompé, la colonne D devrait avoir le même nom quand ils ont le même numéro.
Si numéro identique, colB, C, D et I sont les mêmes.
Le doublon se fait sur la colonne A MAIS il faut regrouper les données sur une ligne.
Après j'ai rajouté une colonne solde total mais elle n'est pour le moment pas indispensable, on peut très bien la supprimer.
Ce que je souhaite, c'est regrouper sur une ligne les données AM1/solde ET AM2/solde quand il y a doublon de numéro (ColA), et que aussi que le tableau conserve les numéros où il y a que l'AM1/solde ou AM2/solde.

Je veux bien essayer ce code mais quelle est la démarche pour insérer ce code ? :rolleyes:


Merci à tous les deux.
 

CISCO

XLDnaute Barbatruc
Re : Regroupement données sur une feuille

Bonjour

OK, j'ai enfin compris ce que tu voulais ! Est-ce que dans ton vrai fichier, tu peux aussi avoir des triplets, quadruplets, etc ?
* Si non, tu dois pouvoir faire avec le fichier ci-joint suivi d'un tri sur la colonne A. j'ai mis un format personnalisé sur les colonnes E et F faisant disparaître des 0 "gênants".
* Si oui, il faudra trouver autre chose.

@ plus
 

Fichiers joints

Dernière édition:

CISCO

XLDnaute Barbatruc
Re : Regroupement données sur une feuille

Bonjour

Cf. la pièce jointe rajoutée à mon dernier post.

@ plus
 

melanie18

XLDnaute Nouveau
Re : Regroupement données sur une feuille

Merci Cisco, j'ai testé rapidement le dernier fichier joint, ça a l'air correct :)

Je teste ce soir sur mon fichier original.

Edit :

J'ai rajouté deux lignes lignes sur la feuille regroupement avec le même numéro, sur le résul il m'affiche bien la ligne mais ne m'affiche pas l'information manquante à savoir AM1 ou AM2, en fait il prend que la première ligne j'ai l'impression

Il faut recopier la formule A vers le le bas
idem pour les autres colonnes ? ou il faut recopier vers la droite, j'ai recopier vers le bas


Exemple, j'ai rajouté ligne 12 et ligne 13 :
numéro 444444 01/02/2014 3 CS 1 2.54 pour AM1 rien en AM2 et soldé pour V j'ai mis GG
ligne 13 numéro 444444 01/02/2014 3 CS 254 et 2.28 pour AM2/solde pour V j'ai mis GG
 
Dernière édition:

CISCO

XLDnaute Barbatruc
Re : Regroupement données sur une feuille

Bonjour

Il faut modifier le A$11 par A$6000 en G2 et H2, puis tirer ces formules vers le bas. Je corrige dans ma pièce jointe précédente.
Autre remarque, je n'ai mis des formules que jusqu'en ligne 14, il faut donc tirer l'ensemble vers le bas.

@ plus
 

melanie18

XLDnaute Nouveau
Re : Regroupement données sur une feuille

J'ai testé le dernier fichier joint.

J'ai rajouté une ligne en dessous de la tienne avec le même numéro 444444 et des infos en AM2 et solde

Sur la feuil résul il m'affiche exactement la même ligne en ligne 13.

Normalement, il devrait mettre à jour la ligne déjà existante 44444 avec les infos AM2 et solde, vu qu'il en existe déjà une.

Je récapitule :
Un numéro (colA) peut avoir soit :
-des données AM1 et solde
-des données AM2 et solde
-les deux répartis sur deux lignes

Le but étant de regrouper sur une ligne ces données AM1/solde et AM2/solde pour un même numéro

et qu'il m'affiche aussi les autres lignes où il y a juste des données AM1/solde OU AM2/solde pour les autres numéros qui n'ont pas de "doublons"
 

CISCO

XLDnaute Barbatruc
Re : Regroupement données sur une feuille

Bonsoir

J'ai rajouté des info en colonnes G et H sur la feuille regroupement et elles ont bien été reportées sur la feuille résul (Attention au format des N° en colonne A, 444444 par exemple en lignes 12 et 13).
 

Fichiers joints

melanie18

XLDnaute Nouveau
Re : Regroupement données sur une feuille

Bonjour

Effectivement, sans doute un problème de format, avec le dernier fichier, ça marche.

Maintenant, faut que je teste avec mon fichier original, j'ai testé rapidement hier soir, ça n'a pas marché. :( :confused:

Dès que j'ai un moment, je refais le test.

Merci Cisco
 

melanie18

XLDnaute Nouveau
Re : Regroupement données sur une feuille

Bonjour

J'ai testé sur mon fichier original, ça marche impeccable. :D

J'aurai voulu faire la même chose avec un autre fichier.

Mais cette fois ci au lieu d'avoir dans ma base deux colonnes pour AM avec solde pour chacun, je n'ai qu'une colonne AM.

Je souhaite donc faire la même chose, regrouper les doublons N° sur une ligne et affichage des autres lignes bien entendu sans doublons.
J'ai donc rajouté deux colonnes AM2 et solde dans la feuille résult

Merci
 

Fichiers joints

klin89

XLDnaute Impliqué
Re : Regroupement données sur une feuille

Bonsoir Mélanie, le forum

Le code dans le module 1.
Résultat en feuille "result".
VB:
Option Explicit

Sub Regroupement()
Dim a, i As Long, j As Long, n As Long, col As Byte, w
    a = Sheets("Feuil1").Cells(1).CurrentRegion.Value
    col = UBound(a, 2): n = 1
    With CreateObject("Scripting.Dictionary")
        For i = 2 To UBound(a, 1)
            If Not .exists(a(i, 1)) Then
                n = n + 1: .Item(a(i, 1)) = VBA.Array(n, col)
                For j = 1 To col
                    a(n, j) = a(i, j)
                Next
            Else
                w = .Item(a(i, 1)): w(1) = w(1) + 2
                If UBound(a, 2) < w(1) Then
                    ReDim Preserve a(1 To UBound(a, 1), 1 To w(1))
                    a(1, w(1) - 1) = a(1, 5) & 2
                    a(1, w(1)) = a(1, 6)
                End If
                For j = 1 To 2
                    a(w(0), w(1) - 2 + j) = a(i, j + 4)
                Next
                .Item(a(i, 1)) = w
            End If
        Next
    End With
    Application.ScreenUpdating = False
    With Sheets("result").Cells(1).Resize(n, UBound(a, 2))
        .CurrentRegion.Clear
        .Value = a
        With .CurrentRegion
            .Font.Name = "calibri"
            .Font.Size = 10
            .HorizontalAlignment = xlCenter
            .VerticalAlignment = xlCenter
            .Borders(xlInsideVertical).Weight = xlThin
            .BorderAround Weight:=xlThin
            With .Rows(1)
                .Font.Size = 11
                .Interior.ColorIndex = 38
                .BorderAround Weight:=xlThin
            End With
        End With
        .Parent.Select
    End With
    Application.ScreenUpdating = True
End Sub
klin89
 

Fichiers joints

Discussions similaires


Haut Bas