Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Variables d'une opération en fonction de la valeur d'une colonne

12 réponses
Avatar
Ashish Kebab
Bonjour,

mon premier post n'a pas march=E9, alors je recommence...
J'ai besoin d'une formule qui me permette de faire une op=E9ration entre
plusieurs valeurs d'un tableau, en fonction de la valeur contenue dans
la premi=E8re colonne. Exemple :

A B
1 a 2
2 b 3
3 c 5
4
5 b 10
6 a 20

L'op=E9ration sera : B1*B6 + B2*B5 (1er a * 2eme a + 1er b * 2eme b)

Quelqu'un a-t-il la solution ??
Merci beaucoup !
Ashish

2 réponses

1 2
Avatar
isabelle
bonjour vous deux,

une autre solution serait d'ajouter, en début de macro, une colonne avec un ordre de trie (1,2,3,...)
et de refaire un trie sur cette colonne en fin de macro.

isabelle

Bonjour Ashish,

Oui c'est possible mais j'aimerais bien voir à quoi ressemble
ton tableau de production. Je n'ai fait des essais qu'avec des
tableaux du genre :
A B
a 2
a 4
b 5
c
a 3
b
a 4

Et quand le nombre de données augmente, j'obtiens des nombres astronomiques.

Serge


"Ashish Kebab" a écrit dans le message de news:
Bonjour et merci à tous les deux !

Garnote, ton code marche bien (j'aime beaucoup la mise à jour
automatique :oD ), mais une petite contrainte que, il est vrai, je
n'avais pas précisée... Il ne faut pas que mes cases bougent... !
Parce que là, mon exemple est petit, c'est juste pour donner un énoncé
clair de mon problème. Mais j'ai besoin de cette formule pour un bon
gros tableau de prod, déjà bien organisé, les premières valeurs étant
par exemple des capacités de production et les secondes les charges de
production... Bref, faut pas tout mélanger !

Est-ce que la solution ne serait pas de créer une feuille de calcul
tampon ? un peu long en temps de calcul peut-être ? d'autant que ce
type de calcul sera réutilisé plusieurs fois dans la même feuille...

Voilou, désolé de pas avoir précisé plus tôt... :op

++ Ashish




Avatar
garnote
Bonjour Ashish,

Cette macro suppose que la feuille contenant ton
tableau se nomme "Kebab" et que la cellule D1
n'est pas utilisée. Elle fait les mêmes calculs que
la précédente mais sur une autre feuille baptisée
"Zython" qui est détruite à la fin de la macro.
De cette manière, ton tableau ne sera pas mélangé
et le temps de calcul n'est guère modifié.

Sub Somme_De_Produits()
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Dim k As Long
Dim i As Long
Dim L(1 To 65536) As Long
Dim p(1 To 65536) As Double
Dim s As Double
On Error Resume Next
With Sheets.Add
.Name = "Zython"
Worksheets("Kebab").Range("A:B").Copy Range("A1")
Range("A:B").Sort Key1:=Range("A1"), Order1:=xlAscending
i = 1
Do
i = i + 1
If Cells(i, 1) <> Cells(i - 1, 1) Then
k = k + 1
L(k) = i - 1
End If
Loop Until Cells(i - 1, 1) = ""
p(1) = WorksheetFunction.Product(Range(Cells(1, 2), Cells(L(1), 2)))
For i = 2 To k
p(i) = WorksheetFunction.Product(Range(Cells(L(i - 1) + 1, 2), Cells(L(i), 2)))
Next i
End With
For i = 1 To k
s = s + p(i)
Next i
Worksheets("Kebab").Range("D1") = s
Worksheets("Zython").Delete
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub

Serge


"Ashish Kebab" a écrit dans le message de news:
Bonjour et merci à tous les deux !

Garnote, ton code marche bien (j'aime beaucoup la mise à jour
automatique :oD ), mais une petite contrainte que, il est vrai, je
n'avais pas précisée... Il ne faut pas que mes cases bougent... !
Parce que là, mon exemple est petit, c'est juste pour donner un énoncé
clair de mon problème. Mais j'ai besoin de cette formule pour un bon
gros tableau de prod, déjà bien organisé, les premières valeurs étant
par exemple des capacités de production et les secondes les charges de
production... Bref, faut pas tout mélanger !

Est-ce que la solution ne serait pas de créer une feuille de calcul
tampon ? un peu long en temps de calcul peut-être ? d'autant que ce
type de calcul sera réutilisé plusieurs fois dans la même feuille...

Voilou, désolé de pas avoir précisé plus tôt... :op

++ Ashish
1 2