Gérer les doublons

Luc MOUNY

XLDnaute Nouveau
Bonjour à tous,

J'ai constitué un programme pour gérer une grosse association,
Dans une base de données Excel d'environ 2500 lignes,
J'aimerai concevoir une macro qui permettrait en cas de doublon dans les colonnes B qui comporte le nom et D qui comporte une adresse électronique :
  1. Transformer la cellule de la colonne A, de Mr en Mr Mme
  2. supprimer la ligne où figure Mme

J'ai une macro qui supprime le doublon, mais je sèche pour la modification de la cellule en colonne B

Le but est de simplifier les envois de courriels lorsque les adhérents couples possèdent la même adresse électronique.

Pour votre information, je commence tout juste a comprendre les macros pas trop complexes, je suis un jeune débutant en VBA, (bientôt 76 ans). Mais une passion dévorante de l'informatique en général et d'Excel en particulier, depuis les débuts de l'informatique personnelle.

Merci d'avance aux spécialistes qui voudrons bien m'aider.
 

Fichiers joints

BrunoM45

XLDnaute Barbatruc
Bonsoir Luc,
Si ta liste d’adhérents est triée par ordre alphabétique, ce qui à l'aire d'être le cas ;)
Alors ce code fonctionnera
VB:
Sub SupprimerDoublons()
  Dim monDico As Object
  Dim i As Long
  Dim Clé As String
 
  Set monDico = CreateObject("Scripting.Dictionary")
  Application.ScreenUpdating = False
    
  i = 1
  Do While Cells(i, "A") <> ""
  Clé = Cells(i, "B") & Cells(i, "D")
    If Not monDico.Exists(Clé) Then
      monDico(Clé) = ""
      i = i + 1
    Else
      Rows(i).EntireRow.Delete
      Cells(i - 1, "A").Value = "Mr Mme"
    End If
  Loop
End Sub
 

Luc MOUNY

XLDnaute Nouveau
Bonsoir Luc,
Si ta liste d’adhérents est triée par ordre alphabétique, ce qui à l'aire d'être le cas ;)
Alors ce code fonctionnera
VB:
Sub SupprimerDoublons()
  Dim monDico As Object
  Dim i As Long
  Dim Clé As String

  Set monDico = CreateObject("Scripting.Dictionary")
  Application.ScreenUpdating = False
  
  i = 1
  Do While Cells(i, "A") <> ""
  Clé = Cells(i, "B") & Cells(i, "D")
    If Not monDico.Exists(Clé) Then
      monDico(Clé) = ""
      i = i + 1
    Else
      Rows(i).EntireRow.Delete
      Cells(i - 1, "A").Value = "Mr Mme"
    End If
  Loop
End Sub
 

Luc MOUNY

XLDnaute Nouveau
Bonjour BrunoM45, bonjour à tout le forum,

Tout d'abord, un grand merci à BRUNO de t'être penché sur mon problème aussi vite est aussi implacablement.
J'ai fait quelques essais pas trop concluants,
J'ai triés les adresses électroniques par ordre alphabétique, et là, formidable, ça fonctionne à tous coups.

Cependant il me vient une question, j'ai un nombre très restreint de cas, ou sous la même adresse électronique, j'ai l'époux, l'épouse et 1 enfants ou 2 voire plus, là, ça se complique ?, mais comme le nombre est marginal, je traiterai ces cas manuellement.

Je suis très heureux que cette macro m'apporte exactement ce que j'espérais.

Merci à BrunoM45, pour son aide. Et merci à tout le forum où j'ai trouvé précédemment plein de solutions.

Pour ce qui me concerne, le problème est résolu.
 

Luc MOUNY

XLDnaute Nouveau
Bonjour à tout le forum,

Cher BrunoM45 ta macro fonctionne merveilleusement bien, mais oserai-je en demander un peu plus, Il y a dans ma base de données un certain nombre de noms composés, Il ne sont pas pris en compte dans le dédoublonnage, Existe-t'il une solution pour prendre en compte seulement une partie du nom ?
Merci d'avance à celui ou celle qui voudra bien m'aiguiller.

Exemple

Mr DUPONT Jean jeandupont@orange.fr
MME DUPONT DUBOIS Joséphine jeandupont@orange.fr

Résultat Mr Mme DUPONT Jean jeandupont@orange.fr
 

Luc MOUNY

XLDnaute Nouveau
Bonjour Bruno,

Merci de la rapidité avec laquelle tu réponds à mes questions.
J'ai un petit souci, j'ai une erreur 1004 avec une jolie flèche jaune sur la ligne Rows(i).EntireRow.Delete

Depuis 2 heures j'ai essayé différentes modifications, mais sans résultat. j'essaie de comprendre le pourquoi de l'erreur, mes connaissances sont encore trop faibles pour trouver la solution, je m'en excuse humblement.

Avant le lancement de la macro initiale, je triais la colonne Titre en descendant, pour avoir en avant MR ensuite je triais par les Courriel en ascendant, et la macro fonctionnait parfaitement avec les noms simples. J'ai tenté de modifier les colonnes de tri dans la nouvelle macro, sans succès.

Je suis vraiment désolé de poser des questions qui paraitrons idiotes aux spécialistes, qui se trouvent sur ce forum.
 

BrunoM45

XLDnaute Barbatruc
Re,

Désolé, j'ai changé le nom de la variable pour être plus explicite et j'ai oublié celle-là :p
Il faut remplacer "i" par "Lig"

A+
 

Luc MOUNY

XLDnaute Nouveau
Merci mille fois,
J'avais bien remarqué en comparant les deux macros, qu'il y avait eu un changement de variable, mais ce i m'avait complètement échappé.
Je teste sur un fichier plus conséquent et je reviens pour dire ce qu'il en est.
 

Luc MOUNY

XLDnaute Nouveau
Bonjour à tous,

Après de nombreux essais, et quelques réglages, tout fonctionne à merveille. J'utilise la macro dans un fichier pour nettoyer la base de données qui comporte 24 colonnes, pour extraire les Titres, noms, prénoms et les courriels, je l'utilise aussi pour extraire de la bases de données les titres, noms, prénoms, adresses, CP et Villes, pour créer un publipostage de courriels depuis Word et Outlook, pour contacter tous les adhérents qui ne possèdent pas d'adresses électroniques. Chaque courriel se trouvera ainsi personnalisé, le seul inconvénient, si j'envoie les courriels à 700 personnes en publipostage, je me retrouverai dans ma boite aux lettres avec 700 lignes différentes dans les courriel envoyés.

Donc ma demande est résolue.

Merci encore au forum qui est une mine quasi inépuisable, et Merci à Bruno pour la rapidité et la pertinence de ses réalisations.

Il est probable que je revienne s'il me prend la fantaisie de faire un autre programme.
 

Créez un compte ou connectez vous pour répondre

Vous devez être membre afin de pouvoir répondre ici

Créer un compte

Créez un compte Excel Downloads. C'est simple!

Connexion

Vous avez déjà un compte? Connectez vous ici.

Haut Bas