Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

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
260
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…