Comparer puis soustraire le résultat
Je viens dans ce forum afin de solliciter votre aide pour la réalisation d'un code.
Je dispose de 2 feuilles : Depôt et Ajout
Chaque feuille contient un tableau avec le nombre de ligne variable en fonction des dossiers
Je voudrais tout d'abord faire une comparaison des deux tableaux, précisement les colonnes B et F
Si les valeurs sont identiques pour les deux tableaux,
alors il faudrait comparer les valeurs situées dans la colonne D des deux tableaux
Si la valeur de la colonne D du tableau 1 dans la feuille Depôt est supérieure à celle de la colonne D du
tableau 2 dans la feuille Ajout,
alors il faudrait effectuer une soustraction des deux valeurs.
Et dans la ligne de la colonne D de la feuille Depôt écrire le résultat obtenu de cette opération dans
cette ligne
puis dans la feuille ajout supprimer la ligne identique.
Cette manipulation doit être faite dans les deux sens c'est à dire que si c'est la valeur de l'ajout qui est plus grande que celle du Depôt
soustraire les deux valeurs et écrire le résultat dans la ligne ajout correspondante puis supprimer
la ligne qui est identique dans la feuille Depôt
J'espère que mon explication est assez claire et votre aide me serait vraiment précieuse. Merci beaucoup.
Je vous joins un classeur exemple.
Salut MYs,
Quelque chose ainsi ?
Un changement de valeur dans une ou l'autre des colonnes [D:D] des deux feuilles démarre la macro.
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
'
Dim sWk As Worksheet
'
Application.EnableEvents = False
Application.ScreenUpdating = False
'
If Not Intersect(Target, Sh.Range("D2:D" & Sh.Range("D" & Rows.Count).End(xlUp).Row)) Is Nothing Then
iRow = Target.Row
Set sWk = Worksheets(IIf(Sh.Name = "Dépôt", "Ajout", "Dépôt"))
With sWk
For x = 2 To .Range("B" & Rows.Count).End(xlUp).Row
If .Range("B" & x).Value = Sh.Range("B" & iRow).Value And .Range("F" & x).Value = Sh.Range("F" & iRow).Value Then
If .Range("D" & x).Value <> Target Then
iIdx = IIf(.Range("D" & x).Value > Target, 1, 2)
If iIdx = 1 Then
.Range("D" & x).Value = .Range("D" & x).Value - Target
Sh.Rows(iRow).Delete shift:=xlUp
Else
Target = Target - .Range("D" & x).Value
.Rows(x).Delete shift:=xlUp
End If
End If
Exit For
End If
Next
End With
End If
'
Application.EnableEvents = True
Application.ScreenUpdating = True
'
End Sub
A+
Bonjour, je vous remercie d'avoir pris le temps de répondre et de m'apporter votre aide. Cela fonctionne bien.