IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Identifier les doublons dans une base


Sujet :

Macros et VBA Excel

  1. #21
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    c'est ce que je t'ai dis au debut sauf que j'utilise deux dico et vous une collection et un dico

    dans ma version dans la 2 eme boucle tu inscrit les valeur (item) dans les cle di dico2 etla valeur cle dico1 dans les items dico2

    j'ai tester avec match et un tableau c'est encore plus rapido le boulot c'est rigolo
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter
      0  1

  2. #22
    Expert confirmé
    Homme Profil pro
    PAO
    Inscrit en
    Octobre 2014
    Messages
    2 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : PAO
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2014
    Messages : 2 576
    Points : 4 174
    Points
    4 174
    Par défaut
    Patrick,

    c'est ce que je t'ai dis au debut sauf que j'utilise deux dico et vous une collection et un dico
    tu parles de quel dico ??
    car moi j'utilise bien une collection, mais unparia n'utilise ni le dico ni la collection

    Par contre dans ton code chaine = Join(Array(tableau(i, 1), tableau(i, 2), tableau(i, 3), tableau(i, 4), tableau(i, 5)), "-") est répétitif
    il y est 2 fois y a peut être moyen de réduire … ??

    j'ai tester avec match et un tableau c'est encore plus rapido le boulot c'est rigolo
    je suis curieux de voir …
    Cordialement
    Ryu

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. – Albert Einstein

    Pensez à la Balise [ CODE][/CODE ] - à utiliser via le bouton # => Exemple

    Une fois votre problème solutionné pensez à mettre en n'oubliant pas d'indiquer qu'elle est la solution finale choisie
      0  1

  3. #23
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut
    re
    d'accords si tu veux
    je me suis occuper du, moteur pas de la restitution mais si tu regarde le debug tu va comprendre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub test()
    'on prend les 5 colonne dans une variable tableau
        tableau = Range("A1:f" & Cells(Rows.Count, 1).End(xlUp).Row)
             vecteur = Split(Application.Rept("a,", UBound(tableau)), ",")
            For i = LBound(tableau) To UBound(tableau)
            chaine = Join(Array(tableau(i, 1), tableau(i, 2), tableau(i, 3), tableau(i, 4), tableau(i, 5)), "-")
            vecteur(i) = chaine   'j'alimente le tableau vecteur en même temps que la boucle initiale c'est qui est fort 
            If i > 0 Then
                A = WorksheetFunction.Match(chaine, vecteur, 0)
                Debug.Print i & "|" & A - 1 & " " & chaine
            End If
        Next
    End Sub
    si tu regarde dans le debug ne te casse pas la tète tu supprime ce qui n'on pas le même numéro qui suive le premier avant le "6" et point barre et c'est tout
    edit oupss c'est pas "6" mais "|"

    mince je te l'ai dis j'aurais voulu que tu le comprenne par toi même
    a la place tu debug tu met dans la colonne 6"F" du tableau car je la prend au départ avec le reste
    Nom : Capture.JPG
Affichages : 168
Taille : 260,0 Ko

    ils sont fous ces toulonnais hein :!!!!

    re
    on peut même supprimer le IF je l'avais mis pour la reconstruction mais je te la montre pas tout de suite
    j'attends que tu est compris l'astuce qui est simple en fait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Sub test()
    'on prend les 5 colonne dans une variable tableau
        tableau = Range("A1:f" & Cells(Rows.Count, 1).End(xlUp).Row)
        vecteur = Split(Application.Rept("a,", UBound(tableau)), ",")
        For i = LBound(tableau) To UBound(tableau)
            chaine = Join(Array(tableau(i, 1), tableau(i, 2), tableau(i, 3), tableau(i, 4), tableau(i, 5)), "-")
            vecteur(i) = chaine
            A = WorksheetFunction.Match(chaine, vecteur, 0)
            Debug.Print i & "|" & A - 1 & " " & chaine
        Next
    End Sub
    si ton moteur est plus raide que ca je mange mon clavier
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter
      0  1

  4. #24
    Expert confirmé
    Homme Profil pro
    PAO
    Inscrit en
    Octobre 2014
    Messages
    2 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : PAO
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2014
    Messages : 2 576
    Points : 4 174
    Points
    4 174
    Par défaut
    Re,
    justement je me demandais comment t'allais t'en sortir si plus de 2 doublons

    Franchement pas mal pour le principe
    comme le Match n'est pas comme un Find Next, y a de l'idée

    (Ce que j'avais fait avec Marc était pour un nombre de lignes conséquent on avait fait des tests sur 200 000 lignes)
    Cordialement
    Ryu

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. – Albert Einstein

    Pensez à la Balise [ CODE][/CODE ] - à utiliser via le bouton # => Exemple

    Une fois votre problème solutionné pensez à mettre en n'oubliant pas d'indiquer qu'elle est la solution finale choisie
      0  1

  5. #25
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut je
    justement je me demandais comment t'allais t'en sortir si plus de 2 doublons
    je m'en doutais que tu n'avais pas compris mon astuce

    je te la'i dis il peut y avaoir 36 doublons c'est pareil tout ceux qui ont "x | y" tu supprime et ce qui ont "x | x" tu garde

    exemple dans ma capture
    el ligne 1 il y a

    "1|1"

    en ligne 13 il y a

    "13|1"

    suposant qu'en ligne 56 il y ai encore le même il y aura donc

    "56|1"
    match me donnera toujours le premier

    résultat les deux chiffre ne sont pas identiques alors roulement de tambour !!!!!tu supprime!!!!!!

    comme je te lai dis c'est simple

    c'est plus clair la ?
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter
      0  1

  6. #26
    Expert confirmé
    Homme Profil pro
    PAO
    Inscrit en
    Octobre 2014
    Messages
    2 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : PAO
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2014
    Messages : 2 576
    Points : 4 174
    Points
    4 174
    Par défaut
    je m'en doutais que tu n'avais pas compris mon astuce

    je me posais la question avant pas après avoir testé le code ou j'ai bien compris le fonctionnement, sinon je ne t'aurais pas mis
    Cordialement
    Ryu

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. – Albert Einstein

    Pensez à la Balise [ CODE][/CODE ] - à utiliser via le bouton # => Exemple

    Une fois votre problème solutionné pensez à mettre en n'oubliant pas d'indiquer qu'elle est la solution finale choisie
      0  1

  7. #27
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut
    maintenant tu sais ce qui faut mettre a la la place la ligne debug.print......

    point barre

    1 moins de 10 ligne
    2 seule boucle sur les items
    3 aucune boucle sur les items: match fait son boulot
    4 la ligne debug remplace 2 ou 3 ligne pour au pire alimenter un nouveau tableau en comparant simplement si I<>A-1 (si oui on alimente pas si non on alimente )

    il n'y a rien de plus simple juste logique

    tu te régale avec ca toi hein ...

    et c'est valable sur MAC je crois non?


    j'attend maintenant les réactions du druide

    re
    je peux même dire au cas ou celui qui veux s'en servir est fainéant
    il peut se contenter de une seul ligne a la place de debug

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if I<>A-1 then sheets(x).row(i &":" & i).delete
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if I<>A-1 then sheets(x).range("A" &  i).entirerow.delete

    et voila on rajoute même pas de ligne on en change une c'est tout

    ca ressemble beaucoup a remove duplicate non?

    voila pour ceux qui ont 2003.

    edit:!!!!!!!!!
    autant pour moi on peut pas supprimer directement comme ca car quand une ligne est supprimer ma variable tableau n'a plus les même index que la plage

    il faut donc v boucler une 2d fois sur les items du tableau
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter
      1  1

  8. #28
    Expert confirmé
    Homme Profil pro
    PAO
    Inscrit en
    Octobre 2014
    Messages
    2 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : PAO
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2014
    Messages : 2 576
    Points : 4 174
    Points
    4 174
    Par défaut
    C'est rigolo comme principe et ça marche.

    oui c'est valable pour Mac

    Par contre si je me souviens bien (mais j'en suis plus sur) pour un trop grand nombre de lignes, Match n'est plus adéquate,
    il faudrait que je retrouve ou je l'ai vu

    Oui s'en est un de remove duplicate (mais celui d'excel de base est plus puissant)
    Cordialement
    Ryu

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. – Albert Einstein

    Pensez à la Balise [ CODE][/CODE ] - à utiliser via le bouton # => Exemple

    Une fois votre problème solutionné pensez à mettre en n'oubliant pas d'indiquer qu'elle est la solution finale choisie
      0  1

  9. #29
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    oui mais je crois me souvenir que remove duplicate ne travaille pas sur la concaténation de plusieurs colonnes

    il travaille sur plusieurs colonnes oui mais par cellules je crois ca fait longtemps que je ne l'ai pas utilisé

    bon allez je vais me coucher demain je t'en trouverais une autre encore plus farfelu hihihi j'ai déjà mon idée en tète
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter
      0  1

  10. #30
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 82
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 422
    Points
    12 422
    Par défaut
    Hé bé !
    J'ai voulu que nous nous amusions un peu avec du rigolo (surtout pour l'un -qui sera un jour utile- de ses aspects, mais je vois que tout part dans tous les sens !
    On revient à du sérieux tristounet , alors ? --->>

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Dim la_col As New Collection, t As String, c As String, i As Long, DL As Long
    DL = Range("A" & Rows.Count).End(xlUp).Row
    c = Chr(1)
    For i = 1 To DL
      t = Range("A" & i) & c & Range("B" & i) & c & Range("C" & i) & c & Range("D" & i) & c & Range("E" & i)
      On Error Resume Next
      la_col.Add i, t
      If Err Then Range("G" & i) = la_col(t)
    Next
    A l'amoureux du compteur de lignes : il y en a combien ?
    vaudra mieux, dans la foulée, utiliser screenupdating. Ou encore mieux : mettre dans un tableau pour G et afficher le tout in fine en colonne G . Cela augmentera le nombre (important ?) de lignes de code, mais accroîtra (le voilà, l'important) la vitesse d'exécution.

    Et dans la foulée : inutile de vous dire, je pense, ce que ferait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Columns("G").SpecialCells(xlCellTypeConstants).EntireRow.Delete
    EDIT : c'est la méthode (affichage ici en plus, simplement) que j'ai choisie depuis kala kala pour la suppression de doublons "composés" sur des colonnes non adjacentes (puisque Excel ne le fait alors pas)
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.
      0  1

  11. #31
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    Bonjour
    et ben voila la on est d'accords!!!
    c'est quand même mieux que le moulinet inter sheets que vous aviez inventé non?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub test()
    'on prend les 5 colonne dans une variable tableau
        tableau = Range("A1:f" & Cells(Rows.Count, 1).End(xlUp).Row)
        vecteur = Split(Application.Rept("a,", UBound(tableau)), ",")
        For i = LBound(tableau) To UBound(tableau)
            chaine = Join(Array(tableau(i, 1), tableau(i, 2), tableau(i, 3), tableau(i, 4), tableau(i, 5)), "-")
            vecteur(i) = chaine
            A = WorksheetFunction.Match(chaine, vecteur, 0)
            'Debug.Print i & "|" & A - 1 & " " & chaine
            If i <> A - 1 Then Cells(i, 6) = "X"
        Next
        'Columns("F").SpecialCells(xlCellTypeConstants).EntireRow.Delete
    End Sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Sub test2()
    Dim la_col As New Collection, t As String, c As String, i As Long, DL As Long
    DL = Range("A" & Rows.Count).End(xlUp).Row
    c = Chr(1)
    For i = 1 To DL
      t = Range("A" & i) & c & Range("B" & i) & c & Range("C" & i) & c & Range("D" & i) & c & Range("E" & i)
      On Error Resume Next
      la_col.Add i, t
      If Err Then Range("F" & i) = "x"
    Next
    'Columns("F").SpecialCells(xlCellTypeConstants).EntireRow.Delete
    End Sub
    une question intéressante serait de savoir a quelle point la différence de gourmandise en terme de mémoire est importante entre
    ces deux lignes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     chaine = Join(Array(tableau(i, 1), tableau(i, 2), tableau(i, 3), tableau(i, 4), tableau(i, 5)), "-")
    ou cela 
     t = Range("A" & i) & c & Range("B" & i) & c & Range("C" & i) & c & Range("D" & i) & c & Range("E" & i)
    et la différence entre le fait de concaténer des valeur (cellule) et celle d'une ligne d'un tableau variant

    la j'adhère vraiment
    perso je garde les deux c'est propre net et rapidos du bon boulot

    et au cas ou la destination du tableau sans doublons serait un autre sheets je marque le "x" dans le tableau lui même avant de le coller sur une feuille la suppression se fera dans le newsheet

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    Sub test()
    'on prend les 5 colonne dans une variable tableau
        tableau = Range("A1:f" & Cells(Rows.Count, 1).End(xlUp).Row)
        vecteur = Split(Application.Rept("a,", UBound(tableau)), ",")
        For i = LBound(tableau) To UBound(tableau)
            tableau(i, 6) = ""
            chaine = Join(Array(tableau(i, 1), tableau(i, 2), tableau(i, 3), tableau(i, 4), tableau(i, 5)), "-")
            vecteur(i) = chaine
            A = WorksheetFunction.Match(chaine, vecteur, 0)
            'Debug.Print i & "|" & A - 1 & " " & chaine
            'If i <> A - 1 Then tableau(i, 6) = "X"
           'ou si on travaille sur le sheets lui même 
           If i <> A - 1 Then Cells(i, 6) = "X"
        Next
        'Columns("F").SpecialCells(xlCellTypeConstants).EntireRow.Delete
    End Sub
    voila maintenant on a un remove duplicate que remove duplicate ne fait pas
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter
      0  1

  12. #32
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 82
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 422
    Points
    12 422
    Par défaut
    c'est quand même mieux que le moulinet inter sheets que vous aviez inventé non?
    Ou tu n'as peut-être pas compris qu'il s'agissait d'une espèce de jeu pour aller dans le sens d'une suggestion. Et de rien d'autre que cela (et dans la foulée, de s'amuser avec les tris puis rétablissements)
    Quand au reste : le plus rapide ? Ben oui, sur le même principe (presque rigoureusement le même), mais en y ajoutant 2 ou 3 lignes de code, pardi. Et comme tu parais "apprécier" par rapport au nombre de lignes de code, je ne les ai pas mises, ces petites 3 lignes (elles sont faciles à deviner, pourtant).
    Voilà voilà !
    Et le split puis Join ? -->> non !
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.
      0  1

  13. #33
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut
    re
    et important quand même!!!!
    si on a pas la possibilité d'utiliser une colonne a cet effet car le reste est occupé par d'autre données ,on peut se servir de la colonne 1 par exemple
    et pareil pour la version Unparia
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    Sub test3()
    'on prend les 5 colonne dans une variable tableau
        tableau = Range("A1:E" & Cells(Rows.Count, 1).End(xlUp).Row)
        vecteur = Split(Application.Rept("a,", UBound(tableau)), ",")
        For i = LBound(tableau) To UBound(tableau)
                   chaine = Join(Array(tableau(i, 1), tableau(i, 2), tableau(i, 3), tableau(i, 4), tableau(i, 5)), "-")
            vecteur(i) = chaine
            A = WorksheetFunction.Match(chaine, vecteur, 0)
            'Debug.Print i & "|" & A - 1 & " " & chaine
            'If i <> A - 1 Then tableau(i, 1) = ""
            If i <> A - 1 Then Cells(i, 1) = ""
        Next
       'shets(x).cells(x).resize.balblablabla=tableau 
    sheets(x).'Columns("A").SpecialCells(xlCellTypeBlanks.).EntireRow.Delete  ' peut être limiter ici le range a ce qui est remplie a la place de "column("A")
    End Sub
    EDIT:
    Autant pour moi
    c'est pas bon cette idée ca remet en cause le "entireow.delete "

    peut etre vider chez moi le tableau de 1 a 5 et unparia les cells de 1 a 5
    et remonter la ligne suivante sur les 5 colonne

    mais je ne sais pas si ce serait pas plus judicieux d'alimenter un newtableau incrementé par la condition "if i<>A-1" ou la gestion d'erreur de unparia

    il serait intéressant de faire ces tests

    re

    a oui le split je cherchais

    en fait vecteur je l'ai créé comme ca pour d'autre actions au départ j'avais besoins qu'il soit plein(avec 1 caractères minimum)
    en fait c'est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    redim vecteur(ubound(tableau))
    pour les suppression s

    2 idées
    remonter dans le tableau variant lui même la ligne suivant celle supprimée etc...

    réalimenter un newtableau incrémenté par la même condition
    on travaille toujours sur la variable tableau comme ca et non sur le sheets

    ca permet d'avoir la table pour éventuellement la transporter ailleurs

    j'aimerais bien la finir celle la tiens
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter
      0  1

  14. #34
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 82
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 422
    Points
    12 422
    Par défaut
    Tu t'égares, patricktoulon (et il ne faut jamais s'égarer).
    1) S'il s'agit de supprimer les doublons : aucun besoin de les "afficher".
    2) Si on veut les afficher, on n'échappe pas à un affichage
    3) Si on ne veut pas les afficher : aucun besoin d'une colonne supplémentaire, où qu'elle soit.
    Voilà ... travaille encore un peu et tu y parviendras (enfin) à cet outil ultra-facile à mettre en place pour traiter ce que Excel n'offre pas déjà.
    Dans la foulée : ouvre ton ami gougougueule sur l'expression "depuis kala kala". Tu sauras ce qu'elle veut dire ...
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.
      0  1

  15. #35
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    je sais tres bien que dans cette discussion il sagit d'identifier les doublons et non d'affichage ou pas
    mais dans la lancée je me suis mis a revoir sans Scripting ce que j'avais fait en 2013 dans les contribs avec Scripting dictionary qui traitait exactement le même sujet

    et voila elle est universelle est c'est une fonction
    attention le array "col_a_traiter" représente les indexs de colonnes par rapport a la plage et non celle du sheets
    sur cet exemple ca correspond mais sur une plage ne démarrant pas en colonne 1 l'item 1 de l'array correspondra a la première colonne de la plage
    je sais que ce que j'avais fait depuis kala kala fonctionne très bien mais l'exercice sans Scripting est intéressant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Sub test4()
        Set plage = Range("A1:E" & Cells(Rows.Count, 1).End(xlUp).Row)    ' plage a prendre en compte
        Nbcol = plage.Columns.Count    ' nombre de colonnes pour le resize
        col_a_traiter = Array(1, 2, 3, 4, 5)    ' colonne a prendre en compte
        tablo = tableau_sans_doublons_X_colonnes(plage, col_a_traiter)    'recupération du tableau sans doublons
        Cells(15, 1).Resize(UBound(tablo), Nbcol) = tablo    ' transcription sur le sheet ou on veut
    End Sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    Function tableau_sans_doublons_X_colonnes(rng, col) As Variant
        Dim tableau, Nbcol, vecteur, i As Long, A As Long, tabl, Lig As Long, chaine As String, y As Long
        tableau = rng: Nbcol = rng.Columns.Count
        ReDim vecteur(UBound(tableau))
        ReDim tabl(UBound(tableau), Nbcol)
        For i = LBound(tableau) To UBound(tableau)
            chaine = "": For y = 0 To UBound(col): chaine = chaine & tableau(i, col(y)): Next
            vecteur(i) = chaine
            A = WorksheetFunction.Match(chaine, vecteur, 0)
            If i = A - 1 Then: For C = 1 To Nbcol: tabl(Lig, C - 1) = tableau(i, C): Next: Lig = Lig + 1:
        Next
        tableau_sans_doublons_X_colonnes = tabl
    End Function
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter
      0  1

  16. #36
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 82
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 422
    Points
    12 422
    Par défaut
    Comme tu veux tu "choises" (autre expression de chez moi).
    Ta fonction a deux défauts majeurs : l'un, fondamental, l'autre, inutilement "gourmand".
    Il faut apprendre, en matière de vitesse d'exécution, à savoir également estimer la durée du travail fait par ce dont on se sert.
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.
      0  1

  17. #37
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    bonjour
    ne pas oublier que je prévois la contrainte de ne pas pouvoir supprimer des lignes il me faut donc un tableau sans doublons a transporter
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter
      0  1

  18. #38
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 82
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 422
    Points
    12 422
    Par défaut
    Bonjour patricktoulon
    Cette contrainte n'est pas le problème.
    Le problème fondamental (facile à corriger. Il te suffit de regarder la précaution que j'ai prise et de l'utiliser) est que ta fonction peut être dangereuse :
    Je vais me contenter de te signaler cet aspect-là (l'autre n'étant pas grave) :
    Danger :
    1) INVERSEMENT proportionnel au nombre de colonnes concernées par le repérage des doublons (danger beaucoup plus grand sur deux colonnes que sur 5, par exemple)
    2) Situation dangereuse moindre si les colonnes contiennent des chaînes de caractères
    3) plus dangereuse (un peu plus) si les colonnes contiennent des données comptables
    4) encore plus dangereuse si les colonnes contiennent des données numériques simples autres (scores de matches, de tournois, etc ...)
    Tu nous dis souvent qu'à Toulon, on est "réveillé". Montre que tu l'es, avant de prendre le risque de te faire maudire un jour par ceux auxquels ta "fonction universelle" aura peut-être fait perdre des données sans même qu'ils sachent pourquoi.
    Je vais te laisser réfléchir posément. Je ne reviendrai avec un exemple que si tu n'as pas su trouver (c'est facile) le calme nécessaire et la faille principale dont je te parle.
    J'ai dit "p o s é m e n t"...
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.
      3  1

  19. #39
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 753
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 753
    Points : 28 603
    Points
    28 603
    Billets dans le blog
    53
    Par défaut
    Bonjour Unparia,
    Quelle patience
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier
      2  0

  20. #40
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 82
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 422
    Points
    12 422
    Par défaut
    Bonjour
    Il m'en faut tous les jours (je suis un pêcheur acharné)
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.
      0  1

Discussion fermée
Cette discussion est résolue.
Page 2 sur 11 PremièrePremière 123456 ... DernièreDernière

Discussions similaires

  1. Identifier les doublons dans une requete
    Par totor92290 dans le forum IHM
    Réponses: 2
    Dernier message: 27/10/2016, 12h08
  2. Comment réperer les doublons dans une base de données?
    Par Marc31 dans le forum Langage SQL
    Réponses: 9
    Dernier message: 16/07/2015, 16h29
  3. [Débutant] Eviter les doublons dans une base access
    Par gilles_906 dans le forum VB.NET
    Réponses: 24
    Dernier message: 29/08/2011, 16h46
  4. Réponses: 0
    Dernier message: 09/02/2011, 09h13
  5. les images dans une base de données
    Par houhou dans le forum Bases de données
    Réponses: 8
    Dernier message: 22/06/2004, 14h27

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo