Bonjour Isabelle, Oui, ça doit dépendre du niveau de complexité de la formule. Je suis sûr qu'il m'est arrivé au moins une fois de devoir faire le calcul en cellule. Cordialement. Daniel
bonjour Steph,
celle-ci fonctionne
MsgBox [CountIf(Index(a, , 2), ">")]
isabelle
Le 2015-07-23 11:04, a écrit :
Bonjour tout le monde,
Par curiosité je me demandais s'il était possible d'utiliser des fonctions telles que nb.si, Sommeprod etc. sur des variables tableaux en VBA.
Par exemple, j'ai un tableau Excel avec des codes et une valeur : ColA ColB A 1 A 2 B 3 B 4 B 5 C 6 C 7 D 8 D 9 D 10
Ces lignes fonctionnent : a = Range("A1:B10").Value MsgBox Application.Sum(Application.Index(a, , 2)) 'somme 2ième col MsgBox Application.CountA(Application.Index(a, , 2)) 'compte nb valeurs 2ième col MsgBox Application.Match(5, Application.Index(a, , 2), 0) 'Recherche
En revanche, je n'y arrive pas avec celles-ci : MsgBox Application.CountIf(Application.Index(a, , 2), ">") MsgBox Application.SumProduct((Application.Index(a, , 1) = "A") * (Application.Index(a, , 2)))
Peut-être n'est-ce pas possible ! Aucune urgence ! C'est juste pour ma culture personnelle :-)
Merci Steph
Bonjour Isabelle,
Oui, ça doit dépendre du niveau de complexité de la formule. Je suis
sûr qu'il m'est arrivé au moins une fois de devoir faire le calcul en
cellule.
Cordialement.
Daniel
bonjour Steph,
celle-ci fonctionne
MsgBox [CountIf(Index(a, , 2), ">")]
isabelle
Le 2015-07-23 11:04, stefdestroy@gmail.com a écrit :
Bonjour tout le monde,
Par curiosité je me demandais s'il était possible d'utiliser des fonctions
telles que nb.si, Sommeprod etc. sur des variables tableaux en VBA.
Par exemple, j'ai un tableau Excel avec des codes et une valeur :
ColA ColB
A 1
A 2
B 3
B 4
B 5
C 6
C 7
D 8
D 9
D 10
Ces lignes fonctionnent :
a = Range("A1:B10").Value
MsgBox Application.Sum(Application.Index(a, , 2)) 'somme 2ième col
MsgBox Application.CountA(Application.Index(a, , 2)) 'compte nb valeurs
2ième col
MsgBox Application.Match(5, Application.Index(a, , 2), 0) 'Recherche
En revanche, je n'y arrive pas avec celles-ci :
MsgBox Application.CountIf(Application.Index(a, , 2), ">")
MsgBox Application.SumProduct((Application.Index(a, , 1) = "A") *
(Application.Index(a, , 2)))
Peut-être n'est-ce pas possible !
Aucune urgence ! C'est juste pour ma culture personnelle :-)
Bonjour Isabelle, Oui, ça doit dépendre du niveau de complexité de la formule. Je suis sûr qu'il m'est arrivé au moins une fois de devoir faire le calcul en cellule. Cordialement. Daniel
bonjour Steph,
celle-ci fonctionne
MsgBox [CountIf(Index(a, , 2), ">")]
isabelle
Le 2015-07-23 11:04, a écrit :
Bonjour tout le monde,
Par curiosité je me demandais s'il était possible d'utiliser des fonctions telles que nb.si, Sommeprod etc. sur des variables tableaux en VBA.
Par exemple, j'ai un tableau Excel avec des codes et une valeur : ColA ColB A 1 A 2 B 3 B 4 B 5 C 6 C 7 D 8 D 9 D 10
Ces lignes fonctionnent : a = Range("A1:B10").Value MsgBox Application.Sum(Application.Index(a, , 2)) 'somme 2ième col MsgBox Application.CountA(Application.Index(a, , 2)) 'compte nb valeurs 2ième col MsgBox Application.Match(5, Application.Index(a, , 2), 0) 'Recherche
En revanche, je n'y arrive pas avec celles-ci : MsgBox Application.CountIf(Application.Index(a, , 2), ">") MsgBox Application.SumProduct((Application.Index(a, , 1) = "A") * (Application.Index(a, , 2)))
Peut-être n'est-ce pas possible ! Aucune urgence ! C'est juste pour ma culture personnelle :-)
oui, ça se complique beaucoup si on utilise des variables...
isabelle
Le 2015-07-23 13:52, DanielCo a écrit :
Bonjour Isabelle, Oui, ça doit dépendre du niveau de complexité de la formule. Je suis sûr qu'il m'est arrivé au moins une fois de devoir faire le calcul en cellule. Cordialement. Daniel
bonjour Steph,
celle-ci fonctionne
MsgBox [CountIf(Index(a, , 2), ">")]
isabelle
Le 2015-07-23 11:04, a écrit :
Bonjour tout le monde,
Par curiosité je me demandais s'il était possible d'utiliser des fonctions telles que nb.si, Sommeprod etc. sur des variables tableaux en VBA.
Par exemple, j'ai un tableau Excel avec des codes et une valeur : ColA ColB A 1 A 2 B 3 B 4 B 5 C 6 C 7 D 8 D 9 D 10
Ces lignes fonctionnent : a = Range("A1:B10").Value MsgBox Application.Sum(Application.Index(a, , 2)) 'somme 2ième col MsgBox Application.CountA(Application.Index(a, , 2)) 'compte nb valeurs 2ième col MsgBox Application.Match(5, Application.Index(a, , 2), 0) 'Recherche
En revanche, je n'y arrive pas avec celles-ci : MsgBox Application.CountIf(Application.Index(a, , 2), ">") MsgBox Application.SumProduct((Application.Index(a, , 1) = "A") * (Application.Index(a, , 2)))
Peut-être n'est-ce pas possible ! Aucune urgence ! C'est juste pour ma culture personnelle :-)
Merci Steph
bonjour Daniel,
oui, ça se complique beaucoup si on utilise des variables...
isabelle
Le 2015-07-23 13:52, DanielCo a écrit :
Bonjour Isabelle,
Oui, ça doit dépendre du niveau de complexité de la formule. Je suis sûr qu'il
m'est arrivé au moins une fois de devoir faire le calcul en cellule.
Cordialement.
Daniel
bonjour Steph,
celle-ci fonctionne
MsgBox [CountIf(Index(a, , 2), ">")]
isabelle
Le 2015-07-23 11:04, stefdestroy@gmail.com a écrit :
Bonjour tout le monde,
Par curiosité je me demandais s'il était possible d'utiliser des fonctions
telles que nb.si, Sommeprod etc. sur des variables tableaux en VBA.
Par exemple, j'ai un tableau Excel avec des codes et une valeur :
ColA ColB
A 1
A 2
B 3
B 4
B 5
C 6
C 7
D 8
D 9
D 10
Ces lignes fonctionnent :
a = Range("A1:B10").Value
MsgBox Application.Sum(Application.Index(a, , 2)) 'somme 2ième col
MsgBox Application.CountA(Application.Index(a, , 2)) 'compte nb valeurs 2ième
col
MsgBox Application.Match(5, Application.Index(a, , 2), 0) 'Recherche
En revanche, je n'y arrive pas avec celles-ci :
MsgBox Application.CountIf(Application.Index(a, , 2), ">")
MsgBox Application.SumProduct((Application.Index(a, , 1) = "A") *
(Application.Index(a, , 2)))
Peut-être n'est-ce pas possible !
Aucune urgence ! C'est juste pour ma culture personnelle :-)
oui, ça se complique beaucoup si on utilise des variables...
isabelle
Le 2015-07-23 13:52, DanielCo a écrit :
Bonjour Isabelle, Oui, ça doit dépendre du niveau de complexité de la formule. Je suis sûr qu'il m'est arrivé au moins une fois de devoir faire le calcul en cellule. Cordialement. Daniel
bonjour Steph,
celle-ci fonctionne
MsgBox [CountIf(Index(a, , 2), ">")]
isabelle
Le 2015-07-23 11:04, a écrit :
Bonjour tout le monde,
Par curiosité je me demandais s'il était possible d'utiliser des fonctions telles que nb.si, Sommeprod etc. sur des variables tableaux en VBA.
Par exemple, j'ai un tableau Excel avec des codes et une valeur : ColA ColB A 1 A 2 B 3 B 4 B 5 C 6 C 7 D 8 D 9 D 10
Ces lignes fonctionnent : a = Range("A1:B10").Value MsgBox Application.Sum(Application.Index(a, , 2)) 'somme 2ième col MsgBox Application.CountA(Application.Index(a, , 2)) 'compte nb valeurs 2ième col MsgBox Application.Match(5, Application.Index(a, , 2), 0) 'Recherche
En revanche, je n'y arrive pas avec celles-ci : MsgBox Application.CountIf(Application.Index(a, , 2), ">") MsgBox Application.SumProduct((Application.Index(a, , 1) = "A") * (Application.Index(a, , 2)))
Peut-être n'est-ce pas possible ! Aucune urgence ! C'est juste pour ma culture personnelle :-)
Merci Steph
stefdestroy
Bonjourno,
Merci Daniel et Isa pour vos éclaircissements.
Quand je me trouve dans l'idée de faire des calculs un peu plus complexes sur des array sans boucler, je boucle un peu :-)
Je n'ai pas encore réussi à faire fonctionner les solutions d'Isabelle, je dois pêcher sur une bêtise. mais je liste, on ne sait jamais le cod e si cela peut servir.
Merci à vous deux, bon we Steph
'======================== ==========
Sub JE_TESTE() Dim a a = Range("A1:B10").Value [D1] = Application.Sum(Application.Index(a, , 2)) [D2] = Application.CountA(Application.Index(a, , 2)) [D3] = Application.Match(5, Application.Index(a, , 2), 0)
Dim c, d Set c = Range("A1:A10") Set d = Range("B1:B10") [D4].FormulaArray = "=SUMPRODUCT((" & c.Address & "=""A"")*(" & d .Address & "))" [D5] = Evaluate("SUMPRODUCT((" & c.Address & "=""A"")*(" & d.Addres s & "))")
'= par Dico Dim MonDico Dim MaCell As Range Set MonDico = CreateObject("Scripting.Dictionary") For Each MaCell In Range("A1:A10") If MaCell.Value = "A" Then If Not MonDico.exists(MaCell.Value) Then MonDico(MaCell.Value) = MaCell.Offset(, 1).Value Else MonDico(MaCell.Value) = Application.Sum(MonDico(MaCell.Val ue), MaCell.Offset(, 1).Value) End If End If Next MaCell [D6].Resize(MonDico.Count, 1) = Application.Transpose(MonDico.items)
'= Par Fonction [D7] = COMPTE("B", Range("A1:A10"), 1)
'NE MARCHE PAS : #NOM **** Dim b Set b = Range("A1:B10") [E1] = [CountIf(Index(b,,2),">")] [E2] = [SumProduct((Index(b,,1) = "A")*(Index(b,,2)))] [E3].FormulaArray = "=SUMPRODUCT((Index(a, , 1) = ""A"") * (Index (a, , 2)))"
End Sub
Function COMPTE(MA_VAL$, MA_PLAGE_REC As Range, IndexCumul#) Dim MonDico Dim MaCell As Range Set MonDico = CreateObject("Scripting.Dictionary") For Each MaCell In MA_PLAGE_REC If MaCell.Value = MA_VAL Then If Not MonDico.exists(MaCell.Value) Then MonDico(MaCell.Value) = MaCell.Offset(, IndexCumul) Else MonDico(MaCell.Value) = Application.Sum(MonDico(MaCell.Val ue), MaCell.Offset(, IndexCumul)) End If End If Next MaCell COMPTE = Application.Transpose(MonDico.items) End Function
Bonjourno,
Merci Daniel et Isa pour vos éclaircissements.
Quand je me trouve dans l'idée de faire des calculs un peu plus complexes sur des array sans boucler, je boucle un peu :-)
Je n'ai pas encore réussi à faire fonctionner les solutions d'Isabelle, je dois pêcher sur une bêtise. mais je liste, on ne sait jamais le cod e si cela peut servir.
Merci à vous deux, bon we
Steph
'======================== ==========
Sub JE_TESTE()
Dim a
a = Range("A1:B10").Value
[D1] = Application.Sum(Application.Index(a, , 2))
[D2] = Application.CountA(Application.Index(a, , 2))
[D3] = Application.Match(5, Application.Index(a, , 2), 0)
Dim c, d
Set c = Range("A1:A10")
Set d = Range("B1:B10")
[D4].FormulaArray = "=SUMPRODUCT((" & c.Address & "=""A"")*(" & d .Address & "))"
[D5] = Evaluate("SUMPRODUCT((" & c.Address & "=""A"")*(" & d.Addres s & "))")
'= par Dico
Dim MonDico
Dim MaCell As Range
Set MonDico = CreateObject("Scripting.Dictionary")
For Each MaCell In Range("A1:A10")
If MaCell.Value = "A" Then
If Not MonDico.exists(MaCell.Value) Then
MonDico(MaCell.Value) = MaCell.Offset(, 1).Value
Else
MonDico(MaCell.Value) = Application.Sum(MonDico(MaCell.Val ue), MaCell.Offset(, 1).Value)
End If
End If
Next MaCell
[D6].Resize(MonDico.Count, 1) = Application.Transpose(MonDico.items)
'= Par Fonction
[D7] = COMPTE("B", Range("A1:A10"), 1)
'NE MARCHE PAS : #NOM ****
Dim b
Set b = Range("A1:B10")
[E1] = [CountIf(Index(b,,2),">=10")]
[E2] = [SumProduct((Index(b,,1) = "A")*(Index(b,,2)))]
[E3].FormulaArray = "=SUMPRODUCT((Index(a, , 1) = ""A"") * (Index (a, , 2)))"
End Sub
Function COMPTE(MA_VAL$, MA_PLAGE_REC As Range, IndexCumul#)
Dim MonDico
Dim MaCell As Range
Set MonDico = CreateObject("Scripting.Dictionary")
For Each MaCell In MA_PLAGE_REC
If MaCell.Value = MA_VAL Then
If Not MonDico.exists(MaCell.Value) Then
MonDico(MaCell.Value) = MaCell.Offset(, IndexCumul)
Else
MonDico(MaCell.Value) = Application.Sum(MonDico(MaCell.Val ue), MaCell.Offset(, IndexCumul))
End If
End If
Next MaCell
COMPTE = Application.Transpose(MonDico.items)
End Function
Quand je me trouve dans l'idée de faire des calculs un peu plus complexes sur des array sans boucler, je boucle un peu :-)
Je n'ai pas encore réussi à faire fonctionner les solutions d'Isabelle, je dois pêcher sur une bêtise. mais je liste, on ne sait jamais le cod e si cela peut servir.
Merci à vous deux, bon we Steph
'======================== ==========
Sub JE_TESTE() Dim a a = Range("A1:B10").Value [D1] = Application.Sum(Application.Index(a, , 2)) [D2] = Application.CountA(Application.Index(a, , 2)) [D3] = Application.Match(5, Application.Index(a, , 2), 0)
Dim c, d Set c = Range("A1:A10") Set d = Range("B1:B10") [D4].FormulaArray = "=SUMPRODUCT((" & c.Address & "=""A"")*(" & d .Address & "))" [D5] = Evaluate("SUMPRODUCT((" & c.Address & "=""A"")*(" & d.Addres s & "))")
'= par Dico Dim MonDico Dim MaCell As Range Set MonDico = CreateObject("Scripting.Dictionary") For Each MaCell In Range("A1:A10") If MaCell.Value = "A" Then If Not MonDico.exists(MaCell.Value) Then MonDico(MaCell.Value) = MaCell.Offset(, 1).Value Else MonDico(MaCell.Value) = Application.Sum(MonDico(MaCell.Val ue), MaCell.Offset(, 1).Value) End If End If Next MaCell [D6].Resize(MonDico.Count, 1) = Application.Transpose(MonDico.items)
'= Par Fonction [D7] = COMPTE("B", Range("A1:A10"), 1)
'NE MARCHE PAS : #NOM **** Dim b Set b = Range("A1:B10") [E1] = [CountIf(Index(b,,2),">")] [E2] = [SumProduct((Index(b,,1) = "A")*(Index(b,,2)))] [E3].FormulaArray = "=SUMPRODUCT((Index(a, , 1) = ""A"") * (Index (a, , 2)))"
End Sub
Function COMPTE(MA_VAL$, MA_PLAGE_REC As Range, IndexCumul#) Dim MonDico Dim MaCell As Range Set MonDico = CreateObject("Scripting.Dictionary") For Each MaCell In MA_PLAGE_REC If MaCell.Value = MA_VAL Then If Not MonDico.exists(MaCell.Value) Then MonDico(MaCell.Value) = MaCell.Offset(, IndexCumul) Else MonDico(MaCell.Value) = Application.Sum(MonDico(MaCell.Val ue), MaCell.Offset(, IndexCumul)) End If End If Next MaCell COMPTE = Application.Transpose(MonDico.items) End Function
isabelle
bonjour steph,
essaie comme ça,
Sub JE_TESTE_2() Dim sSheet As String sSheet = "þuil1!" 'nom de l'onglet des données ActiveWorkbook.Names.Add Name:="b", RefersTo:=sSheet & Range("A1:B10").Address Range("E1") = [CountIf(Index(b, , 2), ">")] Range("E2") = [SumProduct((Index(b, , 1) = "A") * (Index(b, , 2)))] End Sub
isabelle
Le 2015-07-24 09:38, a écrit :
Bonjourno,
Merci Daniel et Isa pour vos éclaircissements.
Quand je me trouve dans l'idée de faire des calculs un peu plus complexes sur des array sans boucler, je boucle un peu :-)
Je n'ai pas encore réussi à faire fonctionner les solutions d'Isabelle,
je dois pêcher sur une bêtise. mais je liste, on ne sait jamais le code si cela peut servir.
Merci à vous deux, bon we Steph
bonjour steph,
essaie comme ça,
Sub JE_TESTE_2()
Dim sSheet As String
sSheet = "þuil1!" 'nom de l'onglet des données
ActiveWorkbook.Names.Add Name:="b", RefersTo:=sSheet & Range("A1:B10").Address
Range("E1") = [CountIf(Index(b, , 2), ">")]
Range("E2") = [SumProduct((Index(b, , 1) = "A") * (Index(b, , 2)))]
End Sub
isabelle
Le 2015-07-24 09:38, stefdestroy@gmail.com a écrit :
Bonjourno,
Merci Daniel et Isa pour vos éclaircissements.
Quand je me trouve dans l'idée de faire des calculs un peu plus complexes sur des array sans boucler, je boucle un peu :-)
Je n'ai pas encore réussi à faire fonctionner les solutions d'Isabelle,
je dois pêcher sur une bêtise. mais je liste, on ne sait jamais le code si cela
peut servir.
Sub JE_TESTE_2() Dim sSheet As String sSheet = "þuil1!" 'nom de l'onglet des données ActiveWorkbook.Names.Add Name:="b", RefersTo:=sSheet & Range("A1:B10").Address Range("E1") = [CountIf(Index(b, , 2), ">")] Range("E2") = [SumProduct((Index(b, , 1) = "A") * (Index(b, , 2)))] End Sub
isabelle
Le 2015-07-24 09:38, a écrit :
Bonjourno,
Merci Daniel et Isa pour vos éclaircissements.
Quand je me trouve dans l'idée de faire des calculs un peu plus complexes sur des array sans boucler, je boucle un peu :-)
Je n'ai pas encore réussi à faire fonctionner les solutions d'Isabelle,
je dois pêcher sur une bêtise. mais je liste, on ne sait jamais le code si cela peut servir.
Merci à vous deux, bon we Steph
GL
Le 25/07/2015 03:36, isabelle a écrit :
bonjour steph,
essaie comme ça,
Sub JE_TESTE_2() Dim sSheet As String sSheet = "þuil1!" 'nom de l'onglet des données ActiveWorkbook.Names.Add Name:="b", RefersTo:=sSheet & Range("A1:B10").Address Range("E1") = [CountIf(Index(b, , 2), ">")] Range("E2") = [SumProduct((Index(b, , 1) = "A") * (Index(b, , 2)))] End Sub
isabelle
Oui. Je pense que le crochet équivaut à utiliser la fonction Evaluate("chaine à évaluer")
En général, j'arrive à évaluer des fonctions matricielles avec Evaluate, sauf en cas de formules matricielles imbriquées, auquel cas seul un calcul dans une cellule semble possible.
Florent.
Le 25/07/2015 03:36, isabelle a écrit :
bonjour steph,
essaie comme ça,
Sub JE_TESTE_2()
Dim sSheet As String
sSheet = "þuil1!" 'nom de l'onglet des données
ActiveWorkbook.Names.Add Name:="b", RefersTo:=sSheet &
Range("A1:B10").Address
Range("E1") = [CountIf(Index(b, , 2), ">")]
Range("E2") = [SumProduct((Index(b, , 1) = "A") * (Index(b, , 2)))]
End Sub
isabelle
Oui. Je pense que le crochet équivaut à utiliser la fonction
Evaluate("chaine à évaluer")
En général, j'arrive à évaluer des fonctions matricielles avec
Evaluate, sauf en cas de formules matricielles imbriquées, auquel
cas seul un calcul dans une cellule semble possible.
Sub JE_TESTE_2() Dim sSheet As String sSheet = "þuil1!" 'nom de l'onglet des données ActiveWorkbook.Names.Add Name:="b", RefersTo:=sSheet & Range("A1:B10").Address Range("E1") = [CountIf(Index(b, , 2), ">")] Range("E2") = [SumProduct((Index(b, , 1) = "A") * (Index(b, , 2)))] End Sub
isabelle
Oui. Je pense que le crochet équivaut à utiliser la fonction Evaluate("chaine à évaluer")
En général, j'arrive à évaluer des fonctions matricielles avec Evaluate, sauf en cas de formules matricielles imbriquées, auquel cas seul un calcul dans une cellule semble possible.
Florent.
isabelle
bonjour Florent,
je ne crois pas, à moins que le problème soit plus complexe...
http://www.cjoint.com/c/EGAdA572h7a
isabelle
Le 2015-07-25 18:44, GL a écrit :
sauf en cas de formules matricielles imbriquées, auquel cas seul un calcul dans une cellule semble possible.
Florent.
bonjour Florent,
je ne crois pas, à moins que le problème soit plus complexe...
http://www.cjoint.com/c/EGAdA572h7a
isabelle
Le 2015-07-25 18:44, GL a écrit :
sauf en cas de formules matricielles imbriquées, auquel
cas seul un calcul dans une cellule semble possible.