Comparer Deux Tableaux Et Afficher La Différence

Navigation

Inscrivez-vous gratuitementpour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

  • Vous n'êtes pas encore inscrit sur Developpez.com ? Inscrivez-vous gratuitement !
  • Recherche avancée
  • Accueil
  • Forum
  • Logiciels
  • Microsoft Office
  • Excel
  • Macros et VBA Excel
  • Comparer deux tableaux et afficher la différence
+ Répondre à la discussion Macros et VBA Excel Discussion : Comparer deux tableaux et afficher la différence Sujet :

Macros et VBA Excel

  • Outils de la discussion
    • Afficher une version imprimable
    • S'abonner à cette discussion…
  • Affichage
    • Mode linéaire
    • Choisir le mode hybride
    • Choisir le mode arborescent
  1. 12/05/2015, 11h46 #1 salemhacen salemhacen est déconnecté Membre averti Homme Profil pro Ingénieur qualité méthodesInscrit enMai 2015Messages29Détails du profilInformations personnelles :Sexe : HommeÂge : 38Localisation : France, Essonne (Île de France)Informations professionnelles :Activité : Ingénieur qualité méthodesSecteur : IndustrieInformations forums :Inscription : Mai 2015Messages : 29 Par défaut Comparer deux tableaux et afficher la différence
    Bonjour, Voilà j'ai un fichier Excel dans lequel j'ai une première feuille qui me donne l'historiques de formations d'un effectif constitué de plusieurs personnes, la deuxième feuille se trouve tout l'effectif de l'entreprise, mon objectif est de comparer la feuille "historiques de formation" avec la feuille "effectif" pour afficher dans une troisième feuille les personnes qui n'ont pas fait la formation et qu'il faudra par la suite inscrire. Entre les deux feuilles seulement les trois premières colonnes sont identiques (Nom, prénom et matricule) le reste des colonnes sont différentes et ne m'intéresse pas je veux uniquement les noms des personnes qui n'ont fait la formation. Voici mon code que j'essaye d'adapter sur mon exemple, il permet de mettre les deux feuilles en tableau et ensuite de concaténer les colonnes pour comparer exactement les identités etc et là le code identifie dans un premier temps les entrées identiques. Ensuite il supprime les concaténations et il refais une concaténation des deux colonnes A et B et là les re-compare si les noms présent dans la feuille 1 sont aussi dans le feuille 2 et excluant naturellement les articles déjà commun. et ensuite il traite les deux tableaux pour récupérer tout ce qui n'est pas commun. Mon problème le code me copie les données de la feuille 1 sur la feuille 3.si vous avez une autre solution à mon problème ou bien comment modifier ce code, par avance merci. voici le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071Option Explicit Option Base 1 Sub traiter() Dim i&, fin&, fin1&, fin3, a&, aa As Variant, bb As Variant, cc As Variant fin = Feuil1.Range("A" & Rows.Count).End(xlUp).Row fin1 = Feuil2.Range("A" & Rows.Count).End(xlUp).Row aa = Sheets("Feuil1").Range("A2:J" & fin) bb = Sheets("Feuil2").Range("A2:J" & fin) fin3 = Feuil3.Range("A" & Rows.Count).End(xlUp).Row If fin3 < 2 Then fin3 = 2 Feuil3.Range("A2:J30000" & fin3).Clear For i = 1 To UBound(aa) For a = 1 To 6 aa(i, 7) = aa(i, 7) & "#" & aa(i, a) Next a Next i For i = 1 To UBound(bb) For a = 1 To 6 bb(i, 7) = bb(i, 7) & "#" & bb(i, a) Next a Next i For i = 1 To UBound(aa) For a = 1 To UBound(bb) If aa(i, 7) = bb(a, 7) Then aa(i, 8) = "Idem": bb(a, 8) = "Idem" Next a Next i For i = 1 To UBound(aa) aa(i, 7) = "" For a = 1 To 2 aa(i, 7) = aa(i, 7) & "#" & aa(i, a) Next a Next i For i = 1 To UBound(bb) bb(i, 7) = "" For a = 1 To 2 bb(i, 7) = bb(i, 7) & "#" & bb(i, a) Next a Next i For i = 1 To UBound(aa) For a = 1 To UBound(bb) If aa(i, 7) = bb(a, 7) And bb(a, 8) = "" Then bb(a, 8) = "Changé": GoTo 1 If aa(i, 7) = bb(a, 7) And bb(a, 8) = "idem" Then GoTo 1 Next a If aa(i, 8) = "" Then aa(i, 8) = "Parti" If bb(i, 8) = "" Then bb(i, 8) = "Nouveau" 1 Next i For i = 1 To UBound(aa) If aa(i, 8) = "Idem" Or aa(i, 8) = "" Then GoTo 2 Else: fin = Feuil3.Range("A" & Rows.Count).End(xlUp).Row + 1 For a = 1 To 6 Feuil3.Cells(fin, a) = aa(i, a) Next a Feuil3.Cells(fin, 7) = aa(i, 8) End If 2 Next i For i = 1 To UBound(bb) If bb(i, 8) = "Idem" Then GoTo 3 Else: fin = Feuil3.Range("A" & Rows.Count).End(xlUp).Row + 1 For a = 1 To 6 Feuil3.Cells(fin, a) = bb(i, a) Next a Feuil3.Cells(fin, 7) = bb(i, 8) End If 3 Next i End Sub
    Répondre avec citation Répondre avec citation 0 0
  2. 12/05/2015, 13h28 #2 Daniel.C Daniel.C est déconnecté Expert confirmé Homme Profil pro aucuneInscrit enSeptembre 2011Messages8 208Détails du profilInformations personnelles :Sexe : HommeLocalisation : France, Paris (Île de France)Informations professionnelles :Activité : aucuneInformations forums :Inscription : Septembre 2011Messages : 8 208 Par défaut
    Bonjour, Ton code manque singulièrement de commentaires. Dis seulement : - en quelle colonne se trouve la formation - comment identifier la formation cherchée.
    Répondre avec citation Répondre avec citation 0 0
  3. 12/05/2015, 14h03 #3 salemhacen salemhacen est déconnecté Membre averti Homme Profil pro Ingénieur qualité méthodesInscrit enMai 2015Messages29Détails du profilInformations personnelles :Sexe : HommeÂge : 38Localisation : France, Essonne (Île de France)Informations professionnelles :Activité : Ingénieur qualité méthodesSecteur : IndustrieInformations forums :Inscription : Mai 2015Messages : 29 Par défaut
    Bonjour Daniel.C, J'ai oublié de préciser qu'une personne qui n'a pas effectué de formation ne va pas se trouver dans ma feuille historiques de formations, donc l'objectif st de se rendre compte de ses personnes en les comparant avec la feuille de tout l'effectif. Un exemple, dans ma feuille de formations j'ai 200 personnes alors que dans la feuille effectif j'en ai 250 donc je souhaite sur la feuille 3 afficher les 50 personnes qui n'ont pas fait de formations, j'ai besoin juste du nom, prénom et matricule. Merci
    Répondre avec citation Répondre avec citation 0 0
  4. 12/05/2015, 14h13 #4 antonysansh antonysansh est déconnecté Membre Expert Avatar de antonysansh Homme Profil pro Chargé d'études RHInscrit enMai 2014Messages1 115Détails du profilInformations personnelles :Sexe : HommeÂge : 34Localisation : France, Nord (Nord Pas de Calais)Informations professionnelles :Activité : Chargé d'études RHSecteur : FinanceInformations forums :Inscription : Mai 2014Messages : 1 115 Par défaut
    Bonjour à vous deux, J'ai dans le cadre de mon travail souvent à effectuer ce genre de calcul. J'utilise une simple recherchev sur les matricules de mon effectif dans la base de mes participants. S'il y a erreur c'est qui ne sont pas présent (avec un sierreur tu peux mettre un libelle plus parlant) et ensuite je filtre sur mes absent (mes erreurs) Exemple : Mes matricules sont en colonne A dans les deux tableaux. =SIERREUR(RECHERCHEV(Effectif!A1;Participants!$A$1:$A$200;1;FAUX);"Pas formé")et j'étends sur toutes les lignes de mon effectif.
    Répondre avec citation Répondre avec citation 0 0
  5. 12/05/2015, 14h24 #5 salemhacen salemhacen est déconnecté Membre averti Homme Profil pro Ingénieur qualité méthodesInscrit enMai 2015Messages29Détails du profilInformations personnelles :Sexe : HommeÂge : 38Localisation : France, Essonne (Île de France)Informations professionnelles :Activité : Ingénieur qualité méthodesSecteur : IndustrieInformations forums :Inscription : Mai 2015Messages : 29 Par défaut
    Bonjour antonysansh, c'est vrai ça peut marcher aussi avec une recherche V, mais je souhaite automatiser ça avec des macros, je clique sur un bouton et directement il m'affiche les personnes qui n'ont jamais fait de formations.
    Répondre avec citation Répondre avec citation 0 0
  6. 12/05/2015, 15h00 #6 joe.levrai joe.levrai est déconnecté Expert confirmé Homme Profil pro CurieuxInscrit enJuillet 2012Messages5 169Détails du profilInformations personnelles :Sexe : HommeLocalisation : France, Paris (Île de France)Informations professionnelles :Activité : CurieuxSecteur : Arts - CultureInformations forums :Inscription : Juillet 2012Messages : 5 169Billets dans le blog5 Par défaut
    Bonjour, un exemple simple pour comprendre il faut maintenant modifier le nom des feuilles,mettre les bonnes colonnes (j'ai tout fait sur les colonnes A) et éventuellement mettre en place un nettoyage de la feuille qui reçoit les données j'ai volontairement pas optimisé le code à 100% (on peut encore réduire le nombre de lignes) afin que ça soit assez simple pour toi de le comprendre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1234567891011121314151617181920212223242526272829303132333435363738394041424344Sub Formation() Dim TabloForm Dim TabloEff Dim i As Integer Dim j As Integer Dim Lig As Long Dim Trouve As Boolean ' la plage des agents formés With Sheets("Feuil1") TabloForm = .Range(.Cells(2, 1), .Cells(.UsedRange.Rows.Count, 1)) End With ' la plage des effectifs With Sheets("Feuil2") TabloEff = .Range(.Cells(2, 1), .Cells(.UsedRange.Rows.Count, 1)) End With Lig = 2 ' boucle sur les effectifs For i = LBound(TabloEff) To UBound(TabloEff) Trouve = False ' boucle sur les formés For j = LBound(TabloForm) To UBound(TabloForm) ' si l'agent en "effectif" et aussi en "formé" If TabloEff(i, 1) = TabloForm(j, 1) Then ' on passe à l'agent suivant Trouve = True Exit For End If Next j ' si on a pas trouvé l'agent dans les effectifs formés If Trouve = False Then With Sheets("Feuil3") ' on le liste en feuille 3 .Cells(Lig, 1) = TabloEff(i, 1) End With Lig = Lig + 1 End If Next i End Sub
    Répondre avec citation Répondre avec citation 0 0
  7. 12/05/2015, 15h21 #7 goldstar goldstar est déconnecté Membre expérimenté Homme Profil pro Inscrit enOctobre 2012Messages199Détails du profilInformations personnelles :Sexe : HommeLocalisation : FranceInformations forums :Inscription : Octobre 2012Messages : 199 Par défaut
    Bonjour, Le code ci-dessous à tester
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    12345678910111213141516171819202122232425 Sub PAS_DE_FORMATION() Dim w1 As Worksheet, w2 As Worksheet, w3 As Worksheet Dim I As Long Windows("Classeur1.xls").Activate 'Nom du classeur Set w1 = Sheets("effectif") 'Feuille qui contient les effectifs Set w2 = Sheets("historiques de formation") 'Feuille qui contient l'historique des formations Set w3 = Sheets("traitement") 'Feuille qui doit faire apparaitre les personnes qui n'ont pas de formation 'Suppression des données dans la feuille traitement w3.Cells.ClearContents For I = 2 To w1.Range("c65536").End(xlUp).Row ' faire toute la colonne C If Application.WorksheetFunction.CountIf(w2.Range("c:c"), w1.Range("c" & I)) = 0 Then 'comparer si w2 et different de W1 w1.Range("a" & I & ":c" & I).Copy Destination:=w3.Range("a65536").End(xlUp).Offset(1, 0) 'copier nouvelle entité de la w1 Different en w2 sur w3 End If Next MsgBox "TERMINE" End Sub
    Cordialement,
    Répondre avec citation Répondre avec citation 0 0
  8. 12/05/2015, 15h29 #8 salemhacen salemhacen est déconnecté Membre averti Homme Profil pro Ingénieur qualité méthodesInscrit enMai 2015Messages29Détails du profilInformations personnelles :Sexe : HommeÂge : 38Localisation : France, Essonne (Île de France)Informations professionnelles :Activité : Ingénieur qualité méthodesSecteur : IndustrieInformations forums :Inscription : Mai 2015Messages : 29 Par défaut
    Bonjour joe.levrai, Je vous remercie énormément ça marche comme je veux en plus le code est bien détaillé facile à comprendre, j'ai rajouté cette ligne de code pour nettoyer la feuille sur laquelle j'affiche les personnes non formés :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sheets("Feuil3").Range("A1:K60000").ClearContents Est ce que je pourrais vous demander encore une petite chose: J'obtient seulement les noms des personnes non formées parce que ça correspond à la colonne A, j'aimerais bien avoir aussi le prénom (colonne B) et le matricule (colonne C). Qu'est ce que je dois modifier sur votre code. Par avance merci.
    Répondre avec citation Répondre avec citation 0 0
  9. 12/05/2015, 15h38 #9 goldstar goldstar est déconnecté Membre expérimenté Homme Profil pro Inscrit enOctobre 2012Messages199Détails du profilInformations personnelles :Sexe : HommeLocalisation : FranceInformations forums :Inscription : Octobre 2012Messages : 199 Par défaut
    Le code proposé par joe.levrai est trés bien mais avez vous testé mon code ? Cordialement,
    Répondre avec citation Répondre avec citation 0 0
  10. 12/05/2015, 15h50 #10 salemhacen salemhacen est déconnecté Membre averti Homme Profil pro Ingénieur qualité méthodesInscrit enMai 2015Messages29Détails du profilInformations personnelles :Sexe : HommeÂge : 38Localisation : France, Essonne (Île de France)Informations professionnelles :Activité : Ingénieur qualité méthodesSecteur : IndustrieInformations forums :Inscription : Mai 2015Messages : 29 Par défaut
    bonjour goldstar Je viens de le tester c'est parfait, ça marche comme je le veux, j'ai bien nom, prénom et matricule des personnes qui n'ont pas fait la formation qui s'affichent. Bravo un code simple et efficace.
    Répondre avec citation Répondre avec citation 0 0
+ Répondre à la discussion Cette discussion est résolue.
ActualitésFAQs OFFICETUTORIELS OFFICELIVRES OFFICESOURCES VBAOFFICE 2010
  • Accueil
  • Forum
  • Logiciels
  • Microsoft Office
  • Excel
  • Macros et VBA Excel
  • Comparer deux tableaux et afficher la différence
« Discussion précédente | Discussion suivante »

Discussions similaires

  1. [XL-2010] comparer deux tableaux : afficher valeurs manquantes Par Ardiden31 dans le forum Macros et VBA Excel Réponses: 5 Dernier message: 02/04/2015, 14h52
  2. [Tableaux] Comparer deux tableaux Par popy67 dans le forum Langage Réponses: 2 Dernier message: 05/05/2008, 08h22
  3. Comparer deux tableaux Par gefrey54 dans le forum Powerbuilder Réponses: 0 Dernier message: 12/09/2007, 11h58
  4. comparer deux tableaux Par djibril dans le forum Langage Réponses: 4 Dernier message: 15/11/2005, 16h26

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

Tag » Code Vba Comparaison Deux Feuilles Excel