Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Pour les amateurs(trices) de macros .....

  • Initiateur de la discussion Initiateur de la discussion 2b7a
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

2b7a

XLDnaute Occasionnel
bonjour à toutes et tous,

j'ai un souci de doublons

Je voudrais supprimer les CELLULES en doublons dans les colonnes D, I, N, etc .... (mais pas les lignes)

J'ai trouvé une macro dans les forums .. mais pour supprimer les lignes ...
... et je n'arrive pas à la faire fonctionner (!)

Pouvez-vous m'aider à la modifier pour qu'elle supprime les CELLULES en doublons de chacune de mes colonnes et m'expliquer comment je dois la faire fonctionner (!)
- est-ce que je dois me mettre - par exemple - sur ma première cellule D4 et faire excécuter ?
- est-ce un autre process ?

d'avance, merci pour votre aide.
 

Pièces jointes

Re : Pour les amateurs(trices) de macros .....

Bonjour à tous,

Sans macro, j'ai modifié ton fichier et ta formule en colonne F et K pour compter les doubles. Ensuite filtrer les ">1", puis supprimer les doubles et enlever le filtre.

JHA
 

Pièces jointes

Re : Pour les amateurs(trices) de macros .....

Merci JHA

Cependant, c'est cette manip de "supprimer" à la main que je voudrais éviter (à cause des risques d'erreur) et à cause du temps que cela demande (dans mon fichier, il faudrait le faire + de 19 fois et ce plusieurs fois par jour ...)

bonne soirée
 
Re : Pour les amateurs(trices) de macros .....

Bonsoir,

Voir pj

Code:
Sub ListeSansDoublons()
  For Each col In Array(4, 9, 14, 19, 24, 29, 34)
    Set mondico = CreateObject("Scripting.Dictionary")
    Set début = Cells(4, col)
    For Each c In Range(début, début.End(xlDown))
      mondico(c.Value) = ""
    Next c
    Range(début, début.End(xlDown)).ClearContents
    début.Resize(mondico.Count, 1) = Application.Transpose(mondico.keys)
  Next col
End Sub

-Les colonnes n'ont pas besoin d'être triées
-Temps: 0,03 sec

Objet dictionary

Méthode traditionnelle qui suppose que les colonnes sont triées

Pour 10.000 lignes avec 10% de suppressions, le temps devient >10 s ( 0,1 sec pour Dictionary)

Code:
Sub SupDoublonsColonneTradi()
  Application.ScreenUpdating = False
  Application.Calculation = xlCalculationManual
  For Each col In Array(4, 9, 14, 19, 24, 29, 34)
    For i = Cells(65000, col).End(xlUp).Row To 4 Step -1
      If Cells(i, col) = Cells(i - 1, col) Then Cells(i, col).Delete Shift:=xlUp
    Next i
  Next col
  Application.Calculation = xlCalculationAutomatic
  Application.ScreenUpdating = True
End Sub

JB
Formation Excel VBA JB
 

Pièces jointes

Dernière édition:
Re : Pour les amateurs(trices) de macros .....

merci beaucoup JB
ça fonctionne super
.... mais tu peux m'expliquer le cheminement de la macro ?
je vais devoir la reproduire dans mon doc ... et si je ne comprends pas .... ça n'ira pas !!
le bouton tu le fais après et tu le lies à la macro ?
d'avance merci !
 
Re : Pour les amateurs(trices) de macros .....

Bonsoir 2b7a

Sinon un autre code, peut-être plus compréhensible 😱
VB:
Sub SupprimeDoublons()
  Dim TabCol() As String
  Dim Ind As Integer, Dlig As Long, Lig As Long
  ' définir le tableau des colonnes - puet être fait autrement
  TabCol = Split("D,I,N,S,X,AC,AH", ",")
  ' Désactiver le calcul automatique
  Application.Calculation = xlCalculationManual
  ' Pour caque colonne
  For Ind = 0 To UBound(TabCol)
    ' Mémoriser le numéro de la dernière ligne
    Lig = 4: Dlig = Range(TabCol(Ind) & Rows.Count).End(xlUp).Row
    ' Pour chaque ligne, tant que nous sommes pas arrivé à la dernièe
    ' et que la cellule n'est pas vide
    Do While Lig <= Dlig And Range(TabCol(Ind) & Lig) <> ""
      ' Pour situer ou on se trouve dans le code
      ' pas nécessaire
      Range(TabCol(Ind) & Lig).Select
      ' Vérifier que la cellule suivante, n'est pas égale à celle ou on se trouve
      ' et que la cellule n'est pas vide
      Do While Range(TabCol(Ind) & Lig) = Range(TabCol(Ind) & Lig + 1) And Range(TabCol(Ind) & Lig) <> ""
        ' Si OUI, on supprime la cellule
        Range(TabCol(Ind) & Lig + 1).Delete shift:=xlShiftUp
      Loop
    Lig = Lig + 1
    Loop
  Next Ind
  ' Activer le calcul automatique
  Application.Calculation = xlCalculationAutomatic
End Sub

A+
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
7
Affichages
302
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…