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. #81
    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
    Bon Patrick, au lieu d'aller à la plage , tu aurais pu faire un peu de lecture avant, celle que je t'ai proposé
    tu aurais pu voir plein d'explications/tests intéressant(e)s (un long chemin que j'ai pu parcourir avec l'aide de Marc qui n'a pas lésiné sur l'ensemble des points abordés)
    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

  2. #82
    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
    salut RYU
    si toi aussi tu commence a parler comme ca ca va pas aller hein !!! petit gedail

    marc a travaillé dans une classe pseudo dico pour Marc chouette perso j'ai deux moteurs qui fonctionnent a merveille celui de unparia et le mien un peu plus lourd avec Match

    ces deux la étant de toute façon et de loin bien plus rapide que celle que marc t'a fait car je l' ai tester cette classe et en plus c'est pas tout a fait le même travail

    et puisque l'on en est au conseil quand tu parle de classe tu devrais observer la réaction des groupe type je crois te l'avoir montrer une fois ou deux non?

    bref
    ma next version sera celle ci :

    0.25 secondes(0.28275 selon cache pour 4000 lignes triée et extractions de doublons sur 5 colonnes en une seule passe dans une variable tableaux sans toucher au tableau sur le sheets
    sur un sheets remplie a fond chez moi 65536 lignes 55.2145 secondes tu veux quoi de mieux
    je met plus de temps a le remplir qu'a le trier
    je crois sincèrement qu'aller plus loin serait rechercher la perfection ...ca n'existe pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Sub test7()
        Dim plage As Range, col, x, tablo
        x = timer
        Set plage = Sheets(1).Range("A1:E" & Sheets(1).Cells(Rows.Count, 1).End(xlUp).Row)    ' plage a prendre en compte
        col = Array(1, 2, 3, 4, 5)
        tablo = tableau_sans_doublons_X_colonnes3(plage, col)
        x = timer - x
        With ActiveSheet.Cells(1, 8).Resize(UBound(tablo), 1)
            .Value = Application.Transpose(tablo)
            .TextToColumns Destination:=.Columns(1), DataType:=xlDelimited, OtherChar:="|"
        End With
        MsgBox x & "secondes"
        MsgBox UBound(tablo)
    End Sub
    fonction

    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
    17
    18
    19
    20
    Function tableau_sans_doublons_X_colonnes3(rng, col)
        Dim la_col As New Collection, T As String, c As String, i As Long, n As Long
        ReDim tabl(rng.Rows.Count)
            n = 0
        With rng.Parent
            For i = 1 To .Cells(Rows.Count, col(0)).End(xlUp).Row
                T = "": For co = 0 To UBound(col): T = T & .Cells(i, col(co)) & IIf(co < UBound(col), "|", ""): Next
                On Error Resume Next: la_col.Add i, T
                If Err Then
                On Error GoTo 0
                Else
                    n = n + 1
                    tabl(n - 1) = T:
                    Err.Clear
                End If
            Next
        End With
        ReDim Preserve tabl(0 To n)
        tableau_sans_doublons_X_colonnes3 = tabl
    End Function
    voila
    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

  3. #83
    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
    T'inquiète c'était pour te taquiner
    PS : les tests on les avait fait sur 30 000 et 200 000

    le dico Mac qu'il m'a fait est un plus pour pourvoir lire les dico PC avec une petite adaptation et aussi pourvoir avoir un équivalent sur Mac au besoin

    sinon le choix est bien avec une collection au final sur mon post et c'est très rapide

    Edit : minime modif
    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

  4. #84
    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
    même moi je reste scotché moins de 5 secondes
    démo pour 65535 lignes regarde les msgbox si ca va pas trop vite pour toi
    Nom : demo2.gif
Affichages : 89
Taille : 977,5 Ko
    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

  5. #85
    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
    Bienvenue dans la collection
    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

  6. #86
    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
    on pourrait même s'en servir pour ton tri doublons intra colonne oui ,intercolonne non: tu t'en souviens
    et bien réfléchis tu verra juste un if........ avant le else

    re oui merci mais je connaissais
    la seule chose qui m'avais orienté ver les dico plutôt que collection c'est la fonction interne de cet object manquante "if collection.exists"

    on est obligé de le faire par la gestion d'erreur ou !!!! une sous boucle ce qui n'a plus de sens tu en conviendra
    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

  7. #87
    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
    Ah ! Enfin ! (mieux vaut tard que jamais).
    Dis-donc, patricktoulon : le coût de revient de ce petit outil est devenu celui d'un bras. J'espère que tu ne fais pas payer tes travaux à l'heure.

    Redevenons sérieux : et si tu te débarrassais maintenant de la collection ? Tu le peux. Il t'a été soufflé comment, plus haut, dans tout ce fatras (je reconnais qu'il est devenu laborieux de s'y retrouver, mais l'encombrement gênant n'est pas le fait des non-demandeurs). Relis donc tout (tout, car les choses sont maintenant "noyées") calmement. Cela devrait faire maintenant tilt.
    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

  8. #88
    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
    re
    Bonjour unparia
    non cet outils est pour moi et même si j'avais mis 10 jours de plus ca me dérange pas
    je fonctionne comme ca moi
    tu me raconte pas de roman , tu pointe, tu me dis rien, et je fait mes expériences et je trouve tout seul et je comprends mieux

    oui bon sans collection qui me permet de comparer en 1 ligne ca par contre c'est obscure après il y a peut être mieux sur !! même
    mais 4 secondes pour trier 65535 lignes faut pas déconner c'est bien, je vais gagner quoi sans ?? 10 millièmes de millièmes



    après si tu veux j'en ai une autre idée sans collection

    faire un sort (alphabétique) ou plus (petit/plus grand) pour les numériques et comparer item -1 et +1 puisque de toute façon je boucle sur tout les items au moins une fois
    sur le tableau avec chaine complète compilé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for i= 1 to cells..rows.count.......  -1
    if cells(i,x)=cells(i+1) then ...
    next
    mais je perds l'ordre d'origine
    on peut essaye dans le tableau transposé aussi en comparant la chaine complète avec countiif

    pffff je vais gagner quoi??

    non moi ce qui me gène le plus c'est que l'on soit obligé de gérer par l'erreur avec collection ca oui c'est un gros trou dans les propriétés de la collection c'est pour ca que je m'en sert pas d'ailleurs je l'ai déjà dis je crois

    avec le dico il y a la fonction ". exists"

    avec un object sortedlist il y a ".contains" cell ci ce tri dans l'ordre tout seule

    avec un object arraylist et la fonction ." sort" comme pour le sheets

    t'inquiet ca bien longtemps que je l'es ai exploré tout ces petites choses
    après sincèrement ca me métrais même 30 secondes pour un sheets complet ca me dérangerais pas
    j'ai fait cet exercice pour le plaisir mes outils actuels fonctionnant très bien même si plus lents
    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

  9. #89
    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
    Hi,
    Si tu te rapelles bien du 2e code de unparia en page 1 tu verras que l'ordre est resté intact au final
    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

  10. #90
    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
    re
    oui bon je viens d'aller voir encore voila c'est ca mais attention dans l'exemple de unparia il travaille sur la concaténation de 2 colonne en concaténant et testant dans la même boucle 1


    dans cette exercice on peu aller jusqu'à N colonnes et la son for...next unique ne suffit plus alors oui il perd par l'ordre mais sur 45 ou x colonnes l'ordre sera perdu

    sur 2 colonne s
    abc
    abc

    sur 5 colonne ici sur le tri l'ordre va changer forcement
    abcde
    abfde
    abcdf
    abcda

    RYU ne prends par pour des diamants tout ce que tu vois de brillant

    tout dépends du contexte encore une fois

    pour ma part vous l'avez compris je fait souvent des fonctions qui resserviront ailleurs alors je leur fait faires strictement ce pour quoi elle ont été créé quitte après dans cet exemple faire un sort si j'en ai besoins

    car si je ne veut pas trier le model de unparia me fou le boxon même si le travail est fait

    après divers test même countiif est plus lent que la collection

    se sera donc la collection qui l'emporte dans ce contexte bien précis ( suppression de doublons/pas de .sort) hein je le dis
    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

  11. #91
    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
    avec le dico il y a la fonction ". exists"

    avec un object sortedlist il y a ".contains" cell ci ce tri dans l'ordre tout seule

    avec un object arraylist et la fonction ." sort" comme pour le sheets
    T'as tout recensé ? T'es sûr ?
    Et avec Excel, il y a quoi, qui t'est offert, qui t'a été signalé et que tu n'as pas lu ou que tu as lu "en diagonale", hein ?
    Et ne n'est pas uniquement de la vitesse, que tu gagnerais, mais également de la mémoire utilisée....
    Allez ! Relis donc tout. Je ne vais pas le faire à ta place pour retrouver péniblement (dans tout ce fatras devenu épouvantable) ce qui t'y a été dit (de mémoire) au moins deux fois et par deux intervenants différents, dont moi-même !
    Le dire à nouveau ? Et pourquoi donc, puisque tu ne sembles pas lire ce qui t'est dit ?
    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

  12. #92
    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 Patrick
    T as pas du tester le code car il est impossible que tu ne retrouve pas l'ordre
    Les n• de lignes étant affiché en feuille tremplin afin de remettre les données dans l'ordre

    Edit: lire le code ne suffit pas tu peux passer à côté de certains petits détails, mieux vaut le tester
    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

  13. #93
    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
    re
    @unparia
    dans le contexte ou je veut pas faire un sort countiif semble être la seule solution pour exel et c'est plus lent que collection j'ai testé bien avant collection a peine un peu moins que match

    après peut être que je m'y suis mal pris je sais pas

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    for i=..........
     
    if worksheetfunction.countif(cells(i,x),columns(x))....then 
     
    next
    temps très proche de match soit a peu près pour 4000 ligne 3 seconde , 4/5 seconde pour match , 0.25 pour collection y a pas photo a l'arrivé

    et surtout par a force de vouloir expliquer j'en oublie certains aspect du contexte c'est que je n'est pas la possibilité de modifier dans les cellules ni a droite du tableau de réception ni en dessous
    c'est une condition absolue que j'ai bien précisé y a un momment déjà

    alors transposer la concatenantion dans une colonne pour après la mouliner avec countif c'a m'est pas possible

    on s'est égaré avec le sheets complet mais dans mon besoins j'ai environ 20000 ligne html le tableau de réception en fait autant et quelques fois selon les pages que je scrute même moins et surtout pas plus!!!!! car il y a autre chose( le reste de la page web ) en dessous et a droite dans le sheets les sheets de reception sont tout prêt a l'emploi ils sont crées pour une mise en page et je ne dois pas depassé la plage qui est attribuée au tableau

    donc passer par la suppression dans un variant est des l'ors que l'on a saisi ce contexte est quasi obligatoire
    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. #94
    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
    Ah bon ?
    Continue/recommence donc tes tests (mais sans tout mélanger dans la même marmite) ...
    Bon .. je te laisse à tes oeuvres.
    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. #95
    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
    re pour expliquer les contraintes que j'ai


    je télécharge deux pages web

    l'une est une table html 29 colonnes avec des données en tout genre y compris dates
    la deuxième est un résumé et présentation avec articles de la premières qui sera diffusée

    elle sont donc bien formatée: des tables ,des articles ,même des fois des photos de produits etc...

    dans la deuxième il yla table est vide elle est prévue pour recevoir une compilation trié de la première mais elle est plus petite que la page web 1 forcement
    ce tri est fait selon les doublons de dates et produit voir abandon produit car cout de fabrication trop élevé etc et encore plein de critères

    je ne dois pas dépasser la plage de réception car en dessous il y a du texte (paragraphe rapport sécurité , environnement normes EU etc....

    a droite il y a des photos ,articles (retour client), rapport de réunion ( avenir) etc......

    countif m'obligerais a utiliser une feuille tremplin ce qui dans les tests effectué jusque la m'ajoute du temps
    a moins que la fonction countif fonctionne dans un variant je ne peut faire autrement
    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. #96
    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
    pour expliquer les contraintes que j'ai
    Je crois te l'avoir déjà dit :
    ce sont là TES contraintes. Je ne veux même pas en entendre parler, en matière de doublons.

    Bon. Je vois que le calme est revenu.
    Un petit cadeau pour toi, patricktoulon pour saluer ce calme nécessaire.
    La vitesse d'exécution de la fonction Countif est très imperceptiblement impactée par le nombre de lignes concernées par le comptage.
    Tel n'est pas le cas d'une collection, dont la vitesse de consultation dépend considérablement du nombre des éléments qu'elle contient (et de manière non linéaire, de surcroît)
    Les feuilles faisant l'objet de recherches de doublons comportant en règle quasi générale un très grand nombre de lignes, je te laisse comprendre pourquoi préférer utiliser Countif.
    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. #97
    Membre émérite
    Avatar de pijaku
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    1 814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Août 2010
    Messages : 1 814
    Points : 2 949
    Points
    2 949
    Billets dans le blog
    10
    Par défaut
    Bonjour messieurs,

    Je suis "de loin" cette discussion et ces très nombreux "rebondissements", et je n'arrive pas à saisir toute la portée de ces "méandres".
    Vous allez certainement pouvoir m'expliquer.

    J'ai voulu tester par moi même les procédures énoncées ici et là.
    Celle d'unparia (mes amitiés et meilleurs vœux au passage) en page 2 de cette discussion notamment, sur une feuille de données de 200 000 lignes et 5 colonnes donne de très bons résultats.
    En passant, bien sur, la plage en mémoire dans un tableau, les résultats nous donnent 5 secondes pour 197 704 lignes uniques.

    Pourquoi vouloir chercher plus loin?

    J'ai adapté ce code pour le rendre "universel" selon la volonté de patrick (salutations et bons vœux également) notamment en ce qui concerne le nombre de colonnes à traiter, voir même ajouté un test pour savoir si l'utilisateur voulait les doublons ou les lignes uniques... Même chose.
    7 secondes pour 200 000 lignes uniques (sur feuille de 200 000 lignes et 7 colonnes de données).
    Que demander de plus?

    D'autre part, je ne comprend pas ce mystérieux countif n'utilisant ni colonne, ni feuille, ni méthode de worksheetfunction.
    Unparia en a parlé dans cette looooongue discussion, mais j'avoue que cela reste un mystère pour moi, si ce n'est par une collection...
    Cordialement,
    Franck
      0  1

  18. #98
    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 Franck
    Laisse réfléchir ...
    Celui qui doit réfléchir aura ensuite l'occasion de réfléchir sur d'autres aspects plus "philosophiques", eux ... relatifs à la finalité même d'un tel outil.
    Les "couteaux suisses" ont certes l'avantage d'attiser l'intérêt des badauds. Les pros ne les achètent jamais.
    Amitiés
    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

  19. #99
    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
    re
    tu a parfaitement raison pikju

    les eul selon le besoins qu'il faut retenir c'est la collection et le countif qui donnent un résultat quasi identique a 200milieme près le countif étant le plus long chez moi avec l'exemple de unparia en page 1 du post

    je préfère ma version avec collection car je ne touche pas a l'original j'aurais pu accélérer en touchant l'original mais comme ca j'ai quelque chose d'universel même si ca prend 800 millième de plus

    collection pour le sheets complet 65536 ligne temps 4.2135 selon le cache

    l'exemple de unparia donne pour la même chose 4,975146 j'ai du faire sauter un "-1" dans la ligne d'un "for .....next" sinon ca plantait

    voila donc 4 secondes pour 65536 lignes c'est plus que raisonnable c'est pour cela que

    comme unparia considère que les contraintes ne sont pas importantes je n'ai plus approfondi et m'en tiens a ma version (collect/tableau/texttocolumn)



    voila
    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

  20. #100
    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
    Je comprends maintenant mieux le sens des trois vers suivants de la fable "Le renard et les raisins", à savoir :
    Le galand en eût fait volontiers un repas ;
    Mais comme il n'y pouvait atteindre :
    "Ils sont trop verts, dit-il, et bons pour des goujats. "
    Mais tu as raison : A quoi bon s'intéresser à quelques fractions de secondes ?
    Et à vrai dire, je ne n'y attachais pas non plus jusqu'ici une grande importance, dans la mesure où ce genre de recensement ne se fait que de temps à autre.
    Mais voilà : c'est bel et bien toi qui, avant de faire comme le renard de la fable, "avançais" quelques fractions de secondes comme étant un grand succès, remettais en cause telle ou telle autre méthode moins performante, clamais que tu étais prêt à faire et refaire jusqu'à atteindre le "plus mieux", non ?
    Et je me suis pris au jeu.
    Je vais donc de ce pas chercher à "grappiller" plus que des fractions de secondes. Je ne sais pas si je vais y parvenir, mais ce qui est certain, c'est que je vais le tenter.
    A demain, peut-être ...
    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 5 sur 11 PremièrePremière 123456789 ... 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