comparaison de deux feuilles + extraction ligne

Luc62300

XLDnaute Nouveau
Bonjour a tous !
Malgré mes recherches, je n'ai pu trouver de solution sur tout les post concernant les comparaison de feuilles de calculs je m'explique :
Dans le cadre de l'amélioration de ma gestion de stock, je me suis équipé d'un lecteur de code barre.
Avec ce dernier, je peut scanner les codes barres de ma marchandises , le numéro de série s'inscris dans une cellule Excel . ( voir feuille 1 )
Ce que j'aimerais pouvoir faire, c'est , a partir de cette liste de numéros de série, comparer cette feuille avec une autre , qui me viens du fournisseur ( feuille 2 ) , et que sur une troisième feuille, les numéros de séries correspondant ressortent, mais avec l'intégralité de la ligne.
Je ne suis pas très clair dans mes explication , ma PJ vous en dira surement plus.
je vous remercie d'avance pour votre aide !
:)
 

Pièces jointes

  • Classeur1.xlsx
    10.7 KB · Affichages: 55
  • Classeur1.xlsx
    10.7 KB · Affichages: 56
  • Classeur1.xlsx
    10.7 KB · Affichages: 53

Modeste

XLDnaute Barbatruc
Re : comparaison de deux feuilles + extraction ligne

Bonjour Luc62300 et bienvenue à toi,

Dans un premier temps, essayons de faire simple (tu ne précises pas l'étendue de tes connaissances en Excel)
Dans ta Feuil3, en colonne A, une première formule qui permet de recopier les matricules présents en colonne A de la Feuil1 (la formule n'affiche plus rien, si elle est présente dans plus de lignes qu'il n'y a de matricules en Feuil1.
En B2 de ta Feuil3, une autre formule qui permet de récupérer la valeur située en ligne x et colonne y d'un tableau (celui de ta Feuil2)
Tu constateras qu'un message d'erreur apparaît dans toutes les cellules où aucun matricule ne figure en Feuil3 et pour les matricules pour lesquels il n'y a pas de correspondance, entre Feuil3 et Feuil2.

Dis-nous déjà si cette base correspond à tes attentes, nous verrons ensuite comment utiliser ou masquer ces messages d'erreur.

[Edit] Salut Robert, c'est un plaisir plus grand encore de te retrouver :)
 

Pièces jointes

  • Luc62300.xlsx
    11.4 KB · Affichages: 45
Dernière édition:

Robert

XLDnaute Barbatruc
Repose en paix
Re : comparaison de deux feuilles + extraction ligne

Bonjour Luc et bienvenu, Modeste, bonjour le forum,

Une proposition VBA pour compléter celle de Modeste que je salue au passage. C'est un grand plaisir de le lire...
le code :
Code:
Sub Macro1()
Dim O1 As Object 'déclare la variable O1 (Onglet 1)
Dim O2 As Object 'déclare la variable O2 (Onglet 2)
Dim OD As Object 'déclare la variable OD (Onglet de Destination)
Dim DL1 As Integer 'déclare la variable DL1 (Dernière Ligne de l'onglet 1)
Dim DL2 As Integer 'déclare la variable DL2 (Dernière Ligne de l'onglet 2)
Dim PL1 As Range 'déclare la variable PL1 (PLage de l'onglet 1)
Dim PL2 As Range 'déclare la variable PL2 (PLage de l'onglet 2)
Dim CEL As Range 'déclare la variable CEL (CEL_lule)
Dim R As Range 'déclare la variable R (R_echerche)
Dim Dest As Range 'déclare la variable Dest (cellule de Dest_ination)


Set O1 = Sheets("Feuil1") 'définit l'onglet O1
Set O2 = Sheets("Feuil2") 'définit l'onglet O2
Set OD = Sheets("Feuil3") 'définit l'onglet OD
DL1 = O1.Cells(Application.Rows.Count, 1).End(xlUp).Row 'définit la dernière ligne éditée DL1 de la colonne 1 (=A) de l'onglet O1
DL2 = O2.Cells(Application.Rows.Count, 1).End(xlUp).Row 'définit la dernière ligne éditée DL2 de la colonne 1 (=A) de l'onglet O2
Set PL1 = O1.Range("A1:A" & DL1) 'définit la plage PL1
Set PL2 = O2.Range("A2:A" & DL2) 'définit la plage PL2
For Each CEL In PL1 'boucle sur toutes les cellules éditées CEL de la plage PL1
    Set R = PL2.Find(CEL.Value, , xlValues, xlWhole) 'définit la recherche R (recherche la valeur de la cellule CEL dans la plage PL2)
    If Not R Is Nothing Then 'condition : si il existe au moins une occurrence trouvée
    Set Dest = IIf(OD.Range("A1") = "", OD.Range("A1"), OD.Cells(Application.Rows.Count, 1).End(xlUp).Offset(1, 0)) 'définit la cellule de destination DEST
        R.Resize(, 4).Copy Dest 'copie la cellule de la première occurrence trouvée, redimensionnée jusqu'à la colonne D, et la colle dans DEST
    End If 'fin de la condition
Next CEL 'prochaine cellule CEL de la boucle
End Sub
 

Luc62300

XLDnaute Nouveau
Re : comparaison de deux feuilles + extraction ligne

merci a vous deux pour vos réponses rapides . :cool:
tout d'abord, concernant mes connaissances sur Excel, comment dire .... bref, vous avez compris ....:mad:
modeste, j'ai ouvert ce que tu m'a proposé (qui a l'air de coller avec ce que je recherche). Mais voila, étant un grand expert d'Excel, je n'arrive pas a recréer ce que tu m'a fais. pourrais tu ( si tu en a le courage ) m'expliquer ta formule et comment l'insérer dans la feuille 3 ( dans une seule cellule ou sur la colonne complète ) .
Robert, merci a toi également mais pauvre de moi, je ne sais pas comment insérer un code VBA.
en tout cas, merci a vous !
 

Modeste

XLDnaute Barbatruc
Re : comparaison de deux feuilles + extraction ligne

Re-bonjour Luc (on dirait que je me salue moi-même ;))
Salut Robert :)
Mes hommages au reste du forum,

T'expliquer une formule, certes ... mais laquelle? Celle figurant en A2 ou celle en B2?
Partant du principe que celle de B2 est un poil plus compliquée, essayons celle-là:
[Petit rappel préliminaire:] l'aide d'Excel te fournira des explications plus complètes encore

  • La fonction INDEX permet de renvoyer une valeur qui, dans un tableau, figure à l'intersection d'une certaine ligne et d'une colonne donnée. Si on avait écrit: =INDEX(Feuil2!$A$1:$D$100;2;3) Le résultat aurait été '200', soit la valeur figurant dans le tableau A1:A100 de la Feuil2, en ligne 2 et colonne 3. Jusque là, tu me suis?
  • La fonction EQUIV donne la position d'un élément dans un tableau (d'une ligne ou d'une colonne)
    EQUIV($A2;Feuil2!$A$1:$A$100;0) permet donc de trouver le n° de ligne où figure la valeur '112233' (le contenu de A2) dans la plage qui s'étend de A1 à A100 de la Feuil2. Le dernier argument de la fonction (ici '0') force la recherche de la correspondance exacte du matricule '112233' en colonne A, dans la feuille de ton fournisseur. Tu me suis toujours?
  • Il nous reste à préciser dans quelle colonne du tableau la recherche doit se faire. Ici, comme l'ordre et l'emplacement des colonnes sont identiques en feuille2 et en feuille3, on aurait pu écrire cette formule, en B2: =INDEX(Feuil2!$A$1:$D$100;EQUIV($A2;Feuil2!$A$1:$A$100;0);2) En C2, on aurait recopié la même formule en remplaçant le '2' final par un '3' et enfin en D2, la même formule encore, avec un '4', au lieu du '2'. Pour éviter ces manipulations, si j'écris en B2 =COLONNES($A:B), le résultat est 2 (puisque la fonction renseigne le nombre de colonnes dans la plage indiqué). En recopiant vers la droite cette formule (seule ou "imbriquée" dans la fonction INDEX), elle devient automatiquement COLONNES($A:C), puis COLONNES($A:D).

J'ai fini ... tu peux arrêter de t'arracher les cheveux! Prends le temps d'essayer de digérer, fais des tests avec des parties de formules dans des cellules et surtout, n'hésite pas à revenir poser des questions !
 

Discussions similaires

Statistiques des forums

Discussions
312 559
Messages
2 089 637
Membres
104 234
dernier inscrit
boulayy