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 fab | N° de lot MP |
| 17350 | 3 |
| 17351 | 3 |
| 17352 | 3 |
| 17353 | 3 |
| 17354 | 3 |
| 17355 | 9 |
| 17356 | 9 |
| 17357 |
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 SubCombien de lignes de N° Fab/Lot MP as-tu, en général ?
A+
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
A+