Liste sans doublon récupérée dans un autre dossier excel
Résolu/Fermé
anakin_74
Messages postés
40
Date d'inscription
mercredi 9 octobre 2013
Statut
Membre
Dernière intervention
17 novembre 2022
-
13 mars 2015 à 16:26
ThauTheme Messages postés 1442 Date d'inscription mardi 21 octobre 2014 Statut Membre Dernière intervention 29 juillet 2022 - 17 mars 2015 à 16:28
ThauTheme Messages postés 1442 Date d'inscription mardi 21 octobre 2014 Statut Membre Dernière intervention 29 juillet 2022 - 17 mars 2015 à 16:28
A voir également:
- Liste sans doublon récupérée dans un autre dossier excel
- Liste déroulante excel - Guide
- Supprimer doublon excel - Guide
- Excel liste déroulante en cascade - Guide
- Mettre un mot de passe sur un dossier - Guide
- Si et excel - Guide
1 réponse
ThauTheme
Messages postés
1442
Date d'inscription
mardi 21 octobre 2014
Statut
Membre
Dernière intervention
29 juillet 2022
160
14 mars 2015 à 23:30
14 mars 2015 à 23:30
Bonsoir Anakin, bonsoir le forum,
Comme tu ne donnes que très peu d'explications sur où se trouvent les données et où il faut les renvoyer tu verras souvent (à adapter à ton cas)... Copie ces deux macros ci-dessous dans un module standard du classeur book2.xlsm. D'ailleurs tu parles d'extention xlm ce qui prête à confusion entre xls / xlsm et xml... Là aussi tu adapteras...
Les macros :
et
Comme tu ne donnes que très peu d'explications sur où se trouvent les données et où il faut les renvoyer tu verras souvent (à adapter à ton cas)... Copie ces deux macros ci-dessous dans un module standard du classeur book2.xlsm. D'ailleurs tu parles d'extention xlm ce qui prête à confusion entre xls / xlsm et xml... Là aussi tu adapteras...
Les macros :
Sub Macro1() Dim CD As Workbook 'déclare la variable CD (Classeur Destination) Dim OD As Worksheet 'déclare la variable OD (Onglet Destination) Dim CH As String 'déclare la variable CH (CHemin d'accès) Dim CS As Workbook 'déclare la variable CS (Classeur Source) Dim OS As Worksheet 'déclare la variable OD (Onglet Source) Dim DL As Integer 'déclare la variable DL (Dernière Ligne) Dim TC As Variant 'déclare la variable TC (Tableau de Cellules) Dim D As Object 'déclare la variable D (Dictionnaire) Dim I As Integer 'déclare la variable I (Incrément) Dim TMP As Variant 'déclare la variable TMP (tableau TeMPoraire) Set CD = ThisWorkbook 'définit le classeur destination CD Set OD = CD.Sheets("Feuil1") 'définit l'onglet destination OD (à adapter à ton cas) CH = "C:\Users\Anakin\Documents\VBA" 'chemin à adapter à ton cas évidemment... 'si il se trouve dans le même dossier que "book2.xlsm" tu peux utiliser : 'CH = CD.Path & "\" On Error Resume Next 'gestion des erreurs (en cas d'erreur passe à la ligne suivante) Set CS = Workbooks("book1.xlsm") 'définit le classeur source CS (génère une erreur si ce classeur n'est pas ouvert) If Err <> 0 Then 'si une erreur a été générée Err = 0 'annule l'erreur Workbooks.Open (CH & "\book1.xlsm") 'ouvre le classeur Set CS = ActiveWorkbook 'définit le classeur source CS End If 'fin de la condition On Error GoTo 0 'annule la gestion des erreurs Set OS = CS.Sheets("Feuil1") 'définit l'onglet source (à adapter à ton cas) 'définit la dernière ligne éditée DL de la colonne 1 (=A) de l'onget source OS (colonne à adapter à ton cas) DL = OS.Cells(Application.Rows.Count, 1).End(xlUp).Row TC = OS.Range("A1:A" & DL) 'définit le tableau de cellules TC (tu adapteras aussi la colonne à ton cas) Set D = CreateObject("Scripting.Dictionary") 'définit le dictionnaire D For I = 1 To UBound(TC, 1) 'boucle sur toutes les lignes I du tableau de cellules TC en partant de la première (à adapter à ton cas) D(TC(I, 1)) = "" 'alimente le dictionnaire D Next I 'prochaine ligne de la boucle TMP = D.Keys 'récupère dans le tableau temporaire TMP la liste des éléments du dictionnaire D sans doublon Call tri(TMP, LBound(TMP, 1), UBound(TMP, 1)) 'lance la procédure de tri alphabétique For I = 0 To UBound(TMP) 'boucle sur tous les éléments du tableau temporaire TMP (sans doublon et trié) OD.Cells(I + 1, 1).Value = TMP(I) 'renvoie la valeur de TMP(I) dans la cellule ligne I+1 colonne 1 de l'onglet OD (à adapter à ton cas) Next I 'prochaine élément de la boucle CS.Close SaveChanges:=False 'ferme le classeur source CS sans enregister les changements End Sub
et
Sub tri(a As Variant, gauc As Integer, droi As Integer) ' Quick sort tiré du site de Jacques BOISGONTIER : http://boisgontierjacques.free.fr/pages_site/Dictionnaire.htm Dim ref As String Dim g As Integer Dim D As Integer ref = a((gauc + droi) \ 2) g = gauc: D = droi Do Do While a(g) < ref: g = g + 1: Loop Do While ref < a(D): D = D - 1: Loop If g <= D Then temp = a(g): a(g) = a(D): a(D) = temp g = g + 1: D = D - 1 End If Loop While g <= D If g < droi Then Call tri(a, g, droi) If gauc < D Then Call tri(a, gauc, D) End Sub
16 mars 2015 à 10:11
Je te dit merci et bravo pour ce code: très claire et bien expliqué.
J'ai installé les 2 macros et ça marche parfaitement.
Ya vraiment des gens doués
Petite remarque pour le sub tri de Boisgontier:
Si on applique le debug (compile VBA project) il manque un
Dim temp As String, pour être "propre"
A bientôt
16 mars 2015 à 11:08
Pour être tout à fait complet, le Dim temps As String n'a pas été ajouté par Boisgontier car il a cherché à "universaliser" sa macro dans le sens ou l'on peut trier tout type de données.
Toi, en ajoutant cela ça marche parce que tu tries des string. Mais quelqu'un d'autre peut très bien vouloir trier des Double...
De même, je remplacerai :
par des long :
16 mars 2015 à 17:32
Rendons à César ce qui appartient à César !
Comme le dit Pikaju, la déclaration des variables n'a pas été ajoutée par Jacques BOISGONTIER mais par moi même. Je le fais car j'utilise l'Option Explicit et j'avais oublié de déclarer TEMP. Pour l'éthique j'essaie de ne pas oublier de dire que le code vient de son site, car il est vrai que je n'arrive pas à le retenir et donc à pouvoir le restituer sans faire un copier/coller. Quant à le commenter... Il faudrait que je le comprenne et ce n'est pas le cas...
17 mars 2015 à 07:40
Cette procédure de tri rapide de Boisgontier doit s'affranchir, justement, de l'Option Explicit, pour pouvoir être utilisée dans tous les cas de figure.
Au "pire", si l'on veut déclarer toutes les variables, les nombres (indices des tableaux) doivent être déclarés As Long et temp, pour accepter tout et n'importe quoi comme valeur, As Variant.
Donc, avec déclaration de variables, je préfères cette utilisation :
Ensuite, la citation des sources devrait être obligatoire et, pour le moins, systématique. C'est une règle que chacun devrait respecter et, là dessus, tu as entièrement raison.
Enfin, pour t'aider à comprendre cette procédure, je t'invite à consulter ce lien wikipédia relatif à l'algo de tri rapide Quick Sort.
A++
Franck
17 mars 2015 à 10:22
Et en plus je comprends tout.
Merci