comparer 2 série de 2 colonnes

* jon62700
Anonyme
Envoyé le 09/08/2011 à 00:11

Bonjour à tous,

Voilà mon problème.
Je dois créer un fichier excel pour un inventaire. D'un côté j'ai un fichier "fichier1", me donnant une liste d'article avec leur quantité dans un lieu donné
De l'autre côté, un fichier "fichier2", me donnant une autre liste d'article, avec 90 % des mêmes articles dans le même lieu mais fait par une autre personne.

Mon but est de comparer si les deux personnes me donnent la même quantité dispo pour chaque article connu dans les deux lieux.

Ex :
fichier 1
code article quantité
X6114 22

fichier 2
code article quantité
X6114 23

Donc je voudrait,
- que excel compare les articles présents communs aux deux fichiers
- me dit si quantité identique ou pas

Je ne sais pas si j'ai réussi a être clair mais si vous avez des questions n'hesitez pas ou que je vous envoi le fichier

Merci d'avance pour votre aide


Claude40 Claude40
1 533 contributions
Membre depuis le 24/03/2010
Envoyé le 09/08/2011 à 04:19 Modifié par Claude40


Bonjour,
Voici une petite macro qui devrait résoudre le problème. Le jeu d'essai porte sur 14 lignes pour la première liste dite de référence et de 11 lignes sur la liste à comparer. Le résultat de la comparaison est écrit sur la même feuille Excel en colonne F.
Il n'est pas nécessaire que les listes soient triées sur le numéro d'article.
Macro :
Sub comparaison()
' Dans cette application la liste de référence (100 %) est en colonnes A et B tandis que la liste à comparer est en colonnes D et E
'Dans cette application également il est prévu 500 lignes d'articles de la ligne 1 à la ligne 500.
'Sont signalés en anomalie : Les différences de quantités et l'absence d'article dans la liste de référence.
'Les anomalies sont écrites sur la colonne F (6).
Range("F1:F500").Clear ' remise à blanc des messages d'anomalies.


For ColIndex = 4 To 4
For RwIndex = 1 To 500 '
critere = Cells(RwIndex, ColIndex)
With Cells.Range("a1:a500")
Set C = .Find(critere, LookIn:=xlValues)
If Not C Is Nothing Then

Mycol = 2
Myrow = C.Address
Mid(Myrow, 1, 3) = "000"

If Not Cells(Myrow, Mycol) = Cells(RwIndex, ColIndex + 1) Then
Cells(RwIndex, 6) = "Différence de quantité : " & "Qté colonne E = " & Cells(RwIndex, ColIndex + 1) & " Qté colonne B = " & Cells(Myrow, Mycol)
End If
Else

Cells(RwIndex, 6) = "Cet article n'est pas dans la colonne 1 : "
End If


End With
Next RwIndex
Next ColIndex


End Sub
Image du jeu d'essai :


Un bon exposé du problème, c'est déjà un grand pas vers la solution. Dans la mesure du possible, mes solutions sont testées, sur mon système actuel (W10 Pro version 1909), mais peuvent ne pas fonctionner sur tous les Pc
* jon62700
Anonyme
Envoyé le 10/08/2011 à 15:47

Bonjour,

Votre travail correspond exactement à ce que je cherchait à faire mais, cependant je voudrais savoir si on ne peux pas aller plus loin ?

Je m'explique

Est ce que l'on peut, continuer à executer cette même macro, mais par

feuille1 : données de réference
feuille2 : données à comparer
feuille 3 : bouton d'action de la macro + bouton remise à zéro de la feuille 3
et la feuille3 contiendrait :
- code article -- commentaire

pour résumer, faire le même travail que l'on fait dans la première macro, mais sur des feuilles différentes

N'hésitez pas à me demander des infos si nécessaire

Vous remerciant par avance ppour votre suepr boulot, je cherche à bien comprendre également votre travail, je ne veux pas faire du recopiage tout bête, j'apprend le fonctionnement par la même occasion.

Claude40 Claude40
1 533 contributions
Membre depuis le 24/03/2010
Envoyé le 10/08/2011 à 18:23


Bonsoir,
C'est tout à fait possible, mais en ce moment, je n'ai pas trop le temps. Si cela peut attendre ce week-end, je peux m'en occuper. Avant, je souhaite une info complémentaire : les commentaires à écrire feuille3 sont-ils les résultats de la comparaison ? Y a t-il autre chose à faire figurer que les différences de quantités ou les absences dans la feuille de référence. Doit-on signaler les articles présents dans la feuille de référence et absents de la feuille 2 ? Ainsi, ce serait complet !
Un bon exposé du problème, c'est déjà un grand pas vers la solution. Dans la mesure du possible, mes solutions sont testées, sur mon système actuel (W10 Pro version 1909), mais peuvent ne pas fonctionner sur tous les Pc
* jon62700
Anonyme
Envoyé le 11/08/2011 à 08:18

Bonjour,

Oui no problemes pour ce week end, rien ne presse

Ta réponse me parait interessante oui, je pense que oui, il vaut mieux partir sur un fichier le plus complet possible.

Bon je pense qu'il y a un tas d'autres rajouts que l'on pourrait faire, je pense par exemple :

- parfois un numéro de lot n'apparait pas sous la même forme entre la feuille 1 et la feuille 2

ex : feuille 1 T624569
feuille 2 624569

Mais à chaque fois, c'est la première ou la seconde lettre qui change, ou supprimée

Mais je vais essayer d'améliorer tout ça

Merci beaucoup de ton aide en tout cas, très bon boulot

Claude40 Claude40
1 533 contributions
Membre depuis le 24/03/2010
Envoyé le 13/08/2011 à 10:42


Bonjour,
La macro est adaptée pour gérer trois feuilles et le contrôle d’un numéro de lot que j’ai inséré sur la feuille référence et la feuille à contrôler entre le code article et la quantité.
On peut envisager des variantes à cette solution, notamment réserver sur la feuille 3 une colonne pour les anomalies sur N° de lot et une colonne pour les anomalies sur la quantité, au lieu, comme dans la solution actuelle, d’utiliser la même colonne, sauf si le contrôle décèle les deux anomalies sur le même article.
Autre suggestion : pourquoi ne pas envisager d’imprimer des feuilles d’inventaire à partir du fichier de référence de façon à limiter les anomalies sur code article ou numéro de lot ?
Voici la nouvelle macro :

Sub comparaison()
Worksheets("Feuil3").Range("A1:C500").Clear
LastrwIndex = 0
' Dans cette application la liste de référence (100 %) est sur la feuille 1 tandis que la liste à comparer est sur a feuille 2
'Dans cette application également il est prévu 500 lignes d'articles de la ligne 1 à la ligne 500.
'Sont signalés en anomalie : Les différences de quantités, les différences sur le numéro de lot et l'absence d'article dans la liste de référence.
'Les anomalies sont écrites sur la feuille 3
'On vérifie en fin de travail, les articles non renseignés sur la feuille 2. Message d'alerte également sur la feuille 3.


'Compte le nombre de lignes renseignées sur la feuille 2
For colIndex = 1 To 1
For rwIndex = 1 To 500

If Not Worksheets("Feuil2").Cells(rwIndex, 1) = "" Then
LastrwIndex = LastrwIndex + 1

End If

Next rwIndex
Next colIndex

'Contrôle des numéros de lots et des quantités
For colIndex = 1 To 1
For rwIndex = 1 To 500 '
critere = Worksheets("Feuil2").Cells(rwIndex, colIndex)
Myind = 0 'indicateur servant à signaler qu'une différence de n° de lot a été décelée, afin d'écrire un éventel message pour la quantité en colonne 3 au lieu de 2.
If critere = "" Then

End If

With Worksheets("Feuil1").Cells.Range("a1:a500") 'remettre 500 quand mise au point terminée
Set C = .Find(critere, LookIn:=xlValues)
If Not C Is Nothing Then

mycol = 2
Myrow = C.Address

Mid(Myrow, 1, 3) = "000"
Worksheets("Feuil3").Cells(rwIndex, 1) = Worksheets("Feuil2").Cells(rwIndex, 1)
'Détection différence numéro de lot

If Not Worksheets("Feuil1").Cells(Myrow, mycol) = Worksheets("Feuil2").Cells(rwIndex, colIndex + 1) Then

Worksheets("Feuil3").Cells(rwIndex, 2) = "Différence de numéro de lot : " & "N° lot feuille 2 = " & Worksheets("Feuil2").Cells(rwIndex, colIndex + 1) & " N° lot feuille de référence = " & Worksheets("Feuil1").Cells(Myrow, mycol)
Myind = 1

End If
mycol = 3
'Détection différence quantité
If Not Worksheets("Feuil1").Cells(Myrow, mycol) = Worksheets("Feuil2").Cells(rwIndex, colIndex + 2) Then
If Myind = 0 Then
Worksheets("Feuil3").Cells(rwIndex, 2) = "Différence de quantité : " & "Qté feuille 2 = " & Worksheets("Feuil2").Cells(rwIndex, colIndex + 2) & " Qté feuille de référence " & Worksheets("Feuil1").Cells(Myrow, mycol)
Else
Worksheets("Feuil3").Cells(rwIndex, 3) = "Différence de quantité : " & "Qté feuille 2 = " & Worksheets("Feuil2").Cells(rwIndex, colIndex + 2) & " Qté feuille de référence " & Worksheets("Feuil1").Cells(Myrow, mycol)
End If
End If
Else
Worksheets("Feuil3").Cells(rwIndex, 1) = Worksheets("Feuil2").Cells(rwIndex, 1)
Worksheets("Feuil3").Cells(rwIndex, 2) = "Cet article n'est pas dans la feuille de référence "
End If


End With

Next rwIndex
Next colIndex

' Recherche des articles non renseignés sur la feuille 2

Myrow = 0
Worksheets("Feuil3").Cells(LastrwIndex + 2, 1) = "Liste des articles non renseignés sur la feuille 2"
For colIndex = 1 To 1
For rwIndex = 1 To 500 '
critere = Worksheets("Feuil1").Cells(rwIndex, colIndex)

With Worksheets("Feuil2").Cells.Range("a1:a500") 'remettre 500 quand mise au point terminée
Set C = .Find(critere, LookIn:=xlValues)
If C Is Nothing Then
Myrow = Myrow + 1
Worksheets("Feuil3").Cells(Myrow + LastrwIndex + 2, 1) = Worksheets("Feuil1").Cells(rwIndex, 1)
Worksheets("Feuil3").Cells(Myrow + LastrwIndex + 2, 2) = Worksheets("Feuil1").Cells(rwIndex, 2) & " " & Worksheets("Feuil1").Cells(rwIndex, 3)

Else
End If


End With

Next rwIndex
Next colIndex
Worksheets("Feuil3").Range("B1:C1000").Columns.AutoFit


End Sub


Et voici les images écrans des 3 feuiles du jeu d'essai
Feuille 1



Feuille 2


Feuille 3


J'espère que la feuille 3 reste lisible, car j'ai été obligé de la réduire pour l'insérer dans ce post.
Un bon exposé du problème, c'est déjà un grand pas vers la solution. Dans la mesure du possible, mes solutions sont testées, sur mon système actuel (W10 Pro version 1909), mais peuvent ne pas fonctionner sur tous les Pc

Discussion trop ancienne

Cette discussion a été automatiquement fermée car elle n'a plus reçue de nouveau message depuis trop longtemps.

Nous vous suggérons de créer un nouveau message

« Retour sur la liste des messages de ce forum