Re: [Q] [VBA] Formule VBA et ParamArray => comment sélectionner une zon=
4 réponses
JCF
Finalement j'ai basé ma macro sur ce noyau ci: :-)
Ca marche super bien, à un tel point que j'en arrive à des
fonctionnalités que je n'attendais pas!
>--------------------------------------------------
>Function IFAT2(Plage As Range)
>Dim i&, j&
> For i = 1 To Plage.Areas.Count
> For j = 1 To Plage.Areas(i).Count
> If IsNumeric(Plage.Areas(i).Cells(j).Value)
> Then IFAT2 = IFAT2 + Plage.Areas(i).Cells(j).Value
> Next j
> Next i
>End Function
>---------------------------------------------------
Pour mémoire, pour la faire fonctionner, il faut mettre deux parenthèses:
=IFAT2((A1:C3;B4:D8;H9))
Alors ma nouvelle question est la suivante: en fait cette fonction
attend des plages de cellules. Si jamais je veux lui entrer une valeur
directement à la saisie -par exemple: =IFAT2((A1:C3;B4:D8;12))- la
fonction m'affiche #value!.
Existe t-il une ruse syntaxique pour lui faire avaler le truc?
Merci par avance pour vos avis et suggestions,
Jean-Christophe
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Alain CROS
Bonjour
Ma réponse ne convenait pas ?
Alain CROS
<JCF> a écrit dans le message de news: 20040617072851405+
Finalement j'ai basé ma macro sur ce noyau ci: :-) Ca marche super bien, à un tel point que j'en arrive à des fonctionnalités que je n'attendais pas!
-------------------------------------------------- Function IFAT2(Plage As Range) Dim i&, j& For i = 1 To Plage.Areas.Count For j = 1 To Plage.Areas(i).Count If IsNumeric(Plage.Areas(i).Cells(j).Value) Then IFAT2 = IFAT2 + Plage.Areas(i).Cells(j).Value Next j Next i End Function ---------------------------------------------------
Pour mémoire, pour la faire fonctionner, il faut mettre deux parenthèses: =IFAT2((A1:C3;B4:D8;H9)) Alors ma nouvelle question est la suivante: en fait cette fonction attend des plages de cellules. Si jamais je veux lui entrer une valeur directement à la saisie -par exemple: =IFAT2((A1:C3;B4:D8;12))- la fonction m'affiche #value!. Existe t-il une ruse syntaxique pour lui faire avaler le truc? Merci par avance pour vos avis et suggestions, Jean-Christophe
Bonjour
Ma réponse ne convenait pas ?
Alain CROS
<JCF> a écrit dans le message de news: 20040617072851405+0200@news.microsoft.com...
Finalement j'ai basé ma macro sur ce noyau ci: :-)
Ca marche super bien, à un tel point que j'en arrive à des
fonctionnalités que je n'attendais pas!
--------------------------------------------------
Function IFAT2(Plage As Range)
Dim i&, j&
For i = 1 To Plage.Areas.Count
For j = 1 To Plage.Areas(i).Count
If IsNumeric(Plage.Areas(i).Cells(j).Value)
Then IFAT2 = IFAT2 + Plage.Areas(i).Cells(j).Value
Next j
Next i
End Function
---------------------------------------------------
Pour mémoire, pour la faire fonctionner, il faut mettre deux parenthèses:
=IFAT2((A1:C3;B4:D8;H9))
Alors ma nouvelle question est la suivante: en fait cette fonction
attend des plages de cellules. Si jamais je veux lui entrer une valeur
directement à la saisie -par exemple: =IFAT2((A1:C3;B4:D8;12))- la
fonction m'affiche #value!.
Existe t-il une ruse syntaxique pour lui faire avaler le truc?
Merci par avance pour vos avis et suggestions,
Jean-Christophe
<JCF> a écrit dans le message de news: 20040617072851405+
Finalement j'ai basé ma macro sur ce noyau ci: :-) Ca marche super bien, à un tel point que j'en arrive à des fonctionnalités que je n'attendais pas!
-------------------------------------------------- Function IFAT2(Plage As Range) Dim i&, j& For i = 1 To Plage.Areas.Count For j = 1 To Plage.Areas(i).Count If IsNumeric(Plage.Areas(i).Cells(j).Value) Then IFAT2 = IFAT2 + Plage.Areas(i).Cells(j).Value Next j Next i End Function ---------------------------------------------------
Pour mémoire, pour la faire fonctionner, il faut mettre deux parenthèses: =IFAT2((A1:C3;B4:D8;H9)) Alors ma nouvelle question est la suivante: en fait cette fonction attend des plages de cellules. Si jamais je veux lui entrer une valeur directement à la saisie -par exemple: =IFAT2((A1:C3;B4:D8;12))- la fonction m'affiche #value!. Existe t-il une ruse syntaxique pour lui faire avaler le truc? Merci par avance pour vos avis et suggestions, Jean-Christophe
Daniel.M
Salut Alain,
Moi, je l'ai bien aimée. ;-)
Une petite modif sur la fonction de façon à ce qu'elle puisse traiter des constantes matricielles comme =SOMMEPERSO2(A1;B1:B5;C1;{4;5;6;7})
'Alain CROS Function SommePerso2(Arg1, Optional Arg2 = 0, Optional Arg3 = 0, Optional Arg4 0) Dim rg As Range, Lacell As Range, LeArray, I, V As Variant LeArray = Array(Arg1, Arg2, Arg3, Arg4) For Each I In LeArray On Error Resume Next Set rg = I On Error GoTo 0 If rg Is Nothing Then If TypeName(I) Like "*()" Then For Each V In I SommePerso2 = SommePerso2 + V Next V Else SommePerso2 = SommePerso2 + I End If Else For Each Lacell In rg SommePerso2 = SommePerso2 + Lacell.Value Next End If Set rg = Nothing Next I End Function
Salutations,
Daniel M.
"Alain CROS" wrote in message news:%
Bonjour
Ma réponse ne convenait pas ?
Alain CROS
<JCF> a écrit dans le message de news: 20040617072851405+
Finalement j'ai basé ma macro sur ce noyau ci: :-) Ca marche super bien, à un tel point que j'en arrive à des fonctionnalités que je n'attendais pas!
-------------------------------------------------- Function IFAT2(Plage As Range) Dim i&, j& For i = 1 To Plage.Areas.Count For j = 1 To Plage.Areas(i).Count If IsNumeric(Plage.Areas(i).Cells(j).Value) Then IFAT2 = IFAT2 + Plage.Areas(i).Cells(j).Value Next j Next i End Function ---------------------------------------------------
Pour mémoire, pour la faire fonctionner, il faut mettre deux parenthèses: =IFAT2((A1:C3;B4:D8;H9)) Alors ma nouvelle question est la suivante: en fait cette fonction attend des plages de cellules. Si jamais je veux lui entrer une valeur directement à la saisie -par exemple: =IFAT2((A1:C3;B4:D8;12))- la fonction m'affiche #value!. Existe t-il une ruse syntaxique pour lui faire avaler le truc? Merci par avance pour vos avis et suggestions, Jean-Christophe
Salut Alain,
Moi, je l'ai bien aimée. ;-)
Une petite modif sur la fonction de façon à ce qu'elle puisse traiter des
constantes matricielles comme =SOMMEPERSO2(A1;B1:B5;C1;{4;5;6;7})
'Alain CROS
Function SommePerso2(Arg1, Optional Arg2 = 0, Optional Arg3 = 0, Optional Arg4 0)
Dim rg As Range, Lacell As Range, LeArray, I, V As Variant
LeArray = Array(Arg1, Arg2, Arg3, Arg4)
For Each I In LeArray
On Error Resume Next
Set rg = I
On Error GoTo 0
If rg Is Nothing Then
If TypeName(I) Like "*()" Then
For Each V In I
SommePerso2 = SommePerso2 + V
Next V
Else
SommePerso2 = SommePerso2 + I
End If
Else
For Each Lacell In rg
SommePerso2 = SommePerso2 + Lacell.Value
Next
End If
Set rg = Nothing
Next I
End Function
Salutations,
Daniel M.
"Alain CROS" <Personne@ICI> wrote in message
news:%23J96PlEVEHA.2360@TK2MSFTNGP10.phx.gbl...
Bonjour
Ma réponse ne convenait pas ?
Alain CROS
<JCF> a écrit dans le message de news:
20040617072851405+0200@news.microsoft.com...
Finalement j'ai basé ma macro sur ce noyau ci: :-)
Ca marche super bien, à un tel point que j'en arrive à des
fonctionnalités que je n'attendais pas!
--------------------------------------------------
Function IFAT2(Plage As Range)
Dim i&, j&
For i = 1 To Plage.Areas.Count
For j = 1 To Plage.Areas(i).Count
If IsNumeric(Plage.Areas(i).Cells(j).Value)
Then IFAT2 = IFAT2 + Plage.Areas(i).Cells(j).Value
Next j
Next i
End Function
---------------------------------------------------
Pour mémoire, pour la faire fonctionner, il faut mettre deux parenthèses:
=IFAT2((A1:C3;B4:D8;H9))
Alors ma nouvelle question est la suivante: en fait cette fonction
attend des plages de cellules. Si jamais je veux lui entrer une valeur
directement à la saisie -par exemple: =IFAT2((A1:C3;B4:D8;12))- la
fonction m'affiche #value!.
Existe t-il une ruse syntaxique pour lui faire avaler le truc?
Merci par avance pour vos avis et suggestions,
Jean-Christophe
Une petite modif sur la fonction de façon à ce qu'elle puisse traiter des constantes matricielles comme =SOMMEPERSO2(A1;B1:B5;C1;{4;5;6;7})
'Alain CROS Function SommePerso2(Arg1, Optional Arg2 = 0, Optional Arg3 = 0, Optional Arg4 0) Dim rg As Range, Lacell As Range, LeArray, I, V As Variant LeArray = Array(Arg1, Arg2, Arg3, Arg4) For Each I In LeArray On Error Resume Next Set rg = I On Error GoTo 0 If rg Is Nothing Then If TypeName(I) Like "*()" Then For Each V In I SommePerso2 = SommePerso2 + V Next V Else SommePerso2 = SommePerso2 + I End If Else For Each Lacell In rg SommePerso2 = SommePerso2 + Lacell.Value Next End If Set rg = Nothing Next I End Function
Salutations,
Daniel M.
"Alain CROS" wrote in message news:%
Bonjour
Ma réponse ne convenait pas ?
Alain CROS
<JCF> a écrit dans le message de news: 20040617072851405+
Finalement j'ai basé ma macro sur ce noyau ci: :-) Ca marche super bien, à un tel point que j'en arrive à des fonctionnalités que je n'attendais pas!
-------------------------------------------------- Function IFAT2(Plage As Range) Dim i&, j& For i = 1 To Plage.Areas.Count For j = 1 To Plage.Areas(i).Count If IsNumeric(Plage.Areas(i).Cells(j).Value) Then IFAT2 = IFAT2 + Plage.Areas(i).Cells(j).Value Next j Next i End Function ---------------------------------------------------
Pour mémoire, pour la faire fonctionner, il faut mettre deux parenthèses: =IFAT2((A1:C3;B4:D8;H9)) Alors ma nouvelle question est la suivante: en fait cette fonction attend des plages de cellules. Si jamais je veux lui entrer une valeur directement à la saisie -par exemple: =IFAT2((A1:C3;B4:D8;12))- la fonction m'affiche #value!. Existe t-il une ruse syntaxique pour lui faire avaler le truc? Merci par avance pour vos avis et suggestions, Jean-Christophe
JCF
Alain CROS wrote:
Bonjour
Ma rÈponse ne convenait pas ?
Si, si, Alain, elle marchait très bien aussi! Ca fait 1/2 heure que j'essaye de retrouver pourquoi j'avais pris l'autre, mais je ne me souviens même plus bien :-). Il me semble que c'est parce qu'elle était plus facile à adapter à ce que j'avais déjà écrit, (qui lui même était assez compliqué...) mais aussi parce que je comprenais mieux comment l'autre marchait (ben oui, je suis pas encore un pro de la programmation '-( ). Mais c'est vrai que je n'avais pas testé cet éventuel besoin de rentrer l'une des variables directement lorsque je sais qu'elle va être constante dans toute ma feuille de calcul. Parce qu'en fait j'ai toute une série de valeurs et d'arguments, dont la plupart sont optionnels, et ensuite ma formule doit les classer par genre pour en déduire ce qu'elle doit faire, enfin c'est un sacré binz, quoi!
A+ Jean-Christophe
Alain CROS wrote:
Bonjour
Ma rÈponse ne convenait pas ?
Si, si, Alain, elle marchait très bien aussi! Ca fait 1/2 heure que
j'essaye de retrouver pourquoi j'avais pris l'autre, mais je ne me
souviens même plus bien :-).
Il me semble que c'est parce qu'elle était plus facile à adapter à ce
que j'avais déjà écrit, (qui lui même était assez compliqué...) mais
aussi parce que je comprenais mieux comment l'autre marchait (ben oui,
je suis pas encore un pro de la programmation '-( ).
Mais c'est vrai que je n'avais pas testé cet éventuel besoin de rentrer
l'une des variables directement lorsque je sais qu'elle va être
constante dans toute ma feuille de calcul.
Parce qu'en fait j'ai toute une série de valeurs et d'arguments, dont la
plupart sont optionnels, et ensuite ma formule doit les classer par
genre pour en déduire ce qu'elle doit faire, enfin c'est un sacré binz,
quoi!
Si, si, Alain, elle marchait très bien aussi! Ca fait 1/2 heure que j'essaye de retrouver pourquoi j'avais pris l'autre, mais je ne me souviens même plus bien :-). Il me semble que c'est parce qu'elle était plus facile à adapter à ce que j'avais déjà écrit, (qui lui même était assez compliqué...) mais aussi parce que je comprenais mieux comment l'autre marchait (ben oui, je suis pas encore un pro de la programmation '-( ). Mais c'est vrai que je n'avais pas testé cet éventuel besoin de rentrer l'une des variables directement lorsque je sais qu'elle va être constante dans toute ma feuille de calcul. Parce qu'en fait j'ai toute une série de valeurs et d'arguments, dont la plupart sont optionnels, et ensuite ma formule doit les classer par genre pour en déduire ce qu'elle doit faire, enfin c'est un sacré binz, quoi!
A+ Jean-Christophe
JCF
Daniel.M wrote: Mais, Daniel, tu es reparti de la fonction d'Alain, pas de la variante de la tienne! Il n'y a pas moyen de faire accepter des entrées en direct à celle là? :
-------------------------------------------------- Function IFAT2(Plage As Range) Dim i&, j& For i = 1 To Plage.Areas.Count For j = 1 To Plage.Areas(i).Count If IsNumeric(Plage.Areas(i).Cells(j).Value) Then IFAT2 = IFAT2 + Plage.Areas(i).Cells(j).Value Next j Next i End Function ---------------------------------------------------
En fait, Alain, je crois que je me souviens pourquoi j'avais préféré celle-là: elle permet de sélectionner le nombre de cellules/plages que l'on veut, alors que si je ne m'abuse la tienne va bien attendre un nombre fini de cellules ou plages de cellules (4 telle qu'elle était écrite, bien sur adaptable). Or dans certains cas, si mes variables sont disposées dans le bon ordre en ligne et sur une ou plusieurs colonnes, il y a moyen d'entrer les 17 variables en une seule sélection de plage de cellules, ce qui est, je dois bien le dire, le pied!!!
A+ Jean-Christophe
Une petite modif sur la fonction de faÁon ? ce qu'elle puisse traiter des constantes matricielles comme =SOMMEPERSO2(A1;B1:B5;C1;{4;5;6;7}) Function SommePerso2(Arg1, Optional Arg2 = 0, Optional Arg3 = 0, Optional Arg4 = 0) Dim rg As Range, Lacell As Range, LeArray, I, V As Variant LeArray = Array(Arg1, Arg2, Arg3, Arg4) For Each I In LeArray On Error Resume Next Set rg = I On Error GoTo 0 If rg Is Nothing Then If TypeName(I) Like "*()" Then For Each V In I SommePerso2 = SommePerso2 + V Next V Else SommePerso2 = SommePerso2 + I End If Else For Each Lacell In rg SommePerso2 = SommePerso2 + Lacell.Value Next End If Set rg = Nothing Next I End Function
Salutations,
Daniel M.
Daniel.M wrote:
Mais, Daniel, tu es reparti de la fonction d'Alain, pas de la variante
de la tienne!
Il n'y a pas moyen de faire accepter des entrées en direct à celle là? :
--------------------------------------------------
Function IFAT2(Plage As Range)
Dim i&, j&
For i = 1 To Plage.Areas.Count
For j = 1 To Plage.Areas(i).Count
If IsNumeric(Plage.Areas(i).Cells(j).Value)
Then IFAT2 = IFAT2 + Plage.Areas(i).Cells(j).Value
Next j
Next i
End Function
---------------------------------------------------
En fait, Alain, je crois que je me souviens pourquoi j'avais préféré
celle-là: elle permet de sélectionner le nombre de cellules/plages que
l'on veut, alors que si je ne m'abuse la tienne va bien attendre un
nombre fini de cellules ou plages de cellules (4 telle qu'elle était
écrite, bien sur adaptable). Or dans certains cas, si mes variables sont
disposées dans le bon ordre en ligne et sur une ou plusieurs colonnes,
il y a moyen d'entrer les 17 variables en une seule sélection de plage
de cellules, ce qui est, je dois bien le dire, le pied!!!
A+
Jean-Christophe
Une petite modif sur la fonction de faÁon ? ce qu'elle puisse traiter
des constantes matricielles comme =SOMMEPERSO2(A1;B1:B5;C1;{4;5;6;7})
Function SommePerso2(Arg1, Optional Arg2 = 0, Optional Arg3 = 0,
Optional Arg4 = 0) Dim rg As Range, Lacell As Range, LeArray, I, V As
Variant LeArray = Array(Arg1, Arg2, Arg3, Arg4) For Each I In LeArray
On Error Resume Next
Set rg = I
On Error GoTo 0
If rg Is Nothing Then
If TypeName(I) Like "*()" Then
For Each V In I
SommePerso2 = SommePerso2 + V
Next V
Else
SommePerso2 = SommePerso2 + I
End If
Else
For Each Lacell In rg
SommePerso2 = SommePerso2 + Lacell.Value
Next
End If
Set rg = Nothing
Next I
End Function
Daniel.M wrote: Mais, Daniel, tu es reparti de la fonction d'Alain, pas de la variante de la tienne! Il n'y a pas moyen de faire accepter des entrées en direct à celle là? :
-------------------------------------------------- Function IFAT2(Plage As Range) Dim i&, j& For i = 1 To Plage.Areas.Count For j = 1 To Plage.Areas(i).Count If IsNumeric(Plage.Areas(i).Cells(j).Value) Then IFAT2 = IFAT2 + Plage.Areas(i).Cells(j).Value Next j Next i End Function ---------------------------------------------------
En fait, Alain, je crois que je me souviens pourquoi j'avais préféré celle-là: elle permet de sélectionner le nombre de cellules/plages que l'on veut, alors que si je ne m'abuse la tienne va bien attendre un nombre fini de cellules ou plages de cellules (4 telle qu'elle était écrite, bien sur adaptable). Or dans certains cas, si mes variables sont disposées dans le bon ordre en ligne et sur une ou plusieurs colonnes, il y a moyen d'entrer les 17 variables en une seule sélection de plage de cellules, ce qui est, je dois bien le dire, le pied!!!
A+ Jean-Christophe
Une petite modif sur la fonction de faÁon ? ce qu'elle puisse traiter des constantes matricielles comme =SOMMEPERSO2(A1;B1:B5;C1;{4;5;6;7}) Function SommePerso2(Arg1, Optional Arg2 = 0, Optional Arg3 = 0, Optional Arg4 = 0) Dim rg As Range, Lacell As Range, LeArray, I, V As Variant LeArray = Array(Arg1, Arg2, Arg3, Arg4) For Each I In LeArray On Error Resume Next Set rg = I On Error GoTo 0 If rg Is Nothing Then If TypeName(I) Like "*()" Then For Each V In I SommePerso2 = SommePerso2 + V Next V Else SommePerso2 = SommePerso2 + I End If Else For Each Lacell In rg SommePerso2 = SommePerso2 + Lacell.Value Next End If Set rg = Nothing Next I End Function