Suppression d'un doublon non aléatoire

franzoose

XLDnaute Nouveau
Bonjour à tous !

Voilà, je quémande votre aide pour concevoir une macro de traitement des doublons...

J'ai un tableau contenant des données sur des dossiers. Pour info, le tableau a 9 colonnes.
La première colonne (colonne A) comporte un numéro de dossier, c'est en quelque sorte "la clé primaire" du tableau.

Le problème : Il y a beaucoup de doublons dans la colonne A.
Alors bien sûr la solution est de supprimer les doublons (et leur ligne entière associée) par une macro. Jusque là, ça va !

Mais il y a un autre problème, certaines lignes sont moins bien renseignées que d'autres.
Par exemple, certains dossiers/lignes ont 9 colonnes renseignés alors que d'autres dossiers/lignes n'ont que 4 voir 5 colonnes remplies.

Donc voilà, je ne peux pas supprimer les doublons de manière aléatoire, la macro doit garder le doublon le mieux renseigné et supprimer le doublon le moins renseigné.

L'idéale serait bien sûr de concaténer les 2 (ou 3) lignes doublons. Mais la concaténation devrait concerner uniquement les champs vides de la ligne. Ainsi, la ligne résultante serait toujours mieux (ou également) renseignée que la mieux renseignée des 2 lignes doublons. Mais je ne sais pas si c'est possible...


Voici, pour le moment, le résultat de mon jus de cerveau...

OS : Windows Vista
Version Excel : Excel 2007

Code:
Private Sub CommandButton3_Click()

Dim i As Integer
Dim j As Integer
Dim m As Integer
Dim derniere_ligne As Integer
Dim compteuri As Integer
Dim compteurj As Integer

derniere_ligne = Range("A65536").End(xlUp).Row

For i = 5 To derniere_ligne   'les premières données se trouvent à la ligne 5
    For j = derniere_ligne To 5 Step -1
    
        If Range("B" & i) = Range("B" & j) Then
            For m = 1 To 9
                
                If Cells(i, m) <> "" Then
                compteuri = compteuri + 1
                End If
                    
                If Cells(j, m) <> "" Then
                compteurj = compteurj + 1
                End If
            Next
        
            If compteurj > compteuri Then
                Rows(i).Delete
            Else
                Rows(j).Delete
            End If
        End If
    Next
Next

End Sub


Effrayant, hin ? Une fois lancée, la macro ne se termine pas !

Dans tous les cas, merci pour vos coups de main :)
 

CISCO

XLDnaute Barbatruc
Re : Suppression d'un doublon non aléatoire

Bonsoir à tous, bonsoir Pierrejean et néné06

Pour que les formules s'adaptent automatiquement à la hauteur de la colonne A (sans cellule vide intercalée entre les références), il faut utiliser des plages dynamiques, nommées ici colreference1 commençant en A1 et colreference2 commençant en A2. Pour utiliser les plages en colonne B, C... correspondantes, on peut soit faire avec d'autres noms, soit utiliser la fonction DECALER, qui alourdie malheureusement beaucoup la formule.

Dans le fichier ci-joint, il ni y a toujours que deux formules, en D2 et E2, matricielles.

Pour ce qui est du copier-coller, j'ai fait un couper-coller de la feuille 1 à la feuille 2 sans constater de problème.

Les solutions en VBA sont certainement tout aussi, si ce n'est plus, pratiques.

@ plus
 

Pièces jointes

  • Tab_Record Franzoose.xlsx
    14.4 KB · Affichages: 29
  • Tab_Record Franzoose.xlsx
    14.4 KB · Affichages: 35
  • Tab_Record Franzoose.xlsx
    14.4 KB · Affichages: 30
Dernière édition:

Discussions similaires

Réponses
11
Affichages
286

Membres actuellement en ligne

Aucun membre en ligne actuellement.

Statistiques des forums

Discussions
312 196
Messages
2 086 101
Membres
103 116
dernier inscrit
kutobi87