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. #41
    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
    a bon la contrainte de ne pas pouvoir supprimer des ligne n'en n'est pas une ?????
    autrement dis je veux un tableaux sans doublons et le retranscrire sur une feuille dans une range prévue a cet effet c'est pas grave pour toi le reste du sheets ????même si sur cellule qui ne concerne pas la plage prévu a cet effet son sur les mêmes lignes ??


    quand au fait que les données soit numériques ou pas perso avec le model Scripting ou celle la je n'ai pas de soucis j'ai fait le test
    maintenant si il y a des formules peut être j'ai pas tester

    quand au fait aussi que si je choisi des colonne non contiguës dans l'array pourraient poser problème je dois être miro car ca n'est jamais arrivé

    si le jambon et le saussicon et le pain de la table1 est egale au jambon et le saussicon et le pain de la table2 la table1 est servi identiquement que la table 2

    le moteur en lui même que ce soit le tiens ou le mien a 2 doigt près la duré c'est pareil( imperceptible sur 1000 lignes , c'est le reste dont nous parlons pas de la même chose

    a supposer que le tableau d'origine doit rester intègre comment fait tu?????? tu est bien obligé de créer un new tableau

    ce tableau tu le place dans sa destination

    perso j'utilise Scripting depuis que je l'avais faite en 2013 c'est un peu lourd je te l'accorde mais elle ne m'a jamais fait défaut pour quelques données que ce soit


    alors il arrive que parfois les données numérique se retrouve en texte notamment su mon pc portable (petit triangle vert)rien empêche de remettre le bon format


    je vois vraiment ce qui te gène dans le principe de match
    comme je l'alimente avant le teste match il le trouve forcement et si i=A-1 alors c'est bon

    si tu veux me dire quelque chose y a pas de soucis pointe le doigt dessus en terme clair(vba pour être précis ) mais pas des grandes phrases qui me sont inutiles en fait car comme je te l'ai dis on parle pas le même langage vba lui est le même pour nous deux

    Citation Envoyé par Philippe Tulliez Voir le message
    Bonjour Unparia,
    Quelle patience
    ben oui moi si j'ai un soucis je pointe le doigt dessus sans détour autant que possible en language VBA( c'est ici le forum vba excel je crois non?) avec démo de code et explication je raconte pas une histoire

    je sais pas le quel des deux a besoins de patience entre nous hein Mr Philippe Tuliiez

    que l'on me dise voila ca ca fait ca alors essaie ceci en expliquant pourquoi et démontrant la véracité du fait établi

    si je commence a parler en image ou je ne sais quelle onomatopées pour expliquer je suis pas sur que l'on se comprenne

    mais je sais que je parle dans le vide et ca fait un momment que ca dure alors

    les seuls qui sont capable de faire sur tout le forum c'est mercatog et Marc

    enfin bref perso j'appelle un chat :un chat
    je suis désolé pour ton bureau Mr Philippe Tuliiez
    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. #42
    Expert éminent

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 073
    Points : 9 853
    Points
    9 853
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    comme de coutume, je suis vos discussions, et si mon intervention n'est pas opportune, ne pas hésiter, je vais pas me vexer

    alors :

    1) Concaténer des valeurs de colonnes pour ensuite chercher des identités possibles ..... si on oublie de mettre un séparateur entre chaque valeur concaténées, alors un "A" & "-B" et un "A-" & "B" sera identique à tort

    2) beaucoup de novices nous lisent, et même si parfois je peux omettre de typer une variable par moment, essayons de tenir cette rigueur dans les codes qu'on publie
      5  0

  3. #43
    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 joe.levrai
    Tu es très gentil d'avoir expliqué ce qui relève de la logique la plus basique, y compris hors développement.
    J'ai hésité à te mettre le pouce vert que je t'ai quand-même mis.
    PS : je le lui avais pourtant soufflé, cet aspect-là ...
    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

  4. #44
    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 la je suis d'accord joe pas de grand discours mais une démo intéligible est clair tu a parfaitement raison je l'avais mis en premier lieu puis enlevé après je ne sais pourquoi

    voila une réponse comme je les aimes c'est clair et précis

    je ne peut qu'acquiescer

    dans ce cas la comme dans ma version la concaténation est faite dans une boucle de 0 a X (nbcol) au lieu de concaténer je teste chaque cellules du tableau variant y a pas de soucis

    merci Joe ca m'avait échappé

    si unparia me répondait a chaque fois comme ca , ca serait beaucoup mieux on se comprendrait peut être

    re
    vraiment bien vu ma grosse erreur JOE n je n'ai jamais eu a en subir la faille mais c'est un fait

    c'est tres simple pour y remedier

    dans la ligne de concatenation ajouter la valeur de y a chaque cellule du tableau variant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    chaine = "": For y = 0 To UBound(col): chaine = chaine & tableau(i, col(y))& y : Next
    la confusion entre A- et B ou A et -B ne pourra pas se faire

    voila c'est comme ca que j'aime les échanges c'est productif et si j'ai tord je l'accepte volontiers quand on m'en apporte ou que l'on mette le doigt dessus

    même une virgule suffit comme elle était au départ

    mais comme mon split join avec le "-" ne plaisait pas a unparia je l'ai enlevé alors que c'est déjà comment je procède dans ma version Scripting 2013

    y a cas remonter dans les post pour voir si je dis des bêtises hein!!!!

    une belle demonstration du bordel entre deux personnes qui se comprennent pas et deux autres qui savent se faire comprendre

    ce problème est réglé en tout cas

    merci grandement merci JOE d'avoir mis le doigt dessus, je suis tellement a essayer de décoder les dires de unparia que j'ai fait sauter le garde fous de la confusion dans la concatenation

    absurde je te l'accorde et pas digne de moi car si il y a un truc que je sais bien faire c'est bien ca jouant très souvent avec le string d'un join(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
      0  1

  5. #45
    Expert éminent

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 073
    Points : 9 853
    Points
    9 853
    Billets dans le blog
    5
    Par défaut
    je suis trop fatigué pour creuser, mais ton indice y en séparateur me semble encore dangereux ?

    pourquoi pas un vbnullstring ou un retour chariot par exemple ?

    j'ai une fonction qui teste si une chaine existe dans un array, je fais un join avec un séparateur vbnullstring, et je n'ai jamais constaté de problème en 3 ans.
      0  0

  6. #46
    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 retour chariot ok mais vbnullstring ne pourrait être comparé en binary je crois car il occupe rien dans une chaine en terme de string je sais pas j'ai jamais testé

    après la simple virgule fait très bien l'affaire aussi dans l'exemple de A et -B ou A- et b elle ne se retrouve pas au même endroit mais dans l'éventuel cas ou une virgule s y trouverait le retour chariot semble être la solution absolue

    ou alors en vbunicode qui me rajoute le chr(0) automatiquement il serait forcement pas au même endroit pour l'exemple de A et (-/B) comme je le fait dans ma contrib des chiffres en lettres
    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. #47
    Expert éminent

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 073
    Points : 9 853
    Points
    9 853
    Billets dans le blog
    5
    Par défaut
    Citation Envoyé par patricktoulon Voir le message
    je sais bien faire c'est bien ca jouant très souvent avec le string d'un join(tableau)

    ah ouais, tu joues avec le string d'une charmante join ?

    quel est son prénom ? Là tu donnes juste son nom de code
      0  0

  8. #48
    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
    bon ben chez moi 4,5468 secondes pour 4000 lignes et 5 colonnes




    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
    21
    22
    23
    24
    Sub test4()
        Set plage = Range("A1:E" & Cells(Rows.Count, 1).End(xlUp).Row)    ' plage a prendre en compte
        Dim T
        T = timer
        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
        T = timer - T & "secondes "
        Cells(1, 8).Resize(UBound(tablo), Nbcol) = tablo    ' transcription sur le sheet ou on veut
        MsgBox T
    End Sub
    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)) & vbCrLf: 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
    et pour faire vos test

    voici une macro vite fait pour remplir le sheets sur 4000 ligne et 5 colonne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Sub kkkk()
        For i = 1 To 4000
            l = Split("a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z", ",")
            texte = ""
            For e = 1 To 5
                texte = texte & l(Round(Rnd * 24) + 1) & ","
                Lig = Split(texte, ",")
                Cells(i, 1).Resize(1, 5) = Lig
            Next
        Next
    End Sub
    voila
    edit:
    si vous voulez plus de doublons réduisez le nombre de caractères dans l'array de la sub "kkkk" et changez 24 pour le nombre de caractères dans l'array je le dis au cas hein!!
    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. #49
    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
    1) Je n'ai pourtant jamais cessé, patricktoulon, de considérer cet aspect-là !
    Y compris au tout départ. Voir ma réponse (message 4) :
    - choix 2 : comparaison de leur concaténation, mais chaque valeur étant alors séparée de l'autre par un séparateur unique (et non risquant d'être présent dans chacune des cellules)
    et comment je l'ai mis en pratique après.
    2) j'en profite pour revenir à ce que je souligne en 1) : le Toulonnais croit-il vraiment que j'ai choisi (dans mon code plus bas) chr(1) comme séparateur par hasard ?
    Il suffisait de lire et d'appliquer.

    Lorsque tu en auras terminé avec cet aspect fondamental-là, on parlera d'autres aspects. Rien de fondamental, mais tout concernant la vitesse d'exécution. Un indice, entre autres (et le Toulonnais devrait savoir "capter" au passage) : limiter tout simplement les travaux inutiles grâce à une simple petite notion toute bête : celle de colonne_la_plus_déterminante (à passer en paramètre de la fonction, car dépendant du contexte d'utilisation et donc du développeur).
    Allez, le Toulonnais -->> montre que tu sais capter cela (c'est facile) et tu accroîtras significativement la vitesse d'exécution de ta "fonction universelle". Ne me dis pas que tu ne comprends pas cela non plus, s'il te plait.
    Je te regarde.
    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

  10. #50
    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 Patrick,

    Regarde les quelques tests que je faisais avec Marc (à partir du post #90 et plus bas)
    Ici

    J'ai pas scruté tout mon ancien post, pas le temps
    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

  11. #51
    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
    Bon boulot oblige je pars en intervention extérieure 50 km j'ai un de mes apprenti qui est dans la panade je reprends toute a l'heure
    unparia j'examinerais
    RYU je regarderait ton post

    pour info j'ai essayé a la place du tableau une collection simplement

    je passe a 8.249 seconde pour exactement le même tableau mais bon je vous l'accorde je connais pas bien la collection j'ai toujours préféré le dico alors il y a des choses que je n'ai peut etre pas capté
    a toute a l'heure

    pour info aussi unparia j'ai réessayé le join pour la concatenation avec séparateur unique en effet ca plombe le truc a 7.8165 tandis qu'avec un for...next je suis a 4 .xxxx

    come quoi des fois hein!!!
    et si c'était cela que tu voulais dire le dire simplement aurait été plus reposant pour moi hihihihihi

    allez a +
    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. #52
    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,
    Il serait plus intéressant de lire le post en entier même si tu sautes des passages, histoires de suivre le déroulement
    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. #53
    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 info aussi unparia j'ai réessayé le join pour la concatenation avec séparateur unique en effet ca plombe le truc a 7.8165 tandis qu'avec un for...next je suis a 4 .xxxx
    Ben non, d'autant que tu t'en es, depuis, débarrassé. C'est de ce que tu utilises dans ta "fonction universelle" (ton message 35), que je parle.
    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
    .
    Et de quoi te sers-tu ? De la fonction worksheetfunction.match. Elle est gourmande et parfaitement inutile en la remplaçant par un autre mécanisme, en amont.
    Et cela également, tu peux le paramétrer dans ta fonction, de sorte à ce que l'on évite de considérer systématiquement que "Petit" est un doublon de "petit" (selon ce paramètre).
    Allez, le Toulonnais. Je te regarde.

    EDIT : puisque les Toulonnais ont toujours besoin d'un exemple pour que cela fasse tilt ===>>

    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
    Dim i As Long, t, A As Long
    Range("A" & 300).Value = "toto titi tata"
    t = Range("a1:A10000") ' on se fabricotte une matrice de test
    Dim deb As Double
     
     
    deb = Timer '  ---->>> je chronomètre à partir d'ici, pour ne pas mélanger les genres
    For i = 1 To 5000
      A = WorksheetFunction.Match("toto titi tata", t, 0)
    Next
     
     
    MsgBox "je m'appelle MATCH et viens de te bouffer " & Timer - deb & " secondes " & vbCrLf & _
    "pour vérifier 5000 fois sur 10000 lignes" & vbCrLf & _
    "c'est là la même durée qu'il m'aurait fallu pour procéder à 5000 de tes vérifications sur une matrice de 10000 lignes"
    Ne crois-tu pas que tu devrais toujours avoir toi-même ce genre de réflexe et de préoccupation "sériée" ?
    Tu y gagnerais et orienterais mieux tes choix de mécanisme.
    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

  14. #54
    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 puré
    re
    puré me voila rentré bon
    j'ai tester ton exemple chez moi 9,4652 pour les 5000 passes, sur un tableau 8,726xx

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    MsgBox "je m'appelle MATCH et viens de te bouffer " & Timer - deb & " secondes " & vbCrLf & _
    "pour vérifier 5000 fois sur 10000 lignes" & vbCrLf & _
    "c'est là la même durée qu'il m'aurait fallu pour procéder à 5000 de tes vérifications sur une matrice de 10000 lignes"
    d'acords toi un range moi une matrice(tableau)
    mais attention toi tu teste sur 1 colonne moi la concaténation de 5 colonnes bien obligé de créer la matrice (vecteur)pour tester la totalité de ce qui est a tester

    j'avais essayé application.index pour récupérer une ligne d'une tableau dans le sheets vers un join( array )pour le test pour ne pas avoir a créer la matrice mais ca plombe le truc a 22.3469


    âpres la collection de ton model fonctionne mais je suis a 8,xxx après je vois pas trop ce que je pourrais inventer comme mécanique le reste étant certainement plus gourmand

    j'avoue honnêtement que je comprends pas bien ce que tu a voulu me démontrer avec un match sur 1 colonne

    si c'est le fait que je créé un ""tableau"" plutôt que boucler sur les cells directement ok mais j'ai toujours appris que travailler sur un variant est toujours plus rapide qu'un range et visiblement le timer me donne raison

    quelle mécanique selon toi je devrais utiliser a la place de MATCH (collection ou Scripting dictionary) étant de sur plus long après test

    je vois q'une seconde boucle imbriqué style archaïque mais cela m'étonnerait que cela soit plus rapide que match

    après quand on parle de gourmandise il faut savoir de quoi on parle effectivement un tableau x000 lignes en mémoire prends forcement de la place par contre en exécution il va plus vite

    après il faut penser au transport inter(sub/fonction) bien obligé de créer ses variables afin de les transporter

    non je vois vraiment pas ce qui pourrais être plus rapide que match ou collection (a 1 seconde près sur 5000 items) et qui me restituerait une variable tableau dument remplie et sans doublons
    la il faut m'éclairer

    après nos deux moteur bases suffisent a travailler sur un sheets oui je te l'accorde en supprimant les cells repérée comme doublons la je te l'accorde c'est rapidos

    mais ca n'est pas mon exercice mon idée c'est de transporter le tableau sans toucher a l'original

    peut être qu'un redim preserve pour vecteur a chaque item ferait que match tourne moins de tour alors oui!! si le redim prend pas lui même plus, ca je sais pas j'ai pas testé

    a voir
    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

  15. #55
    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
    d'acords toi un range moi une matrice(tableau)
    mais attention toi tu teste sur 1 colonne moi la concaténation de 5 colonnes bien obligé de créer la matrice (vecteur)pour tester la totalité de ce qui est a tester
    Non M'sieu. C'est sur une matrice, que j'ai travaillé
    Et avec mon "modèle", comme tu dis, elle n'a qu'une colonne.
    âpres la collection de ton model fonctionne mais je suis a 8,xxx après je vois pas trop ce que je pourrais inventer comme mécanique le reste étant certainement plus gourmand
    Comment ? Un Toulonnais à court d'idée ? Oh ! je te l'ai pourtant un peu soufflée, l'idée, un peu (pas tellement) plus haut.

    j'avoue honnêtement que je comprends pas bien ce que tu a voulu me démontrer avec un match sur 1 colonne
    Ben ... Que ton Match est très gourmand, pardi, et que l'utilisation de Match est à abandonner. Il te faudra donc imaginer une autre approche, en reprenant bien évidemment la démarche en amont.
    Je ne vais tout de même faire à ta place "ton" outil, morceau par morceau, te conduire à des stratèges stratège par stratège, etc ... Ce serait t'enlever le plaisir.
    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

  16. #56
    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
    ouais

    1. Match x secondes ca fonctionne nikel
    2. collection x+1 secondes environ ca fonctionne nikel
    3. Scripting n'en parlons pas on dépasse les 6/7 seconde de plus ca fonctionne nikel
    4. en string carrément c'est rigolo juste pour le fun ca marche et c'est tout sans commentaire


    oui la je suis a court d'idée

    après il faut être raisonnable après avoir lu 5000 ligne il faut que j'aille faire un tour dehors m'adhérer et que je mette les gouttes au yeux ,la fonction le fait en 4 secondes et des poussières

    je pense que l'on est dans ce contexte dans des délais raisonnables sachant que ma variable peut être transportée on peut en faire ce que l'on en veut et même retravailler dessus par la suite toujours sans toucher a l'original
    peut être les filtre et multi critérial je sais pas moi je suis pas fermé
    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

  17. #57
    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
    Bien
    L'essentiel étant que tu sois satisfait, tout est donc pour le mieux dans le meilleur des mondes

    PS : il est juste décevant qu'ayant lu (si tu l'as lu) ceci :
    Ne crois-tu pas que tu devrais toujours avoir toi-même ce genre de réflexe et de préoccupation "sériée" ?
    Tu y gagnerais et orienterais mieux tes choix de mécanisme.
    Tu n'aies pas compris ce qui était chronophage et cherché activement (et trouvé) ce qui l'était environ 50 fois moins.
    Ah ben oui, bien sûr : cela demandait quelques essais de comparaison, de manière sériée (donc hors même ton outil). Et discipline.

    EDIT : Allez, je vais faire une dernière tentative de provoquer réveil et réaction du Toulonnais :
    - tu obtiendrais un bien meilleur résultat que le tien sans l'outil de Excel, ni tes vecteurs, ni collection, ni dictionnaire, ni Match, etc .... Juste en :
    - -- composant un nouveau range (avec les concaténations) -->> boucle rapide
    --- parcourant ensuite ce range de bas en haut et utilisant un truc tout bête --->> boucle également super-rapide
    (il y a bien évidemment encore mieux à faire, mais même cela serait bien plus rapide que toute ta construction actuelle)
    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

  18. #58
    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
    ok je vais essayer d'en faire en créant un range 1 colonne avec la concaténation

    le seul bémol c'est que ca implique de toucher le sheets initial ou même un autre avant la transposition du tableau

    et les contraintes que je me suis imposé sont :
    1. ne pas toucher le tableau initial
    2. ne pas pouvoir supprimer des lignes dans le sheets de destination ( les colonnes suivantes sont occupées par d'autre données)
    3. pouvoir travailler sur 2 classeurs ( données a rapatrier /classeur de destination) ( variable tableau nécessaire )


    se sont ces contraintes qui font que le choix des méthodes est quand même limité

    si ta méthode 1 colonne est plus rapide ca peut faire l'affaire mais dans un variant car impossible de supprimer les ligne d'un sheets

    pas si facile de trouver le bon compromis dans ce contexte tu en conviendra

    j'ai essayé hier les filtres multi field et multi criterial et c'est pire

    mais je crois que j'ai une idée qui reviendrais coller le tableau entier dans destination et a vider la cellule 1 de la ligne doublons en cas de doublons et la prendre ou non dans un variant selon le contenu vide ou pas
    et faire un clear de la plage de destination puis transposer le tableau sans doublons (tout ca dans la plage entière renvoyé dans la destination)

    mais même dans ce cas là le principe du test match ou collection restera nécessaire ce qui changera pas grand chose finalement

    a moins que l'on s'amuse avec un sheets temporaire dans la destination la on fait ce que l'on veut
    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

  19. #59
    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
    Ces "contraintes", patricktoulon :
    1) c'est TOI, qui te les impose
    2) elles n'ont aucune utilité pratique réelle et ne correspondent pas à la philosophie même d'un traitement des doublons. Là également, c'est toute une "philosophie" qui est peut-être à reconsidérer

    Mais c'est TON choix et TU en as peut-être une utilisation "justifiée" ...
    D'autres, une très très très grande majorité, ont une autre conception et posent un autre regard que toi sur ce qu'est le traitement des doublons. Tel est, d'ailleurs mon cas et l'outil ad hoc que je "me" suis fait depuis kala kala (tiens, la revoilà, l'expression ...) :
    - non seulement me satisfait
    mais
    - permettrait également (si on le souhaitait vraiment) tel qu'il est, d'utiliser le résultat comme on l'entend dans tel ou tel autre cas, puisque le résultat est une plage, avant même de décider d'en faire ceci ou cela ...
    - permet également certains choix (entre élimination des "premiers" doublons ou élimination des derniers doublons ?, cacher ou supprimer ?, respecter ou non la casse ?, etc ...)
    Et pour accélérer la vitesse de traitement (je te l'ai suggéré plus haut, mais tu as probablement lu en diagonale) : un paramètre concernant la colonne la plus révélatrice.

    Maintenant : j'estime personnellement que nous sommes ici dans une discussion qui avait une toute autre finalité (affichage de références dans une colonne) que celle résultant de "détournements" (traitement des doublons "composés" sur des colonnes non forcément adjacentes). Elle est marquée résolue.
    Toutes les déviations subséquentes, codes, etc ... seront "noyés" et donc perdus dans une masse devenue de surcroît quasiment informe, voire illisible.
    Voilà ....
    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

  20. #60
    Expert éminent

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 073
    Points : 9 853
    Points
    9 853
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    insérer deux colonnes,
    dans la première, y injecter une formule CONCATENER()
    dans la seconde, un NB.SI progressif

    de là, on obtient les lignes doublons, qui sont les lignes dont la seconde colonne a un chiffre > 2
    on peut ensuite faire ce qu'on veut, et même (si le contexte le permet) trier en amont les lignes pour accoler les doublons entre eux

    Est-ce l'idée ou je visualise mal ? Car c'est probablement ce que je ferai si je devais rester au possible sur les feuilles.
      1  0

Discussion fermée
Cette discussion est résolue.
Page 3 sur 11 PremièrePremière 1234567 ... 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