Aide à la suppression des données en double dans plusieurs conditions

Bonjour
J'ai cinq colonnes
Code produit
Nom du produit
Quantité
Nom du magasin
Validité du produit
Il y a une répétition dans le code produit et le nom du magasin en raison de la date de péremption différente du produit
Par exemple
100 : Produit : 12 : magasin : 01/05/2024
100 : Produit : 26 : magasin : 01/01/2024
Lorsque la quantité est 26 (zéro), il effectue une suppression définitive
Pour ce qui est de
Lorsque la quantité est de 12 (zéro)
Il ne le supprime pas car il n'est pas dupliqué

depuis
100 : Produit : 12 : magasin : 01/05/2024
à
100 : Produit : 0 : magasin : 01/05/2024

Sub KeepZeroDuplicates()
Dim ws As Worksheet
Dim lastRow As Long
Dim checkRange As Range
Dim checkCols As Variant
Dim data As Variant
Dim i As Long, j As Long, k As Long
' Set worksheet and last row
Set ws = ActiveSheet ' Replace with your sheet name if needed
lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row ' Adjust column if needed
' Specify columns to check for duplicates and zero values
checkCols = Array(1, 2, 3, 4, 5) ' Replace with column numbers
' Store data in an array for efficient processing
data = ws.Range("A1:E" & lastRow).Value ' Adjust range as needed
' Loop through data array
For i = 2 To UBound(data, 1) ' Start from second row
For j = 2 To i - 1
' Check for duplicate in specified columns
If IsDuplicate(data, i, j, checkCols) Then
' Check if any value in check columns is zero
For k = LBound(checkCols) To UBound(checkCols)
If data(i, checkCols(k)) = 0 Then Exit For
Next k
If k <= UBound(checkCols) Then
' Duplicate found with zero value, keep it
Exit For
Else
' Duplicate without zero value, delete row
ws.Rows(i).Delete
i = i - 1
Exit For
End If
End If
Next j
Next i
End Sub
Function IsDuplicate(data As Variant, row1 As Long, row2 As Long, checkCols As Variant) As Boolean
Dim k As Long
For k = LBound(checkCols) To UBound(checkCols)
If data(row1, checkCols(k)) <> data(row2, checkCols(k)) Then
IsDuplicate = False
Exit Function
End If
Next k
IsDuplicate = True
End Function
compress 2884

Bonjour,

Merci de bien vouloir renseigner la version de ton produit Excel : 365 ? 2021 ? 2019 ? ...

Quel est le résultat attendu ? Peux-tu fournir un fichier exemple pour une aide adaptée du forum ?

Merci.

Excel 2010

Quant au fichier, il s'agit de PSI comme indiqué sur la photo

15stock123.xlsm (19.69 Ko)

Je veux dire, lorsque le code produit est avec le nom du magasin, si la quantité est nulle et qu'il n'y a rien d'autre, alors il ne doit pas être supprimé.

Mais si vous regardez que le code produit et le nom du magasin sont des doublons, sachant qu'il y a un solde dans le magasin, qui est la quantité (12)

Le code est activé de sorte que le code produit, ainsi que le nom du magasin et la quantité, s'il est répété avec le numéro (zéro), le supprimeront, sachant qu'il y a un numéro (12) présent.

Quel est le problème avec le code ?

Je souhaite combiner le code produit avec le nom du magasin car ce que l'on entend par répétition n'est pas la quantité nulle, mais plutôt le code produit et le nom du magasin ensemble.

C'est pour clarifier

Sub KeepZeroDuplicates()
    Dim ws As Worksheet
    Dim checkRange As Range
    Dim lastRow As Long
    Dim checkCols As Variant
    Dim data As Variant
    Dim i As Long, j As Long, k As Long
    'Set worksheet and last row
    Set ws = ActiveSheet 'Replace with your sheet name if needed
    lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row 'Adjust column if needed
    'Specify columns to check for duplicates and zero values
    checkCols = Array(1, 2, 3, 4, 5) 'Replace with column numbers
    'Store data in an array for efficient processing
    data = ws.Range("A1:E" & lastRow).Value 'Adjust range as needed
    'Loop through data array
    For i = 2 To UBound(data, 1) 'Start from second row
        For j = 2 To i - 1
            'Check for duplicate in specified columns
            If IsDuplicate(data, i, j, checkCols) Then
                'Check if any value in check columns is zero
                For k = LBound(checkCols) To UBound(checkCols)
                    If data(i, checkCols(k)) = 0 Then
                        ws.Rows(i).Delete
                       'i = i - 1
                        i = i 
                        Exit For
                    End If
                Next k
            End If
        Next j
    Next i
End Sub

Function IsDuplicate(data As Variant, row1 As Long, row2 As Long, checkCols As Variant) As Boolean
Dim k As Long
For k = LBound(checkCols) To UBound(checkCols)
If data(row1, checkCols(k)) <> data(row2, checkCols(k)) Then
IsDuplicate = False
Exit Function
End If
Next k
IsDuplicate = True
End Function

Bref, il supprime la quantité si elle est nulle si le code produit et le nom du magasin sont en double

Si le code produit et le nom du magasin ne sont pas dupliqués et que la quantité est nulle, il ne sera pas supprimé

N.-B.

Cela est dû au fait de conserver les données du code produit et du nom du magasin dans les données de la feuille et d'empêcher leur suppression, même si la quantité est nulle.

Bonjour

Le second tableau est ce que tu veux obtenir ou ce que tu obtiens et dont tu ne veux pas ?

Tu veux cela ?

image

Oui, c'est ce qui est requis

Cependant, si le code produit était 100 pour ce magasin, la quantité 12 devient nulle, elle ne sera donc pas supprimée car elle n'est pas dupliquée.

RE

Cependant, si le code produit était 100 pour ce magasin, la quantité 12 devient nulle, elle ne sera donc pas supprimée car elle n'est pas dupliquée.

Le CODE est 100 donc je ne comprends pas ta réponse

Rechercher des sujets similaires à "aide suppression donnees double conditions"