Suppressions doublons sur plusiers colonnes

Résolu
RANDRIANARISOA0 Messages postés 16 Statut Membre -  
ccm81 Messages postés 11033 Statut Membre -
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

6 réponses

  1. ccm81 Messages postés 11033 Statut Membre 2 434
     
    Bonjour

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

    Cdlmnt
    0
    1. RANDRIANARISOA0 Messages postés 16 Statut Membre
       
      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
      0
  2. RANDRIANARISOA0 Messages postés 16 Statut Membre
     
    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
    0
    1. ccm81 Messages postés 11033 Statut Membre 2 434
       
      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
      0
  3. ccm81 Messages postés 11033 Statut Membre 2 434
     
    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
    0
  4. RANDRIANARISOA0 Messages postés 16 Statut Membre
     
    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
    0
    1. ccm81 Messages postés 11033 Statut Membre 2 434
       
      lis les commentaires !
      ' dernière ligne de la feuille
      lifin = Cells.Find("*", , , , xlByRows, xlPrevious).Row
      Cdlmnt
      0
    2. RANDRIANARISOA0 Messages postés 16 Statut Membre
       
      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
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. RANDRIANARISOA0 Messages postés 16 Statut Membre
     
    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
    0
    1. ccm81 Messages postés 11033 Statut Membre 2 434
       
      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
      0
    2. RANDRIANARISOA0 Messages postés 16 Statut Membre
       
      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!
      0
    3. ccm81 Messages postés 11033 Statut Membre 2 434
       
      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
      0
  7. ccm81 Messages postés 11033 Statut Membre 2 434
     
    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
    0
    1. RANDRIANARISOA0 Messages postés 16 Statut Membre
       
      Merci bien de votre aide,
      ce que je cherchait ca fait 5 jours ,heureseument que vous avez lu mon sujet
      Merci au plaisir
      0