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

Re: [Q] [VBA] Formule VBA et ParamArray => comment sélectionner une zon=

4 réponses
Avatar
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

4 réponses

Avatar
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



Avatar
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







Avatar
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

Avatar
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.