Dédoublonner en compléter les cellules de plusieurs lignes

Coordinatrice Messages postés 1 Date d'inscription   Statut Membre Dernière intervention   -  
Patrice33740 Messages postés 8561 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

Je travaille actuellement à la prochaine implémentation d'une base de données dans un crm.
je viens d'assembler 8 bases excel de formats différents et qui représente 70000 lignes et va jusqu'à la colonne CB.
j'ai plusieurs lignes en doublons mais toutes les colonnes ne sont pas remplies sur une même ligne.
Est-ce qu'une macro pourrait m'aider à dédoublonner mon fichier en conservant par défaut l'origine d'un de mes 8 fichiers (colonne A) et en conservant la ligne (complétée par les doublons si vides)
L'explication est difficile je suis désolée mais si vous pouvez m'aider et me faire gagner du temps car je suis partie pour tout faire à la main :(

merci d'avance pour votre aide

1 réponse

Patrice33740 Messages postés 8561 Date d'inscription   Statut Membre Dernière intervention   1 780
 
Bonjour,

Si j'ai bien compris, la colonne A contient la référence et tu as concaténé tes 8 fichiers en décalant les autres colonnes et donc en laissant vide les cellules dont les infos proviennent des autres fichiers.

Essaies cette macro :
Option Explicit
Option Private Module

Public Sub Dédoublonner()
Dim rng As Range
Dim cel As Range
Dim val As Variant
Dim col As Long
Dim p°L As Long
Dim d°L As Long
Dim ctr As Long

Set rng = ActiveSheet.Range("A1").CurrentRegion
Set cel = rng.Cells(2, 1)
rng.Sort Key1:=cel, Order1:=xlAscending, Header:=xlYes

Do While Not IsEmpty(cel.Value)
val = cel.Value
For col = 1 To rng.Columns.Count - 1
ctr = 0
val = Null
Do While cel.Offset(ctr).Value = cel.Value And cel.Offset(ctr).Row <= rng.Rows.Count
If cel.Offset(ctr, col).Formula <> "" Then
val = cel.Offset(ctr, col).Value
Exit Do
End If
ctr = ctr + 1
Loop
ctr = 0
If Not IsEmpty(val) Then
Do While cel.Offset(ctr).Value = cel.Value And cel.Offset(ctr).Row <= rng.Rows.Count
cel.Offset(ctr, col).Value = val
ctr = ctr + 1
Loop
End If
Next
Set cel = cel.Offset(ctr)
Loop

End Sub

Il ne restera plus qu'a éliminer les doublons (avec un filtre élaboré).
0