Calcul de cumul

2 réponses
Avatar
ThierryP
Décidément, ce n'est pas mon jour .....

Je cherche Í  faire un calcul de cumul :
Depuis la valeur d'une cellule dans un fichier A, je cherche dans un fichier B cette valeur (elle peut s'y trouver plusieurs fois); si elle est trouvée, je mets dans une variable Qté la valeur de la cellule adjacente (.offset(0,1)); puis je cherche l'occurence suivante; si il y en a une, je fais Qté = Qté + .offset(0,1) sinon je récupère la variable Qté.

Je bute sur la gestion de find et findnext avec ma somme cumulée. J'ai pondu un truc :
'__________________________
Cherche = ActiveCell
Qté_Reçue = 0
With Workbooks(Fichier_Réceptions).Sheets(1)
Set C = .Cells.Find(what:=Cherche, LookIn:=xlFormulas, LookAt:=xlWhole, SearchOrder:=xlByColumns, _
SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False)
If Not C Is Nothing Then
FirstAddress = C.Address
Qté_Reçue = C.Offset(0, -2)
End If
Do
Set C = .Cells.FindNext(C)
LastAddress = C.Address
Loop While Not C Is Nothing And LastAddress <> FirstAddress
If Not C Is Nothing Then Qté_Reçue = Qté_Reçue + C.Offset(0, -2)
End With
ActiveCell.Offset(0, -4) = Qté_Reçue
'________________________________________________
J'ai essayé un tas de combinaisons différentes...mais rien ne fonctionne !

Merci d'avance de sauver les quelques neurones qui me restent !

ThierryP

2 réponses

Avatar
MichD
Le 06/04/22 Í  10:10, ThierryP a écrit :
Décidément, ce n'est pas mon jour .....
Je cherche Í  faire un calcul de cumul :
Depuis la valeur d'une cellule dans un fichier A, je cherche dans un fichier B cette valeur (elle peut s'y trouver plusieurs fois); si elle est trouvée, je mets dans une variable Qté la valeur de la cellule adjacente (.offset(0,1)); puis je cherche l'occurence suivante; si il y en a une, je fais Qté = Qté + .offset(0,1) sinon je récupère la variable Qté.
Je bute sur la gestion de find et findnext avec ma somme cumulée. J'ai pondu un truc :
'__________________________
Cherche = ActiveCell
Qté_Reçue = 0
With Workbooks(Fichier_Réceptions).Sheets(1)
Set C = .Cells.Find(what:=Cherche, LookIn:=xlFormulas, LookAt:=xlWhole, SearchOrder:=xlByColumns, _
SearchDirection:=xlNext, MatchCase:úlse, SearchFormat:úlse)
If Not C Is Nothing Then
FirstAddress = C.Address
Qté_Reçue = C.Offset(0, -2)
End If
Do
Set C = .Cells.FindNext(C)
LastAddress = C.Address
Loop While Not C Is Nothing And LastAddress <> FirstAddress
If Not C Is Nothing Then Qté_Reçue = Qté_Reçue + C.Offset(0, -2)
End With
ActiveCell.Offset(0, -4) = Qté_Reçue
'________________________________________________
J'ai essayé un tas de combinaisons différentes...mais rien ne fonctionne !
Merci d'avance de sauver les quelques neurones qui me restent !
ThierryP

Bonjour,
Essaie comme ceci :
'---------------------------------
Sub test12()
Dim A As String, B As String, Adr As String
Dim Trouve As Range, Total As Double
'La macro dans le classeur A
A = ThisWorkbook.Name 'fichier source o͹ sont les valeurs
'dont je veux chercher
'Nom du classeur o͹ je vais chercher
B = Workbooks("Classeur2").Name
With Workbooks(A).Sheets(1) 'Adapter le nom de la feuille
Set Rg = .Range("A1:A10") 'plage source dont je cherche la somme
'pour chacune des cellules.
For Each C In Rg
If C <> "" Then
With Workbooks(B).Sheets(1) 'Adapter le nom de la feuille
With .Cells
Set Trouve = .Find(what:=C, LookIn:=xlFormulas,
LookAt:=xlWhole)
If Not Trouve Is Nothing Then
Adr = Trouve.Address
Do
Total = Total + C.Value
Set Trouve = .FindNext(Trouve)
Loop Until Trouve.Address = Adr
C.Offset(, 1) = Total
Total = 0
End If
End With
End With
End If
Next
End With
End Sub
'---------------------------------
MichD
Avatar
ThierryP
Bonjour Denis,
Comme d'habitude, ça roule tout seul !!!
Je m'étais perdu entre les do... loop while, until etc....
Encore merci du coup de main :-)
ThierryP