XL 2016 Doublon

duplaly

XLDnaute Occasionnel
Bonjour
J'utilise ce code pour enlever les doublons, mais je voudrais remonter les lignes dans le tableau.
Présentement, la macro laisse de trous et défait le quadrillage de la feuille.

Besoin d'aide si possible!

Merci
 

Pièces jointes

  • Duplicates.xlsm
    20.1 KB · Affichages: 16

cp4

XLDnaute Barbatruc
Bonjour Duplaly, le forum,

Pourquoi tu quadrilles des cellules vides. Ton code fonctionne parfaitement. En fait, tu lui demandes de supprimer une chose et t'attends qu'il fasse ce que tu escomptes. Mets quelque chose dans la dernière cellule et execute ton code pour te rendre compte que ton code fonctionne bien.

Bonne journée.
 

Hasco

XLDnaute Barbatruc
Repose en paix
Bonjour,

Vous avez excel 2016, transformez votre tableau en tableau structuré : onglet Insertion, bouton 'Tableau'.

si vous ne voulez pas du formatage automatique d'excel sur les tableaux structurés, sélectionnez une cellule du tableau et dans l'onglet création, dans le groupe 'Style de tableau', appliquez le premier style clair.

A gauche de cet onglet création, , vous trouverez un bouton 'Supprimer les doublons' qui fait très bien ce que vous demandez.

A lire : Tuto sur les tableaux structurés

P.S. : il n'est pas recommandé de formater inutilement (lignes vides) des colonnes entières. Avez-vous vraiment besoin de cadriller 1048576 lignes ?

cordialement
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Bonjour à tous,

Pour le FUN. J'ai déterré et remis au goût du jour un vieux truc à ma pomme. Une fonction VBA qui retourne la dernière ligne d'un ensemble contigu ou non de colonnes. La fonction VBA devrait fonctionner avec ou sans lignes ou colonnes masquées, avec ou sans filtrage, avec des tableaux structurés.

Voir dans le fichier son utilisation (Feuil1).
Voir son utilisation dans Feuil2 pour le cas spécifique de @duplaly.

VB:
Function DerLigDesCol(ParamArray plages())
' retourne le N° de la dernière des colonnes des plages en argument ; retourne  -1 si erreur

' ATTENTION !   On regarde dans les colonnes entières des arguments de la fonction
'               =>   DerLigDesCol(Range("A1")) -> on examine toute la colonne A

' Utilisable qu'en VBA uniquement

Dim Feuille As Worksheet, xplage, xrg As Range, i As Long, der As Long
   DerLigDesCol = -1
   If IsMissing(plages) Then Exit Function
   Set Feuille = plages(0).Parent
   On Error Resume Next
   With Feuille
      i = 0
      For Each xplage In plages
         If xplage.Parent.Name <> Feuille.Name Then
            MsgBox "Erreur : Plages sur feuilles différentes", vbCritical: Exit Function
         End If
         Set xrg = Nothing
         Set xrg = xplage.EntireColumn.SpecialCells(xlCellTypeConstants, 1 + 2 + 4 + 16)
         i = xrg.Areas(xrg.Areas.Count).Row + xrg.Areas(xrg.Areas.Count).Rows.Count - 1
         If i > der Then der = i
         Set xrg = Nothing
         Set xrg = xplage.EntireColumn.SpecialCells(xlCellTypeFormulas, 1 + 2 + 4 + 16)
         i = xrg.Areas(xrg.Areas.Count).Row + xrg.Areas(xrg.Areas.Count).Rows.Count - 1
         If i > der Then der = i
      Next xplage
   End With
   On Error GoTo 0
   DerLigDesCol = der
End Function
 

Pièces jointes

  • duplaly- sans doublons- v1.xlsm
    32.3 KB · Affichages: 16

mapomme

XLDnaute Barbatruc
Supporter XLD
Bonsoir @duplaly :),

Voir la version v2 de DeDupeColSpecific() :
VB:
Sub DeDupeColSpecific()
Dim der&, t, dico, i&, j&, clef, r, v, n&
   Application.ScreenUpdating = False
   With ActiveSheet
      der = DerLigDesCol(.Range("a:d"))
      t = .Range("a:d").Resize(der)
      .Columns("a:d").Resize(der).Clear
      Set dico = CreateObject("scripting.dictionary")
      dico.CompareMode = TextCompare
      For i = UBound(t) To 2 Step -1
         clef = ""
         For j = 1 To 4:   clef = clef & "\" & CStr(t(i, j)) & "\": Next
         If Not dico.Exists(clef) Then dico.Add clef, i
      Next i
      ReDim r(1 To dico.Count + 1, 1 To 4)
      v = dico.Items
      For j = 1 To 4: r(1, j) = t(1, j): Next
      n = 1
      For i = UBound(v) To LBound(v) Step -1
         n = n + 1
         For j = 1 To 4: r(n, j) = t(v(i), j): Next
      Next i
      .Columns("a:d").Resize(n) = r
      .Columns("a:d").Resize(n).Borders.LineStyle = xlContinuous
   End With
End Sub
 

Pièces jointes

  • duplaly- sans doublons- v2.xlsm
    34.1 KB · Affichages: 6

duplaly

XLDnaute Occasionnel
Cela ne fonctionne pas!
En insérant ton code dans mon fichier, j'ai cet erreur

1590522951391.png
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Bonjour @duplaly

ton code ne fonctionne pas dans le sens que c'est le doublon récent qui est supprimé.
je veux avoir l'inverse si possible.

Donc si mon code v1 fonctionne (même s'il ne donne pas le résultat que tu escomptais), je ne comprends pas pourquoi il y a une erreur dans ton fichier réel, et sans ton fichier réel, je ne vois pas comment je peux résoudre le problème.

Concernant ta demande (non formulée sur le message #1 ;)), voir ci-dessous la version v2.
 

Pièces jointes

  • duplaly- sans doublons- v2.xlsm
    34.1 KB · Affichages: 1

duplaly

XLDnaute Occasionnel
Bonjour
Voici le fichier réel pour les tests!
Lorsque je créé une nouvelle journée, j'aimerais que les anciennes données se copient dans la feuille archive.
Pour détecter les doublons, j'aimerais que la macro utilise les colonnes A & B de la feuille Archive et supprime la ligne entière si doublon trouvé.

Merci pour ton aide!
 

Pièces jointes

  • Nouveau Concept Heures Limites.xlsm
    272.2 KB · Affichages: 5

Discussions similaires

Réponses
6
Affichages
189
Réponses
10
Affichages
192

Statistiques des forums

Discussions
312 084
Messages
2 085 192
Membres
102 809
dernier inscrit
Sandrine83