aide doublons vba | ||
---|---|---|
Inscription: 23/09/2008
Messages:
2
Système d'exploitation: PC Version Excel utilisée: 2003,2007 |
Posté le : 26-09-2008 19h02
Bonjour à tous
J'aimerai écrire une macro excel qui me permette de repeter le code lorsque un doublon est identifié. Un membre m'a déja proposé une for,ule Excel, mais lorsqu'il y a un nombre important de sujet celui ci devient tres lent, je souhaite donc passer par une macro exemple Nom Code Jean 1 Pierre 2 Jonas 3 Jean 1 Jacques 4 Jean 1 |
|
|
Re: aide doublons vba | ||
---|---|---|
Inscription: 18/05/2006
De Saône-et-Loire (71)
Messages:
1539
Système d'exploitation: PC Version Excel utilisée: 97, 2000, 2002, 2003, 2007, 2010, 2013, 2016 et 365 |
Posté le : 26-09-2008 22h34
Bonsoir Irenée, le Forum,
Bienvenu à toi. Après différentes tentatives, voici ce que je pense être la façon la plus rapide de traiter ta liste : A mettre dans un module de code Standard : Option Explicit Résultat : traitement quasi-immédiat en lançant cette procédure. Cette façon de faire devrait normalement être beaucoup plus rapide que ce qui t'a été proposé sousCE LIEN (même si je n'ai pas pris le temps de tester la proposition de l'ami bhbh, qu'il me pardonne). Je pense que tu es nouveau sur les forums de discussions Irenee, aussi je me dois de t'informer que le multiposts n'est généralement pas très bien vu des habitués (ou alors, il convient d'informer l'ensemble des intervenants, de part et d'autre, que tu as déjà fait la demande ailleurs en fournissant le lien correspondant). Si la présente solution te convient (ou celle de notre site ami), je te remercie de bien vouloir SOLDER le présent fil de discussions comme il se doit. Cordialement, Didier_mDF
Le Webmaster La réponse vous satisfait ? Merci de revenir solder le sujet en [résolu], voir ce lien |
|
|
Re: aide doublons vba | ||
---|---|---|
Inscription: 23/09/2008
Messages:
2
Système d'exploitation: PC Version Excel utilisée: 2003,2007 |
Posté le : 26-09-2008 22h49
Bonsoir Didier
Une fois de plus merci pour ton aide Je tiens à te rassurer qu'il n'était pas du tout dans mon intention de causer qulque préjudice, merci pour ton conseil |
|
|
Re: aide doublons vba | ||
---|---|---|
Inscription: 19/04/2008
Messages:
16
Système d'exploitation: PC Version Excel utilisée: 2003, 2007 |
Posté le : 18-10-2008 19h32
Bonsoir Didier
Bonsoir, Irenée Effectivement, ton code est plus rapide.. Sur 10 240 lignes : Mon code : 1,625 seconde le tien : 1,4375 seconde Par contre, sur 40 960 lignes Ton code : 10,6875 secondes Le mien : 6,486375 secondes testé avec Xl2003, P4 3.2 Ghz, Win xp Amicalement Bonne soirée |
|
|
Re: aide doublons vba | ||
---|---|---|
Inscription: 18/05/2006
De Saône-et-Loire (71)
Messages:
1539
Système d'exploitation: PC Version Excel utilisée: 97, 2000, 2002, 2003, 2007, 2010, 2013, 2016 et 365 |
Posté le : 21-10-2008 23h22
Bonsoir Irenee, bhbh,
bhbh, je suis comme toi, j'aime bien comprendre... aussi j'ai pris le temps de refaire des tests et je t'avoue que je ne comprends pas bien comment tu as réalisé les tiens ou alors, je n'ai rien compris au sujet ! Pour que les choses soient claires, voici le détail de ce que j'ai fait (je t'invite à reproduire la même chose et, le cas échéant, je tiens à ta disposition le classeur qui m'a servi de support) : CONDITIONS DU TEST : J'ai donc reproduit un classeur sur 41 000 lignes. Pour ces tests, j'ai repris les données de départ soit sur la plage B1:B6 : Jean J'ai ensuite ajouté un Timer à ma procédure qui ressemble donc à ça : Sub Test_mDF() J'ajoute ensuite ta procédure dans laquelle j'insère le même Timer ainsi que l'utilisation de la propriété ScreenUpdating (pour aider à la comparaison) : Sub Test_bhbh() LE TEST - Je lance ma procédure une première fois : Résultat : 16,539085 --> soit un peu plus de 16 secondes (un peu plus long que chez toi) - J'efface la colonne C et je relance ma procédure une deuxième fois: Résultat : 16,546875 - J'efface à nouveau la colonne C et relance une troisième fois : Résultat : 16,546875 (exactement le même résultat que la 2ème fois) - Je lance ta procédure une première fois : Résultat : .... 405,7265625 (soit un peu plus de 5 minutes !!!) - Pensant que la propriété ScreenUpdating pourrait peut-être avoir ici un effet négatif (ça arrive !), je la neutralise en effaçant les 2 lignes correspondantes et je relance une deuxième fois ta procédure : Résultat : 472,1640625 (soit plus de 7 minutes !!!) J'ai pourtant pris soin de réaliser les deux séries de test strictement dans les mêmes conditions ! Autre remarque importante : chez moi, ta procédure ne met pas à jour les codes 1, 2, 3, etc... comme souhaité dans le sujet. La colonne A ainsi que la colonne C restent vierges. Pour info : tests réalisés sous XL2003 - Portable Centrino - 1,20 Ghz - Windows Vista. Cordialement, Didier_mDF
Le Webmaster La réponse vous satisfait ? Merci de revenir solder le sujet en [résolu], voir ce lien |
|
|
Re: aide doublons vba | ||
---|---|---|
Inscription: 19/04/2008
Messages:
16
Système d'exploitation: PC Version Excel utilisée: 2003, 2007 |
Posté le : 24-10-2008 19h35
Bonsoir, Didier
Loin de moi, cette envie de vouloir polémiquer Mais tes résultats m'étonnent.... je joins un fichier, allégé, avec un code qui remplit les 40 000 lignes (pour ne pas alourdir le fichier) Ensuite, un bouton, avec ton code, et un autre, avec le mien J'ai laissé les résultats obtenus sur mon PC (PS, WinXp, et Vista, peut-être?) J'ai aussi modifié le code, afin de répondre à ta remarque importante (bienvenue, c'était un oubli de ma part) Bonne soirée PS, si d'autres personnes pouvaient tester, je pense qu'on pourrait avancer... Amicalement, et bon week-end |
|
|
Re: aide doublons vba | ||
---|---|---|
Inscription: 18/05/2006
De Saône-et-Loire (71)
Messages:
1539
Système d'exploitation: PC Version Excel utilisée: 97, 2000, 2002, 2003, 2007, 2010, 2013, 2016 et 365 |
Posté le : 24-10-2008 20h59
Bonsoir Irenee, bhbh, le Forum,
Non bhbh, le mot "polémique" n'a pas sa place ici et si j'ai détaillé le déroulement de mon test c'est justement pour que tu puisses faire de même et revenir. Toi et moi, on fait partie de cette catégorie de gens qui aiment bien comprendre et c'est tout l'objectif de cet échange Cela dit, grâce à ton exemple, je viens de "comprendre" pourquoi nous avons des résultats si différents (et XP ou Vista n'y sont pour rien). En fait, nous ne partons pas de la même interprétation de l'énoncé : - Toi, tu pars du principe que sur la série qu'indique l'ami Irenee est déjà déterminée et que chaque élément possède déjà son code en colonne A et donc qu'il n'y a que 7 éléments sans doublon que tu "tires" ensuite sur 40000 lignes. - Moi, je pars du principe qu'on ne connait pas à l'avance le nombre d'éléments sans doublon possible dans une liste variable qui peut aller jusqu'à 40000 lignes (peut-être toutes différentes !). Ce qui sous-entend déjà qu'il n'y a rien en colonne A au départ du traitement (juste une liste variable de noms en colonne B) et que la macro est chargée d'affecter un numéro (code) à chaque élément distinct rencontré et ce même numéro pour chaque doublon. Si je lance l'exemple tel que tu l'as interprété (avec les codes en colonne A) alors oui, il n'y a pas photo et la procédure que je propose ne sert visiblement à rien car elle n'a pas le même objectif. Si, par contre, j'efface les "codes exemples" inscrits en colonne A (c'est comme ça que je les vois moi), alors nous avons là un résultat fort différent... Cordialement, EDITION : Et si tu passes par là en soirée, je serai ravi d'en discuter avec toi sur notre XLchat si tu le veux bien Didier_mDF
Le Webmaster La réponse vous satisfait ? Merci de revenir solder le sujet en [résolu], voir ce lien |
|
|
Re: aide doublons vba | ||
---|---|---|
Inscription: 19/04/2008
Messages:
16
Système d'exploitation: PC Version Excel utilisée: 2003, 2007 |
Posté le : 24-10-2008 21h35
Re-,
Didier, code légèrement modifié pour initialiser les comptes Sub hubert() t = Timer Application.ScreenUpdating = False Dim MesNums As Object, Cel As Range, Cde As Integer Set MesNums = CreateObject("Scripting.Dictionary") Cde = 1 For Each Cel In Range("B1:B" & [B65000].End(xlUp).Row) If Not MesNums.Exists(Cel.Value) Then MesNums.Add Cel.Value, Cde Cel.Offset(0, 1).Value = Cde Cde = Cde + 1 Else temp2 = MesNums.items temp1 = MesNums.keys For i = 0 To MesNums.Count If temp1(i) = Cel.Value Then Cells(Cel.Row, 1).Value = temp2(i): Exit For Next i End If Next Cel [G2] = Timer - t End Sub |
|
|
Re: aide doublons vba | ||
---|---|---|
Inscription: 18/05/2006
De Saône-et-Loire (71)
Messages:
1539
Système d'exploitation: PC Version Excel utilisée: 97, 2000, 2002, 2003, 2007, 2010, 2013, 2016 et 365 |
Posté le : 26-10-2008 00h09
Bonsoir Irenee, bhbh, le Forum,
Bravo bhbh ! Impeccable. Il n'y a pas photo, ta procédure est maintenant 2 à 3 fois plus rapide que celle que je proposais. Félicitations, je suis épaté Du coup, tu me réconcilies avec le Dictionary. Cordialement, Didier_mDF
Le Webmaster La réponse vous satisfait ? Merci de revenir solder le sujet en [résolu], voir ce lien |
|
|
Vous pouvez voir les sujets.
Vous ne pouvez pas débuter de nouveaux sujets.
Vous ne pouvez pas répondre aux contributions.
Vous ne pouvez pas éditer vos contributions.
Vous ne pouvez pas effacez vos contributions.
Vous ne pouvez pas ajouter de nouveaux sondages.
Vous ne pouvez pas voter en sondage.
Vous ne pouvez pas attacher des fichiers à vos contributions.
Vous ne pouvez pas poster sans approbation.
Qui consulte actuellement ce sujet ?
1 Utilisateur(s) anonymes