Recherche valeur non présente entre 2 feuilles

RENOUVEL Michel

XLDnaute Nouveau
Bonjour à tous,

Je voudrais comparer la colonne A et B des feuilles 1 et 2, si les valeurs des colonnes A et B sont différentes entre les deux feuilles alors copier les valeurs manquantes dans la feuille1 et trier la colonne par ordre croissant.


Feuil1
Colonne A Colonne B
LE BERRE Paul 10
HENRI Emile 11
FAUST Jean-Luc 12

Feuil2
Colonne A Colonne B
LE BERRE Paul 10
HENRI Emile 11
FAUST Jean-Luc 12
LE MEUR Sophie 14

Résultat souhaité en feuille 1
Colonne A Colonne B
LE BERRE Paul 10
HENRI Emile 11
FAUST Jean-Luc 12
LE MEUR Sophie 14

Merci d'avance :)
 

Pièces jointes

  • Gestion Salariés.xlsx
    8.9 KB · Affichages: 19

vgendron

XLDnaute Barbatruc
Hello..

peut etre avec ce code?
VB:
Sub complete()

With Sheets("Feuil1")
    Set ListeToComplete = .Range("A1:B" & .Range("A" & .Rows.Count).End(xlUp).Row)
    LastLine = ListeToComplete.Rows.Count
'    ListeToComplete.Select
End With
With Sheets("Feuil2")
   
    Set ListeSource = .Range("A1:B" & .Range("A" & .Rows.Count).End(xlUp).Row)
    'ListeSource.Select
End With
For Each ele In ListeSource
    Set c = ListeToComplete.Find(ele, lookat:=xlWhole)
    If c Is Nothing Then
        Range("A" & LastLine).Offset(1, 0) = ele
        Range("B" & LastLine).Offset(1, 0) = ele.Offset(0, 1)
        Set ListeToComplete = ListeToComplete.Resize(LastLine + 1, 2)
        LastLine = LastLine + 1
    End If
Next ele

End Sub
 

DoubleZero

XLDnaute Barbatruc
Bonjour à toutes et à tous,

Bienvenue sur XLD, RENOUVEL Michel.

Autre suggestion :
VB:
Option Explicit
Sub Comparer()
    Application.ScreenUpdating = False
    With Sheets("Feuil2"): .Columns("a:b").SpecialCells(2).Copy Sheets("Feuil1").Range("a" & Rows.Count).End(xlUp)(2): End With
    With Range("a:b"): .RemoveDuplicates Columns:=Array(1, 2), Header:=xlNo: .Sort Range("b1"), xlAscending, Header:=xlNo: End With
End Sub
J'ai l'impression que le code de vgendron est plus rapide ( ? ).

A bientôt :)
 

RENOUVEL Michel

XLDnaute Nouveau
Hello..

peut etre avec ce code?
VB:
Sub complete()

With Sheets("Feuil1")
    Set ListeToComplete = .Range("A1:B" & .Range("A" & .Rows.Count).End(xlUp).Row)
    LastLine = ListeToComplete.Rows.Count
'    ListeToComplete.Select
End With
With Sheets("Feuil2")
  
    Set ListeSource = .Range("A1:B" & .Range("A" & .Rows.Count).End(xlUp).Row)
    'ListeSource.Select
End With
For Each ele In ListeSource
    Set c = ListeToComplete.Find(ele, lookat:=xlWhole)
    If c Is Nothing Then
        Range("A" & LastLine).Offset(1, 0) = ele
        Range("B" & LastLine).Offset(1, 0) = ele.Offset(0, 1)
        Set ListeToComplete = ListeToComplete.Resize(LastLine + 1, 2)
        LastLine = LastLine + 1
    End If
Next ele

End Sub
Hello..

peut etre avec ce code?
VB:
Sub complete()

With Sheets("Feuil1")
    Set ListeToComplete = .Range("A1:B" & .Range("A" & .Rows.Count).End(xlUp).Row)
    LastLine = ListeToComplete.Rows.Count
'    ListeToComplete.Select
End With
With Sheets("Feuil2")
  
    Set ListeSource = .Range("A1:B" & .Range("A" & .Rows.Count).End(xlUp).Row)
    'ListeSource.Select
End With
For Each ele In ListeSource
    Set c = ListeToComplete.Find(ele, lookat:=xlWhole)
    If c Is Nothing Then
        Range("A" & LastLine).Offset(1, 0) = ele
        Range("B" & LastLine).Offset(1, 0) = ele.Offset(0, 1)
        Set ListeToComplete = ListeToComplete.Resize(LastLine + 1, 2)
        LastLine = LastLine + 1
    End If
Next ele

End Sub
 

RENOUVEL Michel

XLDnaute Nouveau
Parfait merci beaucoup cela fonctionne, par contre cela ne copie que le code du salarié et pas le nom.
il faut que je conserve le même colonage entre les deux feuilles :)
Pour Info cette feuille 1 doit servir de base pour une importation dans un logiciel de gestion d'heures

Merci encore
 

RENOUVEL Michel

XLDnaute Nouveau
Merci beaucoup de votre aide,
Je vous joins le fichier final (avec la liste complète des salariés)
Je ne comprends pas sur le fichier excel avec une petite liste cela fonctionne sur le fichier complet, il y a des doublons en feuil 1 ??
 

Pièces jointes

  • Essai.xlsm
    28.4 KB · Affichages: 54

vgendron

XLDnaute Barbatruc
Hello
avec ce code
VB:
Sub complete()

With Sheets("Feuil1")
    Set ListeToComplete = .Range("A1:B" & .Range("A" & .Rows.Count).End(xlUp).Row)
    LastLine = ListeToComplete.Rows.Count
'    ListeToComplete.Select
End With
With Sheets("Feuil2")
  
    Set ListeSource = .Range("A1:B" & .Range("A" & .Rows.Count).End(xlUp).Row)
    'ListeSource.Select
End With
For Each ele In ListeSource.Columns(1).Cells
    Set c = ListeToComplete.Find(ele, lookat:=xlWhole)
    If c Is Nothing Then
        Range("A" & LastLine).Offset(1, 0) = ele
        Range("B" & LastLine).Offset(1, 0) = ele.Offset(0, 1)
        Set ListeToComplete = ListeToComplete.Resize(LastLine + 1, 2)
        LastLine = LastLine + 1
    End If
Next ele

'tri sur colonne A

ActiveWorkbook.Worksheets("Feuil1").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Feuil1").Sort.SortFields.Add Key:=ListeToComplete.Columns(1).Cells _
        , SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("Feuil1").Sort
    .SetRange ListeToComplete
    .Header = xlGuess
    .MatchCase = False
    .Orientation = xlTopToBottom
    .SortMethod = xlPinYin
    .Apply
End With
  

End Sub

1) ca ne parcourt QUE la colonne 1 de la feuille 2
2) le tri est effectué

pour le 1: dans le code d'avant, je parcourais les deux colonnes... donc. je cherchais l'absence du nom
donc je copiais NOM ET numéro
ENSUITE, je cherchais l'absence du numéro.. totallement inutile.. et chronophage.
 

Discussions similaires

Membres actuellement en ligne

Statistiques des forums

Discussions
312 177
Messages
2 085 972
Membres
103 073
dernier inscrit
MSCHOE16