Microsoft 365 Transformation d'un calcul avec somme.si.ens et min, max en macro

Blick

XLDnaute Nouveau
Bonjour,

Pour faire le calcul je copie tous les numéros, je les colle ensuite je supprime les doublons, je fais les formules et je les replace avec une recherchev dans le tableau original.

La base du calcul est composé de deux variables x : la somme des temps liés au numéro moins le temps de la dernière opération (celle qui a le chiffre le plus élevé) et y : la somme des temps liés au numéro moins le temps de la première opération (celle qui a le chiffre le moins élevé).

Après je divise x/y et ça nous donne un ordre de classement des numéros grâce au résultat de x/y, le plus petit en premier (ordre croissant).

Le but de la macro si c'est possible est de faire l'ensemble de ces calculs juste dans la colonne calcul macro en utilisant seulement les colonnes du premier tableau (opérations, numéros et temps), ainsi la colonne calcul formule et le deuxième tableau ne sont pas censé changer et en bonus si c'est possible que la macro fonctionne même si les numéros sont dans le désordre.

Merci pour votre aide
 

Pièces jointes

  • transformation-de-macro.xlsx
    116.2 KB · Affichages: 5

Blick

XLDnaute Nouveau
Je ne connais pas cette fonction, mais le but c'est que le deuxième tableau disparaisse je l'ai laissé pour donner un exemple de mon calcul.
Si c'est possible j'aimerais que les résultats dans la colonne calcul macro s'affichent après avoir activé une macro juste en utilisant les trois colonnes avant elle.
 

Dranreb

XLDnaute Barbatruc
Si les Numéros et Opération peuvent être en désordre :
VB:
Sub Test()
   Dim LOt As ListObject, TR(), SGrNum As SsGr, Détails, L As Long, TempsDernOp As Double, _
      TempsPremOp As Double, SomTemps As Double, X As Double, Y As Double, XsY As Double
   Set LOt = ActiveSheet.[A3].ListObject
   ReDim TR(1 To LOt.ListRows.Count, 1 To 4)
   For Each SGrNum In Gigogne(LOt, 2, Null, 1)
      Détails = SGrNum.DonnéesFin: TempsDernOp = Détails(3)
      Détails = SGrNum.DonnéesDébut: TempsPremOp = Détails(3)
      SomTemps = SGrNum.Somme(3)
      X = SomTemps - TempsDernOp
      Y = SomTemps - TempsPremOp
      If Y <> 0 Then XsY = X / Y Else XsY = 1
      For Each Détails In SGrNum.Co
         L = L + 1
         TR(L, 1) = Détails(1)
         TR(L, 2) = SGrNum.Id
         TR(L, 3) = Détails(3)
         TR(L, 4) = XsY
         Next Détails, SGrNum
      LOt.ListColumns("Numéros").DataBodyRange.NumberFormat = "@"
      LOt.DataBodyRange.Resize(, 3).Value = TR
   End Sub
 

Discussions similaires

Réponses
20
Affichages
604
Réponses
6
Affichages
238

Statistiques des forums

Discussions
315 090
Messages
2 116 102
Membres
112 661
dernier inscrit
ceucri