Suppressions doublons sur plusiers colonnes [Résolu]

Messages postés
15
Date d'inscription
mercredi 24 avril 2013
Statut
Membre
Dernière intervention
5 octobre 2019
-
Bon Voila,

Je sollicite votre aide sur ce problème
j'ai un colonne de janvier jusqu'a decembre
dans la colonne janvier il y a des doublons pareil jusqu'a decembre
d'une je supprime les doublons en colonne janvier jusqu'a decembre avec la fonction supprimer doublons
dans excel et c'est bon
sauf que il y des valeurs par exemple dans la colonne janvier que je trouve dans fevrier qui doivent etre supprimer c'est a dire il ne faut point que je retrouve des valeurs dans janvier apres filtre dans fevrier et ainsi aussi dans mars

par exemple dans la colonne mai les valeurs sont deja existant dans les colonne janvier fevrier mars avril donc c'est pour ca que c'est vide
dans l'image que j'ai mis en piece jointe le tableau en dessus est le depart et celle en dessous est le resultat final

Cordialement
Afficher la suite 

6 réponses

Messages postés
9162
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
16 octobre 2019
1650
0
Merci
Bonjour

Une solution avec macro
https://mon-partage.fr/f/aigLnklp/

Cdlmnt
RANDRIANARISOA0
Messages postés
15
Date d'inscription
mercredi 24 avril 2013
Statut
Membre
Dernière intervention
5 octobre 2019
-
SUPERBE
,
Mais aurait tu l'amabilite s'il sIl te plait de me m'expliquer le code,
bon je m'y connais un peu en VBA , mais bon juste pour te demander si c'est possible

Cordialement
Commenter la réponse de ccm81
Messages postés
15
Date d'inscription
mercredi 24 avril 2013
Statut
Membre
Dernière intervention
5 octobre 2019
0
Merci
Bon ,
Votre fichier exemple marche certe ,
mais dans le cas ou j'aurais par exemple dans la colonne janvier plus de 5000 lignes ,fevrier 4000 lignes mars 6000 lignes etc ....ca se passerait comment,

Cordialement
ccm81
Messages postés
9162
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
16 octobre 2019
1650 -
pareil pourvu qu'il y ait moins de 65000 lignes par colonnes
il faudra aussi afficher le résultat dans une autre feuille
et ça prendra certainement un peu plus de temps pour l'ecécution

Cdlmnt
Commenter la réponse de RANDRIANARISOA0
Messages postés
9162
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
16 octobre 2019
1650
0
Merci
quelques explications

Public Sub ok()
Dim dico As Object, cle, n As Long, lifin As Long
Dim t(), li As Long, co As Long, i As Long
' dictionnaire de toutes les valeurs "uniques"
Set dico = CreateObject("scripting.dictionary")
' dernière ligne de la feuille
lifin = Cells.Find("*", , , , xlByRows, xlPrevious).Row
' nombre de lignes du tableau t (qui aura 12 colonnes)
n = lifin - 1
ReDim t(1 To n, 1 To 12)
' boucle sur les colonnes
For co = 1 To 12
  'initialisation de l'indice de la colonne co du tableau t
  i = 0
  ' boucle sur les lignes de la colonne co
  For li = 2 To lifin
    ' valeur lue
    cle = Cells(li, co)
    ' si cle n'est pas dans dico
    ' on l'ajoute
    ' on incremente i
    ' on place cle en ligne i colonne co du tableau t
    If Not dico.exists(cle) Then
      dico.Add cle, 1
      i = i + 1
      t(i, co) = cle
    End If
  Next li
Next co
' affichage de t à partir de A20 (ligne 20, colonne 1)
Cells(20, 1).Resize(n, 12) = t
End Sub

Cdlmnt
Commenter la réponse de ccm81
Messages postés
15
Date d'inscription
mercredi 24 avril 2013
Statut
Membre
Dernière intervention
5 octobre 2019
0
Merci
Ma dernier question,
au lieu de
Cells(20, 1).Resize(n, 12) = t

comment le faire a partir de la derniere ligne renseigne non vide dans la plage
concerne
Cordialement
ccm81
Messages postés
9162
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
16 octobre 2019
1650 -
lis les commentaires !
' dernière ligne de la feuille
lifin = Cells.Find("*", , , , xlByRows, xlPrevious).Row
Cdlmnt
RANDRIANARISOA0
Messages postés
15
Date d'inscription
mercredi 24 avril 2013
Statut
Membre
Dernière intervention
5 octobre 2019
-
je lis certe les explications mais si par exemple dans la colonne 4 c'est a dire avril qu'il y a la derniere ligne non vide donc ca se passe comment ou peut etre colonne 11 novembre
Codlt
Commenter la réponse de RANDRIANARISOA0
Messages postés
15
Date d'inscription
mercredi 24 avril 2013
Statut
Membre
Dernière intervention
5 octobre 2019
0
Merci
j'ai ajouter un code comme ca dans votre code
Option Explicit

Public Sub ok()
Dim dico As Object, cle, n As Long, lifin As Long, derlig As Long, ws As Worksheet
Dim t(), li As Long, co As Long, i As Long
Set ws = ThisWorkbook.Worksheets("feuil1")
Set dico = CreateObject("scripting.dictionary")
lifin = Cells.Find("*", , , , xlByRows, xlPrevious).Row
derlig = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
n = lifin - 1
ReDim t(1 To n, 1 To 12)
For co = 1 To 12
i = 0
For li = 2 To lifin
cle = Cells(li, co)
If Not dico.exists(cle) Then
dico.Add cle, 1
i = i + 1
t(i, co) = cle
End If
Next li
Next co
Cells(derlig, 1).Resize(n, 12) = t
End Sub

est ce que ca va seulement cibler la derniere ligne renseigne dans la colonne A ou dans la plage toute entier,

Cordialement
ccm81
Messages postés
9162
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
16 octobre 2019
1650 -
derlig = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
derniere ligne de la colonne A : c'est toi qui le dit !

lifin = Cells.Find("*", , , , xlByRows, xlPrevious).Row
dernière ligne renseignée de la feuille
RANDRIANARISOA0
Messages postés
15
Date d'inscription
mercredi 24 avril 2013
Statut
Membre
Dernière intervention
5 octobre 2019
-
Option Explicit

Public Sub ok()
Dim dico As Object, cle, n As Long, lifin As Long
Dim t(), li As Long, co As Long, i As Long
Set dico = CreateObject("scripting.dictionary")
lifin = Cells.Find("*", , , , xlByRows, xlPrevious).Row
n = lifin - 1
ReDim t(1 To n, 1 To 12)
For co = 1 To 12
i = 0
For li = 2 To lifin
cle = Cells(li, co)
If Not dico.exists(cle) Then
dico.Add cle, 1
i = i + 1
t(i, co) = cle
End If
Next li
Next co
Cells(n + 3, 1).Resize(n, 12) = t
End Sub
d'accord j'ai compris il suffit que je remplace 20 par lifin+1 et le resultat sera juste en dessous de la derniere ligne renseigne
C'est ca non!
ccm81
Messages postés
9162
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
16 octobre 2019
1650 -
il suffit que je remplace 20 par lifin+1 et le resultat sera juste en dessous de la derniere ligne renseigne
exact !
Là, je plie boutique

bon dimanche
Commenter la réponse de RANDRIANARISOA0
Messages postés
9162
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
16 octobre 2019
1650
0
Merci
1. mais si par exemple dans la colonne 4 c'est a dire avril qu'il y a la derniere ligne non vide donc ca se passe comment ou peut etre colonne 11 novembre
je ne comprends pas bien ta question
Est ce que ça correspond à ceci ?
https://mon-partage.fr/f/YAyVEUQD/
2. S'il y a beaucoup de lignes on peut accélérer un peu à condition qu'après la première cellule vide d'une colonne, il n'y ait plus rien

Cdlmnt
RANDRIANARISOA0
Messages postés
15
Date d'inscription
mercredi 24 avril 2013
Statut
Membre
Dernière intervention
5 octobre 2019
-
Merci bien de votre aide,
ce que je cherchait ca fait 5 jours ,heureseument que vous avez lu mon sujet
Merci au plaisir
Commenter la réponse de ccm81