Comparaison de valeurs

Bonjour,

Je fais appel à vous car j'ai un petit soucis pour extraire des données et je ne sais pas trop quel technique utiliser. Je m'explique :

Je cherche à extraire des données d'un tableau (ex:ci-dessous). Deux colonnes, l'une sur le numéro de fabrication de mon produit, l'autre sur le numéro de lot de la matière première servant à la fabrication de mon produit finit. Je veux extraire le numéro du produit sur la seconde et l'avant-dernière de chaque lot de MP (Ici : 17351/17353/17356/17360/17363/17366). Mon idée était de comparer chaque ligne pour déterminer à quelle moment la cellule est différente et renvoyer sa position avec INDEX+EQUIV en ajoutant +1 ou -1 à la position de la ligne. Seulement je ne sais pas quelle formule/technique utiliser pour effectuer la comparaison.

La seule chose que j'ai trouvé serait ça : https://forum.excel-pratique.com/viewtopic.php?t=97120 , mais j'avoue que mes compétences sont limités et je ne sais pas comment l'adapter pour ma situation. Peut-être un loop?

Merci d'avance,

N° de fabN° de lot MP
173503
173513
173523
173533
173543
173559
173569
17357
917358917359917360917361917362617363617364617365617366
6173676

Salut Nesquiik,

en supposant que tes listes sont cohérentes et qu'il y ait minimum 4 lots fabriqués par lot MP pour avoir un avant-dernier..
Un double-clic sur la feuille démarre la macro...

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
'
Dim iRow%, iRowT%
'
Cancel = True
Application.ScreenUpdating = False
'
iRow = Range("A" & Rows.Count).End(xlUp).Row
Range("C2:C" & iRow).Value = ""
Range("A2:C" & iRow).Borders.LineStyle = xlLineStyleNone
For x = 2 To iRow
    iRowT = Columns(2).Find(what:=Range("B" & x).Value, lookat:=xlWhole, LookIn:=xlValues, searchdirection:=xlPrevious).Row
    Range("A" & x & ":C" & iRowT).BorderAround LineStyle:=xlContinuous
    Range("C" & x).Value = Range("A" & x + 1).Value
    If iRowT - x > 2 Then Range("C" & x + 1).Value = Range("A" & iRowT - 1).Value
    x = iRowT
Next
'
Application.ScreenUpdating = True
'
End Sub

Combien de lignes de N° Fab/Lot MP as-tu, en général ?


A+

11nesquiik.xlsm (21.88 Ko)

Salut curulis57,

Merci pour ta proposition, je vais essayer décortiquer le code pour comprendre ta méthode et tester ça ce matin pour te faire un retour.
Tout ça dépend à quelle endroit je place cette macro, je peux aller jusqu'à 30 000. (d'où la nécessité d'une macro )

Quand tu parles de suite cohérente tu prends en considération que mes numéros de fab sont une suite n;n+1;n+2... c'est ça?

Salut Nesquiik,

ceci sera plus adapté pour un traitement de 30.000 lignes...

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
'
Dim tTab, lgRow&
'
Cancel = True
Application.ScreenUpdating = False
'
lgRow = Range("A" & Rows.Count).End(xlUp).Row
Range("C2:C" & lgRow).Value = ""
Range("A2:C" & lgRow).Borders.LineStyle = xlLineStyleNone
tTab = Range("A2:C" & lgRow + 1).Value
For x = 1 To UBound(tTab, 1)
    For y = x + 1 To UBound(tTab, 1)
        If tTab(y, 2) <> tTab(x, 2) Then
            Range("A" & x + 1 & ":C" & y).BorderAround LineStyle:=xlContinuous
            tTab(x, 3) = tTab(x + 1, 1)
            If y - x > 3 Then tTab(x + 1, 3) = tTab(y - 1, 1)
            x = y - 1
            Exit For
        End If
    Next
Next
Range("A2:C" & lgRow + 1).Value = tTab
'
Application.ScreenUpdating = True
'
End Sub
1nesquiik.xlsm (108.21 Ko)


A+

Rechercher des sujets similaires à "comparaison valeurs"