Comparer deux listes

Jx7

XLDnaute Nouveau
Bonjour!

Je suis en train d'essayer d'aider plusieurs universités qui gèrent des listes d'étudiants et malheureusement ils ne conaissent VRAIMENT PAS Excel donc je m'suis dit "fais ta B.A." :p

Bref... voilà le topo (j'pense pas que ce sera trop dur pour vous):

ils ont régulièrement des listes d'étudiants qui leur arrivent et ils doivent intégrer ces nouvelles listes à une liste à eux. Heureusement pour nous, les listes ton toutes le même format.

En gros c'est une colonne nom, une colonne prénom, adresse, etc...

rien de bien compliqué.

le problème c'est qu'ils ont souvent des doublons.

Ma question est donc: Comment créer une macro qui ouvrirait le fichier souhaité et qui intègrerait les étudiants qui ne sont pas déjà présents dans la liste existante?
J'ai déjà fait la partie qui liste les fichiers présents dans le répertoire ; y'a plus qu'à choisir lequel intégrer à la liste existante.

dit + simplement: j'ai une liste A et je reçois régulièrement d'autres listes (B, C, D, etc...)

comment intégrer une liste (la C par exemple) à ma liste A en évitant les doublons?

Merci par avance :)
 

Excel-lent

XLDnaute Barbatruc
Re : Comparer deux listes

Jx7 à dit:
j'pense pas que ce sera trop dur pour vous

Je dirais même plus : facile et très rapide :
Réponse : "utilise la fonction recherche du forum".

Il y a déjà plusieurs solutions. Je suis sûr qu'une d'elle trouvera grâce à tes yeux.

Bonne recherche.

PS. : si la solution qui te plait n'est pas sous forme de macro, ce n'est pas grave, utilise l'enregistreur de macro ;)
 

MJ13

XLDnaute Barbatruc
Re : Comparer deux listes

Bonjour Jx7 et Excel-lent et le forum

Si tu connais un peu ce site, tu dois arrver à proposer un fichier sans onnées confidentielles pour avoir une plus grande chance qu'un Xldien t'aide.

En plus si tu as déjà fait une partie, cela évitera de le refaire.
 

Jx7

XLDnaute Nouveau
Re : Comparer deux listes

Bonjour et merci pour vos réponses.

J'ai cherché et cherché sur le forum mais en vain... J'ai trouvé des morceaux de réponses mais j'ai pas trouvé un cas qui "colle" au mien, désolé...

Voilà mon fichier ainsi que 2 fichiers pour exemple de traitement:

etu_doublons_v3.zip
(j'vous raconte pas la galère pour uploader un fichier depuis mon lieu de travail...)

J'ai d'ailleurs un autre petit problème:
Lorsque j'utilise la fonction SpecialCells(xlLastCell) il ne me sélectionne pas la dernière cellule vide... Comment faire?
Car lorsque j'ai copié ma liste A c'est OK mais quand je veux copier ma liste B à la suite de la liste A qui vient d'être collée, je n'arrive pas à me placer sur la premiere cellule vide de la colonne A...

Merci à vous :)
 

MJ13

XLDnaute Barbatruc
Re : Comparer deux listes

Bonjour,

Dans ton cas, j'essaierai de faire une concaténation avec le nom, le prénom et le CP (quoiqu'on pourrait encore avoir des doublons mais exceptionnel).

Puis j'exporterai les listes de la colonne concaténée dans une feuille les uns en dessous des autres en mettant l'origine du fichier dans la première colonne.
Enfin je ferai un TCD pour avoir les doublons.

Il ya surement plus simple mais bon je ne suis pas un pro des doublons!
 

skoobi

XLDnaute Barbatruc
Re : Comparer deux listes

Bonjour tout le monde,
Jx7, remplace ta macro de traitement par celle-ci:
Code:
Private Sub CommandButton__traiter_fichiers_Click()
' ================================================================================================ '
' TRAITE LES FICHIERS DE LA LISTBOX                                                                '
' ================================================================================================ '

mon_Fichier = ActiveWorkbook.Name

For i = 1 To ListBox__nom_fichiers.ListCount
With ThisWorkbook
    Set Destination = .Sheets("doublons").Range("a65536").End(xlUp).Offset(1, 0)
End With
 Workbooks.Open Filename:=mon_Path + mon_Tableau(i)
 With Sheets(Mid(mon_Tableau(i), 1, Len(mon_Tableau(i)) - 4))
  .Range(.Range("A2"), .Range("A2").End(xlDown).Offset(0, 9)).Copy Destination
 End With
 
Next

End Sub

Il ne reste plus qu'à traiter la liste de la feuille doublons.

A+
 

Jx7

XLDnaute Nouveau
Re : Comparer deux listes

MJ13: En fait la colonne du numéro d'étudient devrait suffire (la première colonne) donc je n'ai pas besoin de concaténer. J'ai donc pris la solution de skoobi (en + j'avais qu'à faire un copier-coller, lol)

Dans tous les cas : Merci ENORMEMENT à VOUS DEUX :)

Je pense que je vais me débrouiller pour le reste ;-)

En fait, Excel sans Excel-Downloads c'est comme un inverseur de phase à quadripolation de fréquences variables sans manuel d'utilisation... :p

++
 

Jx7

XLDnaute Nouveau
Re : Comparer deux listes

Bon...

La suite n'a pas été bien loin puisqu'au moment de classer en ordre croissant mes étudiants par numéro, j'ai un message d'erreur:

Code:
"Erreur d'exécution '438':

Propriété ou méthode non gérée par cet objet.

Suite au code de skoobi j'ai ajouté:

Code:
Sheets("doublons").Activate
Columns("A:J").Select
Selection.Sort Key1:=Range("A2"), Order1:=xlAscending, Header:=xlGuess, _
 OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
 DataOption1:=xlSortNormal

et c'est sur la ligne Selection.Sort..... que j'ai l'erreur...

Ca me le fait souvent et ça énerve vous pouvez pas savoir... On enregistre une action qui nous génère donc une macro pondue par Excel lui-meme!!! et en la réexécutant àa bug... -_- allez comprendre...

edit: J'ai essayé toutes les solutions qui m'avaient été donnée ICI (sauf celle de Tinnou qui a créé une fonction spécialement pour ça) mais sans résultat...

incroyable qu'un truc aussi simple déconne...
 
Dernière édition:

jeanpierre

Nous a quitté
Repose en paix
Re : Comparer deux listes

Bonjour Jx7, le forum,

Essaies avec seulement :
Selection.Sort Key1:=Range("A2"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom

Sans garantie.

A te lire.
Jean-Pierre
 

Jx7

XLDnaute Nouveau
Re : Comparer deux listes

Bonjour Jx7, le forum,

Essaies avec seulement :
Selection.Sort Key1:=Range("A2"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom

Sans garantie.

A te lire.
Jean-Pierre

Merci pour ton aide :)

malheureusement cette fois il bloque sur
Code:
Columns("A:J").Select

avec un joli
Code:
Erreur d'exécution '1004':

La méthode Select de la classe Range a échoué.

snif snif.

C'est frustrant d'être bloqué à un niveau si.... basique -_-
 

Cousinhub

XLDnaute Barbatruc
Re : Comparer deux listes

Bonsoir, Jx7, skoobi, jeanpierre, MJ13, le forum

ci joint un classeur qui récupère toutes les données des classeurs annexes, les copie dans une feuille nommée "transit", fait une extraction par filtre élaboré avec données sans doublons, tri et fermeture des fichiers "annexes"...

Le code :

Dans l'évènement de la feuille :


Private Sub CommandButton__traiter_fichiers_Click()
' ================================================================================================ '
' TRAITE LES FICHIERS DE LA LISTBOX '
' ================================================================================================ '
Call traitement

End Sub


Dans un module "standard"

Public mon_Path As String
Public mon_Fichier As String
Public mon_Integer As Integer
Public mon_Variant As Variant
Public mon_Tableau(0 To 10)
Dim Derlig As Integer

Sub traitement()
Application.ScreenUpdating = False
mon_Fichier = ActiveWorkbook.Name

Sheets("doublons").Copy After:=Sheets(2)
ActiveSheet.Name = "transit"
For i = 1 To Sheets("accueil").ListBox__nom_fichiers.ListCount
With ThisWorkbook
Set Destination = .Sheets("transit").Range("a65536").End(xlUp).Offset(1, 0)
End With
Workbooks.Open Filename:=mon_Path + mon_Tableau(i)
With Sheets(Mid(mon_Tableau(i), 1, Len(mon_Tableau(i)) - 4))
.Range(.Range("A2"), .Range("A2").End(xlDown).Offset(0, 9)).Copy Destination
End With
ActiveWorkbook.Close False
Next
Derlig = Range("A65000").End(xlUp).Row
With Sheets("doublons")
.Select
Sheets("transit").Range("A1:J" & Derlig).AdvancedFilter Action:=xlFilterCopy, _
CopyToRange:=.Range("A1:J1"), Unique:=True
.Range("A1:J" & Range("A65000").End(xlUp).Row).Sort Key1:=Range("A2"), Order1:=xlAscending, Header:=xlGuess
End With
Application.DisplayAlerts = False
Sheets("transit").Delete
Application.DisplayAlerts = True
End Sub

Regarde le fichier joint.
Attention à la structure de l'onglet "doublons", les en-têtes doivent être renseignés.
Bon courage
 

Pièces jointes

  • etu_doublons_v3.zip
    45.7 KB · Affichages: 77

Jx7

XLDnaute Nouveau
Re : Comparer deux listes

Bonjour à tous et merci pour votre aide,

Re,
pour quelles raisons veux-tu trier cette liste de doublons?
Pour pouvoir mieux faire la suppression?

oui dans un premier temps. mais là je t'avoue que je suis de + en + énervé par ces messages d'erreurs incompréhensibles... un truc si basique qui fonctionne pas ça à le don de bien m'enerver donc maintenant ma priorité c'est : comprendre...

merci bhbh :) je teste ça illico :)

par contre que veux tu dire par :
Attention à la structure de l'onglet "doublons", les en-têtes doivent être renseignés.

???
 

Discussions similaires

Statistiques des forums

Discussions
312 391
Messages
2 087 983
Membres
103 690
dernier inscrit
LeDuc