Routine Suppression Doublon

Bonjour,

J'ai une routine Excel VBA 2010 pour supprimer les doublons qui fonctionnait suivant un livre de 2010.

Maintenant, je suis passé à Excel VBA 2016 et cette routine ne fonctionne pas.

je vais numéroter les lignes pour mieux repérer celles qui me posent problèmes :

1) Sub SupprimerDoublons()

2) Dim vCellule As Object

3) Selection.Sort Key1:=ActiveCell, Order1:=xlAscending, Header:=xlGuess, MatchCase:=False, Orientation:=xlTopToBottom

4) For Each vCellule In Selection

5) If vCellule.Value = vCellule.Offset(1, 0) Then

6) vCellule.Delete

7) End If

8) Next

9) End Sub

J'ai toute la ligne 3) qui se met en rouge et les messages suivants :

Erreur de compilation:

Erreur de syntaxe

J'ai cherché sur le web mais n'est pas trouvé de solutions.

Peut-être qu'une personne a rencontré ce problème et sait le résoudre.

Merci par avance de vos aides.

Cordialement

JeanF44

17notes-rapides.pdf (40.41 Ko)

Bonsoir,

On peut difficilement répondre, dans la mesure où il manque une partie des explications: à quoi correspond, par exemple la Selection au début du code?

D'autre part, il existe aujourd'hui (mais c'était déjà le cas sous Excel 2010!) une fonctionnalité "Supprimer les doublons", qui serait sans doute plus performante qu'un tri suivi d'une boucle sur toutes les cellules d'une plage, à mon humble avis.

Bonsoir et merci de la réponse

C'est un exemple pris dans un livre car je ne suis pas un expert de VBA. Je n'ai que des livres de 2010 pour me mettre au VBA

Dans le livre, je suppose que c'est la sélection des cellules d'une colonne où se trouve des noms non triés.

Je ne peux que joindre les quelques pages du livre concernant le problème !!!

Cordialement

JeanF44

15pdf-20161229-0002.pdf (316.87 Ko)

Je ne peux que joindre les quelques pages du livre concernant le problème !!!

ça n'aide guère, je le crains ... tout ce que je peux te dire c'est que ton bout de code semble fonctionner sur ma machine, équipée d'Excel 2016.

Le problème ne viendrait donc pas de le version d'Excel, mais peut-être de la structure du fichier ... et sans voir ce dernier, on peut se perdre en conjectures, sans formuler la bonne hypothèse.

Bonsoir, Salut U.Milité !

Une erreur sur cette ligne est forcément dépendante de la sélection que tu auras préalablement faite.

La vraie question est si cette macro te servait, précise l'utilisation que tu en avais et on te la rebâtira en moins approximatif, plus précis, plus rationnel et peut-être mieux adapté à ton utilisation...

Bon ! C'est pas un livre que je conseillerais ! s'ils n'ont que ce genre de choses pas très sérieuses à proposer...

Cordialement.

Bonsoir et merci de la réponse.

je ne dois pas être doué.

J'ai refait la macro identique au livre et le tableau identique au livre dans un nouveau classeur et j'ai les mêmes problèmes !!

j'ai mis la macro dans le code d'un module : même problème

J'ai mis la macro dans le code de la feuille du tableau : même problème

La version Excel 2016FR est Version1611(Build 7571.2075)

Donc je ne sais pas d'où vient le problème. mais j'ai toujours le problème de syntaxe !!!

Réponds donc aux questions si tu veux une aide !

Si tu veux une explication, tu fournis le fichier (U.Milité l' suggéré !)

Si tu veux simplement exprimer tes états face à ta macro qu'il serait de toute façon utile d'écrire de façon plus précise, tu le dis aussi...

Bonsoir et merci des réponses.

Le tableau concerné et la macro ont été joints à une réponse précédente (Impression des pages du livre)

En pièce jointes je remets le tableau et la macro avec la ligne en rouge !!!

En premier lieu, je répète que je ne suis pas expert en VBA et que j'essaie d'apprendre avec les moyen à ma disposition.

Le but de cette macro est de supprimer les doublons de prénoms dans un tableau.

Je ne sais pas quoi dire et faire de plus pour être plus clair

21notes-rapides.pdf (57.41 Ko)

Au cas où tu ne t'en serais pas rendu compte, un fichier pdf n'est pas un fichier Excel !

Bonsoir,

Ce que MFerrand et U.Milité veulent dire c'est de joindre ton fichier .xlsx qui t'affiche ta ligne en rouge afin qu'ils puissent travailler dessus et ne pas perdre de temps à faire un fichier test.

C'est comme ça que tu obtiendras la meilleure solution.

Si le fichier contient des données confidentielles, il te suffit de les supprimer ou de les remplacer par des valeurs aléatoires.

Bonne soirée !

Bonsoir et merci des réponses

En général dans les forum il est demandé d'envoyer des pièces jointes en PDF

C'est vrai que je ne suis pas futé et que je pensais qu'un PDF était un fichier Xls Mr Ferrand (Tout le monde n'est pas doué comme vous) !!!!

Merci de me le dire maintenant après avoir déjà envoyé un fichier PDF

En macro, bien que je ne suis pas expert, je ne pourrai le joindre qu'en xlsm.

Le but est de supprimer les doublons dans les noms

51test1.xlsm (13.43 Ko)

Les erreurs ne sont pas mystérieuses :

une procédure commence par Sub et se termine par End Sub, s'il y en a deux de chaque, ça ne va plus ;

la ligne commençant par Selection.Sort est une seule ligne de commande répartie sur 3 lignes physiques : à la fin de chaque ligne, le caractère _ (underline) précédé d'une espace indique que la ligne de commande continue ligne physique suivante.

En ôtant ces caractères, tu casses la ligne en 3 ! Les 2 morceaux coupés vont donc déclencher une erreur d'exécution.

A suivre.

Re,

Sub SuppressionDoublonListe()
    Dim c As Range
    If Selection.Cells.Count < 2 Then Exit Sub
    If Selection.Columns.Count > 1 Then
        MsgBox "Cette procédure ne peut opérer que sur une liste sur une seule colonne.", _
         vbInformation, "Sélection non valide"
        Exit Sub
    End If
    Selection.Sort Key1:=ActiveCell, Order1:=xlAscending, Header:=xlNo, MatchCase:=False
    For Each c In Selection
        If StrComp(c, c.Offset(1), vbTextCompare) = 0 Then c.Delete xlShiftUp
    Next c
End Sub

Voilà, légèrement réaménagée, pour tenir compte qu'elle n'est prévue pour fonctionner que sur une liste sur une colonne, et si on trie en ne tenant pas compte de la casse, la suppression n'intervenait pas en cas de différence de casse.

D'ailleurs, il faudrait aussi remplacer dans la fonction StrComp, c par Trim(c) et c.Offset(1) par Trim(c.Offset(1)) pour ne pas prendre en compte d'éventuelles espaces parasites en début et fin des noms comparés.

Cordialement.

16jeanf44-test1.xlsm (14.20 Ko)

Bonsoir et merci de la réponse

Mon but est d'apprendre sur un tableau mais de pouvoir aussi l'adapter plus tard dans un tableau à plusieurs colonnes

Je ne comprends toujours pas pourquoi l'exemple d'un livre ne fonctionne pas

14test1.xlsm (15.07 Ko)

Les fautes d'othographe, en VBA, ça se traduit par des erreurs d'exécution !

Qu'est-ce que tu appelles "exemple d'un livre" ?

Cette proc. n'est pas adaptable pour plusieurs colonnes : besoin différent => réalisation différente !

Pour ce qui est d'apprendre, je te conseillerais de commencer tout d'abord d'écrire correctement le code en l'indentant selon des règles précises, et tu te rendras compte du temps que cela fait gagner, en lecture beaucoup plus rapide et en possibilités d'erreurs éliminées quasiment d'emblée.

Pour ce qui est de structurer ses lignes de commandes, tu peux relire et analyser ta proc. telle que je l'ai modifiée. Les modifications apportées ne relèvent pas de lubies, tant pour les suppressions de quelques éléments inutiles que pour les ajouts qui visent à fiabiliser autant que faire se peut l'exécution...

Une bonne analyse, ligne par ligne, et en comparant à ce qui précédait, pourra déjà t'apprendre pas mal de choses.

Cordialement.

Bonsoir et merci des réponses

Je ne vois pas comment apprendre quand tu ne connais pas VBA à part s'initier avec des livres !!!

apprendre à écrire correctement des codes quand tu ne sais pas je ne vois pas comment faire à part être tres doué

Enfin pour l'instant je me debrouille avec les moyens que j'ai et je ne possède que des livres d'initiations

Désolé de ne pas avoir votre culture VBA

Bonjour MFerrant,

Dans votre macro Supprimer les doublons, je ne suis pas certains que si plus de 2 noms sont identiques qu'ils soient supprimés.

Pour moi quand j'entends parler de doublons dans un tableau c'est qu'il y a plusieurs lignes identiques allant de 2 à x

Désolé de faire cette remarque mais c'est ce qui arrive souvent.

En effet, mais c'était aussi le cas dans la proc. initiale, je n'ai pas modifié la boucle...

Voici une autre version qui supprime tous les doublons et sans trier :

Sub SuppressionDoublonListe()
    Dim i%, j%
    If Selection.Cells.Count < 2 Then Exit Sub
    If Selection.Columns.Count > 1 Then
        MsgBox "Cette procédure ne peut opérer que sur une liste sur une seule colonne.", _
         vbInformation, "Sélection non valide"
        Exit Sub
    End If
    With Selection
        For i = 1 To .Rows.Count - 1
            For j = .Rows.Count To i + 1 Step -1
                If StrComp(.Cells(i, 1), .Cells(j, 1), vbTextCompare) = 0 Then .Cells(j, 1) _
                 .Delete xlShiftUp
            Next j
        Next i
    End With
End Sub

Bonjour et merci,

C'est en faisant des tests que je me suis aperçu que tous les noms identiques n'étaient pas supprimés. Je n'avais pas fait le test sur la procédure initiale car elle ne fonctionnait pas.

Par contre, j'ai du mal à comprendre tout et je suis à la recherche d'un manuel à l'initiation simple au VBA.

Rechercher des sujets similaires à "routine suppression doublon"