Combiner doublons sans perte d'information


#1

Bonjour à Tous,
Dans le fichier en pièce jointe, j’ai cinq colonne dont les les deux premières A,B contiennent un certain nombre de doublon.

Ce que je voudrais dans la mesure du possible ,c’est d’avoir les deux colonnes A.B sans doublon est sans perte de données.

Pour être un peu plus précis, chaque compte a plusieurs séries et chaque série a un solde bien précis, le but est d’avoir sur la même ligne chaque compte avec toute ses séries et le solde adéquat.hmd.xlsx (8,4 Ko)

MERCI


#2

Bonjour @ddjawed,

J’ai bien reçu ton message et voici une proposition pas VBA, car je n’ais par trouvé l’équivalent par formule.

Donc voici le fonctionnement:

J’ai du créer une feuille nommée “Résultat” elle doit exister sinon le code ne fonctionnera pas.
Il faut cliquer sur le bouton “Go” de la “Feuil1” et automatiquement les colonnes “A & B” seront sans doublons dans la feuille “Résultat”, puis sera concaténés les valeurs de la colonne “Série”, la colonne “Type” aura sa correspondance et la colonne “Solde” sera quant à elle sera additionnée en correspondance à la colonne “NON et PRÉNOM” avec cette formule:

=SOMMEPROD((Feuil1!$A$2:$A$65000=$A2)*(Feuil1!$E$2:$E$65000))

Voici le code VBA:

Option Explicit

Sub Résultat()
Dim Ligne As Long, Nblg As Long
Dim i As Integer

Application.ScreenUpdating = False
  
  Sheets("Feuil1").Select
    Columns("A:E").Select
    Selection.Copy
    Range("A1").Select
    Sheets("Résultat").Select
    Range("A1").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Columns("A").AutoFit
    Range("A1").Select
  
  Nblg = Range("A" & Rows.Count).End(xlUp).Row
  With Range("F2:F" & Nblg)
    .Formula = "=A2&B2"
    .Value = .Value
  End With
  
  Range("A2:F" & Nblg).Sort key1:=Range("F2"), order1:=xlAscending, dataoption1:=xlSortNormal, Header:=xlNo
  
  For Ligne = Nblg To 3 Step -1
    If Range("F" & Ligne) = Range("F" & Ligne - 1) Then
      Range("C" & Ligne - 1) = Range("C" & Ligne - 1) & " / " & Range("C" & Ligne)
      Range("A" & Ligne & ":F" & Ligne).Delete shift:=xlShiftUp
    End If
  Next Ligne
  
  Columns("F").ClearContents
  Columns("C").AutoFit
        i = Range("A65536").End(xlUp).Row
    Range("E2").FormulaR1C1 = "=SUMPRODUCT((Feuil1!R2C1:R65000C1=RC1)*(Feuil1!R2C5:R65000C5))"
    Range("E2").Copy Destination:=Range("E3:E" & i)
    
End Sub

Et voici ton fichier en retour ICI==> ddjawed V1.xlsm (24,3 Ko)

Une dernière chose, si tu change le nom de la “Feuil1”, il faudra alors reprendre le code et donc mettre le nouveau nom.

Cordialement.


#3

RE @mdo100

Merci pour votre réactivité,je trouve votre approche très instructive mais mon but et transformer complétement le tableau car a l’origine le fichier contient plus de 10000 données.

Voici le fichier comment il doit être hmd.xlsx (11,2 Ko)

tu as le premier onglet original et le deuxième onglet le résultat cherché.

Cordialement.


#4

Bonjour @ddjawed,

Alors, ton 1er message n’était pas aussi précis que le second :wink:

Voici donc une nouvelle proposition cette fois ci, par formules, car je ne suis pas parvenu a tout faire en VBA.

Dans la feuille “RÉSULTAT”:

J’ai nommé les plages de colonnes dynamiquement dans le “Gestionnaire de noms”:

Voici les formules que j’ai employé:

Dans la colonne “A” à partir de “A2”

=SI(LIGNE(A1)>SOMME(1/NB.SI(ColA;ColA));"";INDEX(ColA;EQUIV(MIN(SI(NB.SI(A$1:A1;ColA)=0;NB.SI(ColA;"<"&ColA)));NB.SI(ColA;"<"&ColA);0)))

Formule matricielle a valider avec ctrl + maj + entrée
Tirer vers le bas autant que nécessaire.

Dans la colonne “B” à partir de “B2”

=SIERREUR(INDEX(ColB;EQUIV($A2;ColA;0));"")

Formule normale.
Tirer vers le bas autant que nécessaire.

Dans la ligne “1” à partir de “C1” jusqu’en “Z1”

=SIERREUR(DECALER(SERIE;EQUIV(0;NB.SI($B1:B1;ColC);0););"")

Formule matricielle a valider avec ctrl + maj + entrée
Tirer vers la droite autant que nécessaire.

À partir de “C2”

=SIERREUR(INDEX(ColE;EQUIV($A2&C$1;ColA&ColC;0));"")

Formule matricielle a valider avec ctrl + maj + entrée
Tirer vers la droite et vers le bas autant que nécessaire.

Les cellules “A1 & B1” sont des titres.

Voici ton fichier en retour ICI==> ddjawed V2.xlsx (23,0 Ko)

Cordialement.


#5

trop trop fort, un GRAND MERCI

mes salutations les plus distinguées.