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. #101
    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
    la critique facile enrobé de belle citations ou verts empruntés a d'autre (car bien difficile de créer les siens hein!!)
    ce qui pour moi est une preuve d'une flagrante démagogie qui quelque fois soule un peu je dois dire ,d'autant plus qu'elle n'apporte rien si ce n'est que se remémorer nos années d'études
    ce qui n'a rien a voir avec l'Objet d'un forum comme celui la
    quelle perte de temps
    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. #102
    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
    quelle perte de temps
    C'est très bien de commencer à t'en préoccuper.
    Et non : je ne suis poète que de temps à autre, notamment à la pêche, auprès ce ceux qui partagent réellement mes goûts.
    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

  3. #103
    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
    essaie d'en faire un en tenant compte que le sheets de base ne peut être modifié et que l'on ne peut ajouter de sheets tremplin et qui dure 4 a 5 secondes

    tu comprendra peut être a ton tour pourquoi tu perd le tiens

    moi aussi je sais faire je prends une voiture j'enleve tout sauf le moteur et les roues elle aura des performances supérieures c'est évident

    et je vous dis """tout les trains ne partent pas a la même heures"" oupsss!!!! je viens de faire ce qui me soule chez toi hihihihih
    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. #104
    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
    essaie d'en faire un en tenant compte que le sheets de base ne peut être modifié et que l'on ne peut ajouter de sheets tremplin et qui dure 4 a 5 secondes
    Si tu le permets, je ne pense pas avoir à recevoir des directives sur la manière de faire.
    Ou alors il te faudra également en donner à Microsoft en ce qui concerne ses traitements.
    Contente-toi de savoir que je ne ferai jamais rien qui ne restitue tout en l'état. Le reste ne regarde personne d'autre.
    Mais j'arrête là. J'ai d'autres choses à faire, hein ...
    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

  5. #105
    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
    Salut,
    Encore un fil qui se perd totalement à cause d'egos. Dommage, certains, dont moi, auraient apprécié avoir d'autres solutions, juste pour apprendre.
    Pour apprendre le vba parce qu'en matière de doublon, soit on n'en a pas besoin et alors on les évite à la source, soit on n'en a pas besoin et ils sont présents et donc on les supprime une fois de temps à autres, soit on en a besoin et alors il ne faut pas les supprimer mais les identifier...
    Mais bon, une fois encore, dommage!!!
    Cordialement,
    Franck
      0  1

  6. #106
    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
    Ne t'inquiète pas, Franck
    Une solution encore meilleure que celle qui a été adaptée de la mienne va probablement venir
    Pour le reste, je suis totalement d'accord avec toi : une application bien pensée empêche à la base même la création de doublons. Ce qui est simple à organiser et gérer dans la plupart des cas. Il arrive cependant que des fichiers de type csv abondent "en flot" des données déjà présentes et que certains ont préféré utiliser une facilité Excel et "faire le ménage" a posteriori plutôt que traiter différemment (avant même de les ajouter, avec lenteur induite accrue) les articles (un par un) du .csv.
    Dans ce dernier cas, le nombre de lignes de la feuille est généralement TRES grand et très supérieur à la soixantaine de milliers. Et c'est là, que la collection montre des petits défauts de vitesse.
    Mais laisse-moi réfléchir à un stratagème qui surpasserait celui que j'ai déjà montré et dont le mécanisme a été adopté et approprié ...
    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

  7. #107
    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
    il n'y a pas d'histoire d'ego la dedans, juste une réflexion sur le comment dire les choses sans détours

    après malgré les méandres selon certains dires tu peux quand même retrouver des choses intéressante j'en ai appris beaucoup sur ce coup

    juste que unparia prend un malin plaisir a caresser la lettre pour te dire une chose qui tient en deux mots ca veux pas dire que je dénigre ses propositions
    j'ai garder le moteur base de sa proposition avec collection

    ce qu'il faut retenir et je viens de lire un autre post a ce sujet sur les doublons il n'est pas toujours bon de penser excel avant vba

    après le principe du dico tu le connais

    pour la coollection bien plus rapide que Scripting dictionary
    c'est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    on error resume next 
    la_collection.add( x,valeur)
    if err then msgbox "c'est un doublons "'tu fait donc ce que tu a besoins dans le then
    vraiment plus rapide que le dico
    après les méthode unparia sur sheets tremplin sont très rapides aussi faut il pour voir ajouter sheets dans le fichier même temporaire
    j'ai testé toute les méthode évoquées et sur un tableau de 65536 ligne on a entre 4.2125 et X jusqu'à Scripting
    après si tu peut modifier le sheets de base le moteur est encore plus rapide tu pointe la cellule et la vide et a la fin tu vire tout les specialcell(xltypecellempty) tu gagne encore 1.5 seconde

    tout dépends du contexte en fait que tu a dans l'environnement du fichier
    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

  8. #108
    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
    après si tu peut modifier le sheets de base le moteur est encore plus rapide tu pointe la cellule et la vide et a la fin tu vire tout les specialcell(xltypecellempty) tu gagne encore 1.5 seconde
    Ah ! Enfin ...
    Là, ami patricktoulon, tu te montres déjà beaucoup plus astucieux. Je vais te dire un secret : c'est exactement la même idée de base que la mienne.
    Tu la mets en oeuvre ou je le fais ?
    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

  9. #109
    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 si tu veux
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Sub test8()
        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)
        tableau_sans_doublons_X_colonnes4 plage, col
        x = timer - x
       plage.Columns(1).SpecialCells(xlCellTypeBlanks).EntireRow.Delete
        MsgBox x & "secondes"
       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_colonnes4(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 .Cells(i, 1) = ""
                      Next
        End With
     
    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

  10. #110
    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
    Patrick,
    1- tu te contredis complètement en affirmant que tout dépend de l'environnement du fichier et que tu veux créer une fonction universelle... Il te faudrait créer, pour cela une fonction avec BEAUCOUP plus de paramètres que ce que tu proposes au fil de ce sujet...
    2- unparia, je le connais pas trop mal pour le fréquenter ici et la depuis quelques temps (années) et son comportement est juste de la pédagogie. Il ne s'agit pas de démagogie, ses images sont très souvent justes et explicites, malgré leur aspect rébarbatif du à leur difficulté de compréhension (d'où leurs intérêts!!!). Néanmoins, on avance tout de même à grand pas, grâce à lui, tu en conviens toi même...

    Jacques ,
    Je ne doutes aucunement que d'autres solutions sont possibles. Elles ne m'intéressent que par la méthode employée. J'ai dis ce que je pense des doublons...
    Mais j'ai vraiment envie de voir ce qu'il est possible de faire... (D'autant plus que tu m'as déjà démontré ce même principe par countif et que j'ai oublié de le noter... Désolé !)
    Cordialement,
    Franck
      0  1

  11. #111
    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
    non je ne me contredis pas
    le dernier exemple que je vient de donner ne me sert a rien chez moi car pour mes besoins je dois laisser la base tel quelle je n'est pas le droit de la toucher ( en lecture seule)
    elle est protégée et elle m'est envoyée 3 a 6 fois par jours

    je le redis tout dépends des conditions de travail ( environnement ) qui font choisir la méthode de restitution

    je peux pas être plus clair
    on tente un countif? sous la même forme?
    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. #112
    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
    Je reviens sur "l'universalité" d'une fonction à propos des doublons.
    Il faut que celle-ci soit adaptable à tous les cas. Soit je veux une liste de données uniques, soit je veux une liste des doublons selon critères.
    Par conséquent, puisque vous êtes pro en vba et moi non, j'estime, à mon niveau, que cela ce traduit par :
    1- une variable booléenne pour savoir si l'on veut la liste des doublons ou une liste unique,
    2- un ParramArray() des paramètres définissant ce que l'on souhaite.

    Le tout, bien entendu, en sus des paramètres range etc...

    Non?????????

    Citation Envoyé par patricktoulon Voir le message
    non je ne me contredis pas
    le dernier exemple que je vient de donner ne me sert a rien chez moi
    Le principe même d'une fonction universelle est qu'elle doit aussi bien servir chez toi que chez tous...
    Non?
    Cordialement,
    Franck
      0  1

  13. #113
    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
    Citation Envoyé par pijaku Voir le message
    Le principe même d'une fonction universelle est qu'elle doit aussi bien servir chez toi que chez tous...
    Non?
    et bien justement la mienne avec collection/tableau variant /texttocolumn fonctionnera chez toi et chez moi c'est ca que j'explique depuis des lustres

    et puis non une fonction c'est par ce que elle est universelle que je dois y mettre des boolean et tout y cointi afin de la faire sortir les doublons ou supprimer

    non !! ma fonction supprime les doublons chez toi, chez moi sur X colonne point barre

    voila
    je ne dois vraiment pas parler Français pour me répéter a ce point

    coup de hache sur les doublons point barre :c'est plus clair ?

    universalité n'a jamais voulue dire multitâche a ma connaissance du moins
    edit:
    pour que le dernier exemple sit vraiment universel et que ca fonctionne aussi sur une plage ne commençant pas en colonne"A"
    il fautremplacer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Err Then .Cells(i, 1) = ""
    per
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Err Then .Cells(i, rng.columns(col(0))) = ""
    et suprimer le .column(1) dans la sub pour les specialcells

    et me me la il y aurait quand meme un risque si toutes les cellule de cette dite colonne(1) de la plage ne sont pas toutes remplie a l'origine

    il serait donc dans le cas ou l'on peut toucher le sheets et si la colonne le permet utiliser la colonne suivante la plage je dis bien si le retse du sheets le permet

    toute ses contraintes avec ma version( collect/tableau/texttocolumn) passe a la trappe puisque l'on travail sur un tableau en mémoire
    autrement dis moi et les contraintes que j'ai sur un fichier ,vous sans ces contraintes elles fonctionnera toujours tandis que les exemple de unparia me serviront peut être sur un autre fichier mais pas celui que je traite tout les jours
    voila 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

  14. #114
    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
    CE qu'il est IMPORTANT de garder à l'esprit :
    Une chose est le recensement des doublons. Une autre est ce que l'on fait de ce recensement.
    Et donc :
    1) recenser (selon les critères de colonnes) --->> obtention d'une plage des doublons
    2) décider seulement alors de ce que l'on fait de cette plage
    --- supprimer les lignes doublons ? (de la plage, donc)
    --- cacher les lignes doublons ? (de la plage, donc)
    --- colorier les lignes doublons ? (de la plage, donc)
    --- copier les lignes doublons (la plage, donc) ailleurs ?
    --- ne copier ailleurs que le résultat d'une épuration par masquage , suppression, etc ... ailleurs ?
    etc ...
    L'outil, on le voit, doit s'arrêter à l'étape 1
    Les étapes suivantes (ce que l'on fait de la plage) DOIVENT rester à la seule initiative du développeur de l'appli, qui fera de la plage résultat ce qu'il voudra, comme il l'entend.
    Un "couteau-suisse" (comme tous les couteaux suisses) ne ferait qu'ajouter lourdeurs, lenteurs et ... une certaine rigidité.
    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. #115
    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 avec nb.si 7.2563 secondes principalement pris par l'écriture de la formule dans une colonne prévue a cet effet + la colonne de la concat

    comme quoi!!!
    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. #116
    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
    Bonsoir tout le monde,

    pijaku,
    le couteau suisse du doublon en une seule procédure j'y crois pas trop
    D'ailleurs quand j'ai travaillé sur mon post des doublons avec Marc, j'avais déjà des idées bien en tête, mais selon le résultat voulu,
    les méthodes sont légèrement différentes c'est pour cela que le résultat de mon post contient différentes procédures selon ce que l'on veut obtenir (dont une procédure principale pour choisir comment traiter les doublons)
    J'ai essayé de penser large afin de traiter différents cas dont les principaux :
    - recenser les doublons (pouvant aller à plus de 2 par doublons) sur une feuilles tiers avec leur n° de ligne => choix d'en supprimer certains (selon les données annexes à la ligne du doublon qui peuvent être différentes)
    - Choix de supprimer les doublons en 1e position ou en dernières position avec ou sans ligne vide

    Et il ne faut pas penser qu'un code sur les doublons est inutile, du moment qu'il est bien penser.

    C'est sur que traiter en amont pou éviter les doublons c'est mieux, mais parfois on a pas forcément le choix, d'où la nécessité de créer un code pour traiter les doublons

    voilà

    Moi aussi je suis de près et de loin ce post selon le temps que j'ai
    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

  17. #117
    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
    unparia avec nb.si 7.2563 secondes principalement pris par l'écriture de la formule dans une colonne prévue a cet effet + la colonne de la concat
    1) il y a manières et manières d'utiliser une fonction. Certaines sont adroites, d'autres le sont moins.
    2) il y a également (essaye de "capter" cela au vol - c'est un indice) manière et manière de concaténer
    Mais laisse tomber Countif, si tu as des difficultés avec.
    Focalise-toi maintenant sur ce à quoi tu as fait allusion un peu plus haut, qui est également mon idée du moment et qui devrait à mon avis donner de beaux résultats.
    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. #118
    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

    tiens comme quoi penser aexcel avant VBA hein !!
    la concat est hyper rapide mais la nb.si plombe tout
    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 test10()
        Set plage = Sheets(1).Range("A1:E" & Sheets(1).Cells(Rows.Count, 1).End(xlUp).Row)    ' plage a prendre en compte
        With Range("F1")
            .Select
            .FormulaR1C1 = "=CONCATENATE(RC[-5],""-"",RC[-4],""-"",RC[-3],""-"") & CONCATENATE(RC[-2],""-"",RC[-1])"
            Selection.AutoFill Destination:=Range("F1:F65536"), Type:=xlFillDefault
        End With
     
        With Range("g1")
            .Select
            .FormulaR1C1 = "=COUNTIF(C[-1],RC[-1])"
            Selection.AutoFill Destination:=Range("G1:G65536"), Type:=xlFillDefault
        End With
    End Sub
    je vais essayer d'intégrer les formules autrement
    le concat dans ton principe a toi serait intéressant
    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. #119
    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
    Oublie le CountIf et focalise-toi sur la nouvelle idée.
    Même pas besoin de CONCATENATE pour concaténer
    Même ceci (je l'ai fait tout-à-l'heure) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("F1:F" & n).Formula = "=A1 & ""#"" & B1 & ""#"" & C1 & ""#"" & D1 & ""#"" & E1"
    fonctionne très bien (0,375 secondes pour n = 200000)
    Bien --> seconde étape ?
    attribue un N° de ligne en colonne G (toujours par Formula avec la fonction ROW() )
    Tu commences à deviner le reste (la 3ème étape) ?
    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. #120
    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 même en écrivant les formules directement nb.si plombe tout pire que match
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Sub test11()
    Range("f1:f65536") = "=CONCATENATE(RC[-5],""-"",RC[-4],""-"",RC[-3],""-"") & CONCATENATE(RC[-2],""-"",RC[-1])"
    Range("g1:g65536") = "=COUNTIF(C[-1],RC[-1])"
    End Sub
    j'ai essayé worksheetfunction .countif(colonne,cells(i,x)) dans une boucle c'est pareil
    j'ai pensé a calculate false mais sa fait plus le boulot avant de le remettre et la c'est reparti pour des plombes
    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

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