OVH Cloud OVH Cloud

Argument d'un fonction

8 réponses
Avatar
Sylfanie
Bonjour,


Pour une fonction appel=E9e =E0 partir d'une feuille de calcul avec
comme argument une plage de cellules, est il possible de recevoir
directement cette plage dans un tableau (d'entier par exemple) sans
passer par le type variant.

Je m'explique :

Function zaza(UnePlage)
.=2E.
Ici UnePlage est un variant/object/range. Pour l'avoir sous la forme
d'un tableau (variant) je peux faire

Dim UnTableau
UnTableau=3DUnePlage

J'aimerai pouvoir dimensionner UnTableau ou UnePlage directement en
tableau d'entier, sans avoir =E0 balayer UnePlage avec une boucle.

Function zaza(UnePlage() as integer)
Ou
Function zaza(UnePlage)
Dim UnTableau() as integer
UnTableau=3DUnePlage

Aucun des 2 ne fonctionnent.

Merci de votre aide.

8 réponses

Avatar
JB
Bonjour,

http://cjoint.com/?gCnGEATlTN

Function RechTous(v, champRech As Range, ChampRetour As Range)
a = champRech ' transfert de la plage dans le tableau a
temp = ""
For i = 1 To champRech.Count
If a(i, 1) = v Then
temp = temp & ChampRetour(i) & " "
End If
Next i
RechTous = temp
End Function

Cordialement JB


Bonjour,


Pour une fonction appelée à partir d'une feuille de calcul avec
comme argument une plage de cellules, est il possible de recevoir
directement cette plage dans un tableau (d'entier par exemple) sans
passer par le type variant.

Je m'explique :

Function zaza(UnePlage)
...
Ici UnePlage est un variant/object/range. Pour l'avoir sous la forme
d'un tableau (variant) je peux faire

Dim UnTableau
UnTableau=UnePlage

J'aimerai pouvoir dimensionner UnTableau ou UnePlage directement en
tableau d'entier, sans avoir à balayer UnePlage avec une boucle.

Function zaza(UnePlage() as integer)
Ou
Function zaza(UnePlage)
Dim UnTableau() as integer
UnTableau=UnePlage

Aucun des 2 ne fonctionnent.

Merci de votre aide.


Avatar
Sylfanie

Bonjour,

...


Merci, mais n'existe-il pas de solution directe, sans avoir a balayé
le range avec une boucle ?

Avatar
JB
a = champRech transfère le champ ChampRech directement dans le
tableau a()

JB




Bonjour,

...


Merci, mais n'existe-il pas de solution directe, sans avoir a balayé
le range avec une boucle ?



Avatar
Sylfanie

a = champRech transfère le champ ChampRech directement dans le
tableau a()



Encore une fois merci.

Mais il semble que vous ne prenez pas le temps de lire les messages.
J'indique dans mon premier post que je connais ces solutions,
d'affectation de ou de boucle.

Ma question est champRech peut-il être directement un tableau d'entier
ou de double, plutôt qu'un objet Range ?

Merci de votre aide.

Avatar
JB
Sub essai()
Dim temp(10) As Double
For i = 1 To 10
temp(i) = Rnd
Next i
Call tri(temp, 1, 10)
For i = 1 To 10: MsgBox temp(i): Next
End Sub

Sub tri(a() As Double, gauc, droi) ' Quick sort
ref = a((gauc + droi) 2)
g = gauc: d = droi
Do
Do While a(g) < ref: g = g + 1: Loop
Do While ref < a(d): d = d - 1: Loop
If g <= d Then
temp = a(g): a(g) = a(d): a(d) = temp
g = g + 1: d = d - 1
End If
Loop While g <= d
If g < droi Then Call tri(a, g, droi)
If gauc < d Then Call tri(a, gauc, d)
End Sub

JB





a = champRech transfère le champ ChampRech directement dans le
tableau a()



Encore une fois merci.

Mais il semble que vous ne prenez pas le temps de lire les messages.
J'indique dans mon premier post que je connais ces solutions,
d'affectation de ou de boucle.

Ma question est champRech peut-il être directement un tableau d'entier
ou de double, plutôt qu'un objet Range ?

Merci de votre aide.



Avatar
Sylfanie

Sub essai()


Merci de votre réponse.

Ma question, comme je l'ai précisé dans mon premier post porte sur
l'appel dune fonction à partir d'une feuille de calcul pas d'une
macro.

Est-il possible de recevoir en argument d'une fonction appelée à
partir d'une feuille de calcul une plage de cellule dans un tableau
d'entier ou de double ?

Merci de votre aide.

Avatar
JB
Le champ reçu en argument peut être traité directement comme un
tableau (peu performant).Il est préférable de transférer dans un
tableau en MC.

http://cjoint.com/?gDtRtaVxdO.

Function TotalChamp(champ As Range)
temp = 0
For i = 1 To champ.Count
temp = temp + champ(i)
Next i
TotalChamp = temp
End Function

JB


Sub essai()


Merci de votre réponse.

Ma question, comme je l'ai précisé dans mon premier post porte sur
l'appel dune fonction à partir d'une feuille de calcul pas d'une
macro.

Est-il possible de recevoir en argument d'une fonction appelée à
partir d'une feuille de calcul une plage de cellule dans un tableau
d'entier ou de double ?

Merci de votre aide.



Avatar
Sylfanie

Le champ reçu en argument peut être traité directement comme un
tableau (peu performant).Il est préférable de transférer dans un
tableau en MC.



Oui effectivement car ce n'est pas un tableau mais un objet range. Pour
être plus performant, il faudrait le recevoir en format d'entier ou de
double.

Est-ce possible ?