Variables d'une opération en fonction de la valeur d'une colonne
12 réponses
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
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
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" <ashley.omahony@gmail.com> a écrit dans le message de news: 1173863079.054937.179480@y66g2000hsf.googlegroups.com...
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
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
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
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" <ashley.omahony@gmail.com> a écrit dans le message de news: 1173863079.054937.179480@y66g2000hsf.googlegroups.com...
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
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