Détection de tableau dans variable tableau

Bonjour

Je me suis trompé dans mon titre et je sais pas comment le modifier, je voulais écrire : "Détection de doublon dans variable tableau"

Je suis face au problème suivant :

Je crée une variable tableau (de taille variable) à partir d'une colonne de ma feuille, pour chaque cellule non vide de cette colonne, il stocke le nom et prénom de la personne de la ligne correspondante ; je voudrai simplement détecter (sans les identifier) s'il y a un ou plus de doublons (ou même en triple ou plus)

Pour que ce soit plus clair, voici ce que j'ai commencé à écrire mais après je sèche (bien sûr je pourrai faire une double boucle for/next dans ma colonne pour checker les doublons mais j'ai besoin de ce code dans une fonction (qui est déjà pas mal complexe) et je voudrai pas trop l'alourdir

Existe-t-il une solution ?

Dim decoupage() As String
    chainetest = ""
    For Each c In colonne
        If c.Value <> "" Then
            nomprenomc = .Cells(c.Row, 2).Value & .Cells(c.Row, 2).Comment.Text
            If Len(chainetest) = 0 Then
                chainetest = nomprenomc
            Else
                chainetest = chainetest & "_" & nomprenomc
            End If
        End If
    Next
    decoupage = Split(chainetest, "_")

voilà je voudrai donc détecter s'il y a un ou plusieurs doublons dans "decoupage"

D'avance merci à celui ou celle qui aura une solution

bonsoir,

en ce qui concerne le titre il suffit d'appuyer sur éditer en haut a droite de ton message

pour le reste je suis novice donc je ne sais absolument pas comment t'aider je laisse ça a plus expérimenté

sinon bonne nuit

Bonsoir,

Présenté comme ça je ne vois pas d'autre solution que de checker tous les éléments avec un Dictionnary et ensuite tu jettes ton Dico.

Reste à savoir si tu as vraiment besoin de ces doublons ? Si tu n'en a pas besoin, inutile de commencer par faire une variable tableau : YAKA faire directement une variable Dictionnary (qui n'est jamais qu'un tableau sans doublons...) et "in fine" si nécessaire tu transfères ton Dico dans un Array (oupa...)

A+

Bonjour tyver666 ,Galopin01, le fil

Tu peux préciser (entre les lignes) ce que tu veux obtenir :

1) une liste sans doublons des noms et prénoms

ou

2) une liste et préciser ensuite la présence de doublons ou non ?

Ben en fait, je veux juste savoir s'il y a un ou plus de doublons ; je n'ai pas besoin de savoir quels doublons ou quoi que ce soit d'autre. La réponse à ma fonction doit être binaire, "oui il y a un doublon" ou "non pas de doublon"

Les dictionnaires, j'en ai déjà entendu parler mais jamais utilisé

C'est le moment ou jamais de te lancer dans le Dictionnary :

Le Dictionnary lit toute ta liste et ne mémorise pas les doublons...

Si ton Dictionnary compte moins d'éléments que de lignes dans ta colonne c'est qu'il y a des doublons sinon c'est qu'il n'y en a pas.

12 lignes suffisent pour ta fonction et elle est instantanée pour 3000 lignes...

Sinon si tu préfères rester dans ton contexte TAPUKA checker chaque élément de ton split avec les autres...

Bonjour,

Avec un dictionnaire. adapter la plage (ici en colonne A) :

Sub Test()

    Dim Plage As Range
    Dim Cel As Range
    Dim Dico As Object
    Dim Cle As Variant
    Dim Doublon As Long
    Dim NomPrenom As String

    Set Dico = CreateObject("Scripting.Dictionary")

    'sur la colonne A de la feuille active à partir de A2, à adapter !
    With ActiveSheet: Set Plage = .Range(.Cells(2, 1), .Cells(.Rows.Count, 1).End(xlUp)): End With

    For Each Cel In Plage

        If Cel.Value <> "" Then

            'contrôle si il y a bien un commentaire dans la cellule, si non, retourne juste la valeur
            If Not Cel.Comment Is Nothing Then NomPrenom = Cel.Value & Cel.Comment.Text Else NomPrenom = Cel.Value

        End If

        'incrémente la valeur de la clé donc, doublon
        Dico(NomPrenom) = Dico(NomPrenom) + 1

    Next Cel

    'compte les doublons
    For Each Cle In Dico.Keys

        If Dico(Cle) > 1 Then Doublon = Doublon + 1

    Next Cle

    MsgBox "Il y a " & Doublon & " doublon(s) dans le tableau !"

End Sub

Bonjour à tous,

je voudrai simplement détecter (sans les identifier) s'il y a un ou plus de doublons (ou même en triple ou plus)

à tester,

i = 1
MyTest = 1
If Application.CountA(Columns(i), MyTest) > 0 Then MsgBox 1 Else MsgBox 2

Bonjour sabV,

Le prénom se trouve dans un commentaire et c'est pour cette raison qu'il y a une boucle de concaténation donc, tu peux avoir deux noms identiques mais avec des prénoms différents enfin, si j'ai bien interprété le code ?

Merci à tous

La méthode du dico a fonctionné

Voilà ce que ça a donné :

Function alarme(colonne As Range) As String

Set Dico = CreateObject("Scripting.Dictionary")
For Each c In colonne
    If c.Value <> "" Then
        nomprenomc = Sheets(1).Cells(c.Row, 2).Value & Sheets(1).Cells(c.Row, 2).Comment.Text
        Dico(nomprenomc) = Dico(nomprenomc) + 1
    End If
Next

For Each Cle In Dico.Keys
    If Dico(Cle) > 1 Then Doublon = Doublon + 1
Next Cle

If Doublon > 0 Then alarme = "doublon"

End Function

Je n'ai pas besoin de vérifier la présence d'un commentaire car ceci est assuré ailleurs

Merci encore (je vais me pencher un peu plus sur les dictionnaires)

Tout sur les Dictionnary :

ici

moi je te remercie pour ce lien galopin01

C'est pas moi qu'il faut remercier : C'est Boisgontier !

C'est un des 2 ou 3 liens que tout utilisateur d'Excel et VBA devrait avoir en permanence sur son bureau...

Notez qu'il en existe une version encore plus complète (et très orientée grands débutants)

Rechercher des sujets similaires à "detection tableau variable"