XL 2010 macro pour trouver articles manquant entre deux listes

pepsi

XLDnaute Occasionnel
bonjour,

Je cherche à comparer deux listes, colonne A et B. Par macro, j'aimerais afficher dans la colonne C les articles qui manquent dans la colonne B.

Je joins un fichier d'exemple

Merci pour votre aide !
 

Pièces jointes

  • Classeur.xlsx
    10.5 KB · Affichages: 42

thebenoit59

XLDnaute Accro
Bonjour Pepsi.

Voici un code fonctionnant comme demandé.

VB:
Sub Manq()
Dim d As Object
Dim i&
Dim sh As Worksheet

Set sh = ThisWorkbook.Sheets(1)
Set d = CreateObject("scripting.dictionary")

With sh
    For i = 2 To .Range("A" & .Cells.Rows.Count).End(xlUp).Row
        d(.Cells(i, "B").Value) = ""
    Next i
    For i = 2 To .Range("A" & .Cells.Rows.Count).End(xlUp).Row
        If Not d.exists(.Cells(i, "A").Value) Then .Cells(.Range("C" & .Cells.Rows.Count).End(xlUp).Row + 1, "C").Value = .Cells(i, "A").Value
    Next i
End With
End Sub
 

pepsi

XLDnaute Occasionnel
super merci pour ton aide

Comment modifier le code pour que lorsque l'on relance la macro, le test recommence à 0

et si je change de place la liste de la colonne A et que je la mets sur la feuille 2 comment modifier le code?

merci
 

Pièces jointes

  • Classeur.xlsx
    10.5 KB · Affichages: 35

pepsi

XLDnaute Occasionnel
j'essaye de modifier, sans succès..... :(

Code:
Sub Manq()
Dim d As Object
Dim i&
Dim sh As Worksheet

Set sh = ThisWorkbook.Sheets(1)
Set d = CreateObject("scripting.dictionary")

With sh
    For i = 2 To .Range("B1:B50" & .Cells.Rows.Count).End(xlUp).Row
    Sheets("Feuil2").Select
        d(.Cells(i, "A1:A50").Value) = ""
    Next i
    For i = 2 To .Range("A" & .Cells.Rows.Count).End(xlUp).Row
        If Not d.exists(.Cells(i, "A").Value) Then .Cells(.Range("C" & .Cells.Rows.Count).End(xlUp).Row + 1, "C").Value = .Cells(i, "A").Value
    Next i
End With
End Sub
 

Pièces jointes

  • Classeur.xlsx
    10.5 KB · Affichages: 27

thebenoit59

XLDnaute Accro
Le fichier que tu envoies est incorrect, un .xlsx ne contient pas de macros.

Pour changer de feuilles, tu modifies :
VB:
Set sh = ThisWorkbook.Sheets(1)
Avec le numéro souhaité.

Pour recommencer le test à zéro, il faut supprimer les valeurs de la colonne C :
VB:
.Range("C1:C" & .Range("C" & .Cells.Rows.Count).End(xlUp).Row).Offset(1).Clear

Le .Offset(1) décale d'une ligne, en effet si tu n'as pas encore de valeur, ton en-tête sera supprimé.

Le code total :
VB:
Sub Manq()
Dim d As Object
Dim i&
Dim sh As Worksheet

Set sh = ThisWorkbook.Sheets(2)
Set d = CreateObject("scripting.dictionary")

With sh
    .Range("C1:C" & .Range("C" & .Cells.Rows.Count).End(xlUp).Row).Offset(1).Clear
    For i = 2 To .Range("A" & .Cells.Rows.Count).End(xlUp).Row
        d(.Cells(i, "B").Value) = ""
    Next i
    For i = 2 To .Range("A" & .Cells.Rows.Count).End(xlUp).Row
        If Not d.exists(.Cells(i, "A").Value) Then .Cells(.Range("C" & .Cells.Rows.Count).End(xlUp).Row + 1, "C").Value = .Cells(i, "A").Value
    Next i
End With
End Sub
 

pepsi

XLDnaute Occasionnel
j'ai essayé d'adapter un nouveau code, pour pouvoir inter agir entre 2 onglets de ma feuille de calcul...

je cherche toujours à extraire les articles de la liste 1 (Feuil1) ne figurant pas dans la liste 2 (Feuil2).

malheureusement, le code ne marche pas correctement, je veux qu'il écrive le résultat en J10 de Feuil 2 mais il écrit en J2... pourquoi ?



merci pour votre aide...




VB:
Sub essai()
Dim colonne1 As Range, colonne2 As Range, cellule As Range, trouve As Range, suite As Range

'Compare la colonne A des feuilles 1 et 2
Set colonne1 = Sheets("feuil1").Range(("A20"), Sheets("feuil1").Range("A20").End(xlDown))
Set colonne2 = Sheets("feuil2").Range(("B10"), Sheets("feuil2").Range("B10").End(xlDown))

'Efface la plage de réception
Sheets("feuil2").Range("j1:j1000").ClearContents

'Retranscrit les données différente de la feuille1 sur la feuille2
For Each cellule In colonne1
Set suite = Sheets("feuil2").[J10].End(xlUp).Offset(1, 0)
Set trouve = colonne2.Find(cellule.Value, LookIn:=xlValues, lookat:=xlWhole)
If trouve Is Nothing Then suite.Value = cellule.Value
Next
End Sub
 

Pièces jointes

  • Classeur2.xlsm
    17.7 KB · Affichages: 36

Discussions similaires

Réponses
3
Affichages
320

Statistiques des forums

Discussions
312 931
Messages
2 093 721
Membres
105 796
dernier inscrit
Max...26