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

  • Initiateur de la discussion Initiateur de la discussion pepsi
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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

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
 
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

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

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
 
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

- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
40
Affichages
1 K
Réponses
12
Affichages
214
Réponses
8
Affichages
471
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…