je dois faire une grosse erreur mais je ne la vois pas...
coeff est une matrice et je voudrais recuperer sa dimension max
pour la mettre en limite sup dans l'incrementation d'une boucle mais ubound
renvoie le message "#valeur!"... pourquoi?
Function limite(coeff)
limite = UBound(coeff)
End Function
une autre petite question..
(dans une function) la boucle "for next" fonctionne bien
...
For n = 1 To 18
If (coeff(n, 1) = co1 And coeff(n, 2) = co2 And coeff(n, 3) = co3 And
coeff(n, 4) = co4) Then
coeffn = coeff(n, 5).Value
coeffk = coeff(n, 6).Value
Else
End If
Next n
...
.....mais la boucle "for each next" ne marche pas (dans une function)
...
For each n in coeff
If (coeff(n, 1) = co1 And coeff(n, 2) = co2 And coeff(n, 3) = co3 And
coeff(n, 4) = co4) Then
coeffn = coeff(n, 5).Value
coeffk = coeff(n, 6).Value
Else
End If
Next
...
coeff est toujours une matrice (est-ce que for each ne marche que pour les
collections?)
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
denis P
Tableaux et fonctions matricielles
Si une fonction doit recevoir un tableau de valeur, l'argument doit être déclarer de type Variant (ou, ce qui revient au même, sans indication de type).
- Utilisation d'une matrice de constantes : =MAFONC({1.2.3;4.5.6})
Par exemple, une fonction pourrait accepter indifféremment une plage de cellules ouun tableau comme argument : =MAFONC(A1:A5) ou =MAFONC({1;3;2;5;9}).Comme il s'agit de deux types de données différents, la fonction devra tester si l'argument transmis est une référence ou un tableau, et adapter son traitement en fonction du résultat de ce test. Ce point sera traitdans le paragraphe suivant.
L'intérêt principal des tableaux dans les fonctions VBA de feuille de calcul réside dans la possibilité de créer des fonctions matricielles, telles que les fonction intégrées TRANSPOSE ou INVERSEMAT.
Pour construire une fonction matricielle VBA, il suffit d'affecter un tableau la valeur de retour. La fonction suivante construit par exemple un tableau contenant les sommes cumul es de la plage donnée enargument : cellule1, cellule1 + cellule2, ..., somme(cellule1 celluleN) :
Function SOMME_CUMUL(Plage As Range)
Dim Tableau Dim Cumul As Double Dim I As Integer, J As Integer
Tableau = Plage
For I = 1 To UBound(Tableau, 1) For J = 1 To UBound(Tableau, 2) Cumul = Cumul + Tableau(I, J) Tableau(I, J) = Cumul Next J Next I
SOMME_CUMUL = Tableau
End Function
Si la plage A1:A10 contient les entiers de 10 à 19, {=SOMME_CUMUL(A1:A10)} saisi sous forme matricielle dans une plage verticale de 10 cellules renvoie {10;21;33;46;60;75;91;108;126;145}.
Comme la fonction retourne un tableau de valeurs, celui-ci peut être transmis à d'autres fonctions nécessitant ce type d'argument,sans saisie matricielle.Par exemple, =EQUIV(100;SOMME_CUMUL(A1:A50)) renvoie la position dans la plage A1:A50 du premier élément à partir duquel la somme cumulée est supérieure ou égale à 100. Il est possible d'affecter à la valeur de retour d'une fonction VBA matricielle touttype de tableau, qu'il s'agisse comme ici de tableaux contenus dans des variants,de tableaux de taille fixe, ou de tableaux dynamiques ajustés par des instructions ReDim. denis p. (inspirer de LL)"Jiéme" a écrit dans le message de news:41c91a23$0$26522$
bonjour a tous,
je dois faire une grosse erreur mais je ne la vois pas... coeff est une matrice et je voudrais recuperer sa dimension max pour la mettre en limite sup dans l'incrementation d'une boucle mais ubound
renvoie le message "#valeur!"... pourquoi?
Function limite(coeff) limite = UBound(coeff) End Function
une autre petite question.. (dans une function) la boucle "for next" fonctionne bien
... For n = 1 To 18 If (coeff(n, 1) = co1 And coeff(n, 2) = co2 And coeff(n, 3) = co3 And coeff(n, 4) = co4) Then coeffn = coeff(n, 5).Value coeffk = coeff(n, 6).Value Else End If Next n ...
.....mais la boucle "for each next" ne marche pas (dans une function)
... For each n in coeff If (coeff(n, 1) = co1 And coeff(n, 2) = co2 And coeff(n, 3) = co3 And coeff(n, 4) = co4) Then coeffn = coeff(n, 5).Value coeffk = coeff(n, 6).Value Else End If Next ...
coeff est toujours une matrice (est-ce que for each ne marche que pour les collections?)
Merci d'avance et bonnes fetes
Tableaux et fonctions matricielles
Si une fonction doit recevoir un tableau de valeur, l'argument doit
être déclarer de type Variant (ou, ce qui revient au même, sans indication
de type).
- Utilisation d'une matrice de constantes : =MAFONC({1.2.3;4.5.6})
Par exemple, une fonction pourrait accepter indifféremment une plage de
cellules ouun tableau comme argument : =MAFONC(A1:A5) ou
=MAFONC({1;3;2;5;9}).Comme il s'agit de deux types de données différents, la
fonction devra tester si l'argument transmis est une
référence ou un tableau, et adapter son traitement en fonction du résultat
de ce test. Ce point sera traitdans le paragraphe suivant.
L'intérêt principal des tableaux dans les fonctions VBA de feuille de calcul
réside dans la possibilité de
créer des fonctions matricielles, telles que les fonction intégrées
TRANSPOSE ou INVERSEMAT.
Pour construire une fonction matricielle VBA, il suffit d'affecter un
tableau la valeur de retour. La fonction suivante construit par
exemple un tableau contenant les sommes cumul es de la plage donnée
enargument : cellule1, cellule1 + cellule2, ..., somme(cellule1 celluleN) :
Function SOMME_CUMUL(Plage As Range)
Dim Tableau
Dim Cumul As Double
Dim I As Integer, J As Integer
Tableau = Plage
For I = 1 To UBound(Tableau, 1)
For J = 1 To UBound(Tableau, 2)
Cumul = Cumul + Tableau(I, J)
Tableau(I, J) = Cumul
Next J
Next I
SOMME_CUMUL = Tableau
End Function
Si la plage A1:A10 contient les entiers de 10 à 19,
{=SOMME_CUMUL(A1:A10)} saisi sous forme matricielle dans une plage verticale
de 10 cellules renvoie
{10;21;33;46;60;75;91;108;126;145}.
Comme la fonction retourne un tableau de valeurs, celui-ci peut être
transmis à d'autres fonctions nécessitant ce type d'argument,sans saisie
matricielle.Par exemple, =EQUIV(100;SOMME_CUMUL(A1:A50)) renvoie la position
dans la plage A1:A50 du premier élément à partir duquel la somme cumulée est
supérieure ou égale à 100. Il est possible d'affecter à la valeur de retour
d'une fonction VBA matricielle touttype de tableau, qu'il s'agisse comme ici
de tableaux contenus dans des variants,de tableaux de taille fixe, ou de
tableaux dynamiques ajustés par des instructions ReDim.
denis p. (inspirer de LL)"Jiéme" <jm.grolet@free.fr> a écrit dans le
message de news:41c91a23$0$26522$626a14ce@news.free.fr...
bonjour a tous,
je dois faire une grosse erreur mais je ne la vois pas...
coeff est une matrice et je voudrais recuperer sa dimension max
pour la mettre en limite sup dans l'incrementation d'une boucle mais
ubound
renvoie le message "#valeur!"... pourquoi?
Function limite(coeff)
limite = UBound(coeff)
End Function
une autre petite question..
(dans une function) la boucle "for next" fonctionne bien
...
For n = 1 To 18
If (coeff(n, 1) = co1 And coeff(n, 2) = co2 And coeff(n, 3) = co3 And
coeff(n, 4) = co4) Then
coeffn = coeff(n, 5).Value
coeffk = coeff(n, 6).Value
Else
End If
Next n
...
.....mais la boucle "for each next" ne marche pas (dans une function)
...
For each n in coeff
If (coeff(n, 1) = co1 And coeff(n, 2) = co2 And coeff(n, 3) = co3 And
coeff(n, 4) = co4) Then
coeffn = coeff(n, 5).Value
coeffk = coeff(n, 6).Value
Else
End If
Next
...
coeff est toujours une matrice (est-ce que for each ne marche que pour les
collections?)
Si une fonction doit recevoir un tableau de valeur, l'argument doit être déclarer de type Variant (ou, ce qui revient au même, sans indication de type).
- Utilisation d'une matrice de constantes : =MAFONC({1.2.3;4.5.6})
Par exemple, une fonction pourrait accepter indifféremment une plage de cellules ouun tableau comme argument : =MAFONC(A1:A5) ou =MAFONC({1;3;2;5;9}).Comme il s'agit de deux types de données différents, la fonction devra tester si l'argument transmis est une référence ou un tableau, et adapter son traitement en fonction du résultat de ce test. Ce point sera traitdans le paragraphe suivant.
L'intérêt principal des tableaux dans les fonctions VBA de feuille de calcul réside dans la possibilité de créer des fonctions matricielles, telles que les fonction intégrées TRANSPOSE ou INVERSEMAT.
Pour construire une fonction matricielle VBA, il suffit d'affecter un tableau la valeur de retour. La fonction suivante construit par exemple un tableau contenant les sommes cumul es de la plage donnée enargument : cellule1, cellule1 + cellule2, ..., somme(cellule1 celluleN) :
Function SOMME_CUMUL(Plage As Range)
Dim Tableau Dim Cumul As Double Dim I As Integer, J As Integer
Tableau = Plage
For I = 1 To UBound(Tableau, 1) For J = 1 To UBound(Tableau, 2) Cumul = Cumul + Tableau(I, J) Tableau(I, J) = Cumul Next J Next I
SOMME_CUMUL = Tableau
End Function
Si la plage A1:A10 contient les entiers de 10 à 19, {=SOMME_CUMUL(A1:A10)} saisi sous forme matricielle dans une plage verticale de 10 cellules renvoie {10;21;33;46;60;75;91;108;126;145}.
Comme la fonction retourne un tableau de valeurs, celui-ci peut être transmis à d'autres fonctions nécessitant ce type d'argument,sans saisie matricielle.Par exemple, =EQUIV(100;SOMME_CUMUL(A1:A50)) renvoie la position dans la plage A1:A50 du premier élément à partir duquel la somme cumulée est supérieure ou égale à 100. Il est possible d'affecter à la valeur de retour d'une fonction VBA matricielle touttype de tableau, qu'il s'agisse comme ici de tableaux contenus dans des variants,de tableaux de taille fixe, ou de tableaux dynamiques ajustés par des instructions ReDim. denis p. (inspirer de LL)"Jiéme" a écrit dans le message de news:41c91a23$0$26522$
bonjour a tous,
je dois faire une grosse erreur mais je ne la vois pas... coeff est une matrice et je voudrais recuperer sa dimension max pour la mettre en limite sup dans l'incrementation d'une boucle mais ubound
renvoie le message "#valeur!"... pourquoi?
Function limite(coeff) limite = UBound(coeff) End Function
une autre petite question.. (dans une function) la boucle "for next" fonctionne bien
... For n = 1 To 18 If (coeff(n, 1) = co1 And coeff(n, 2) = co2 And coeff(n, 3) = co3 And coeff(n, 4) = co4) Then coeffn = coeff(n, 5).Value coeffk = coeff(n, 6).Value Else End If Next n ...
.....mais la boucle "for each next" ne marche pas (dans une function)
... For each n in coeff If (coeff(n, 1) = co1 And coeff(n, 2) = co2 And coeff(n, 3) = co3 And coeff(n, 4) = co4) Then coeffn = coeff(n, 5).Value coeffk = coeff(n, 6).Value Else End If Next ...
coeff est toujours une matrice (est-ce que for each ne marche que pour les collections?)
Merci d'avance et bonnes fetes
Daniel.M
Salut Jième,
Pour ta 2e question, si Coeff correspond à une plage, alors:
For Each n In coeff.Rows If n.Cells(1, 1) = co1 And n.Cells(1,2) = co2 ... Then
Else
End If Next n
Salutations,
Daniel M.
"Jiéme" wrote in message news:41c91a23$0$26522$
bonjour a tous,
je dois faire une grosse erreur mais je ne la vois pas... coeff est une matrice et je voudrais recuperer sa dimension max pour la mettre en limite sup dans l'incrementation d'une boucle mais ubound renvoie le message "#valeur!"... pourquoi?
Function limite(coeff) limite = UBound(coeff) End Function
une autre petite question.. (dans une function) la boucle "for next" fonctionne bien
... For n = 1 To 18 If (coeff(n, 1) = co1 And coeff(n, 2) = co2 And coeff(n, 3) = co3 And coeff(n, 4) = co4) Then coeffn = coeff(n, 5).Value coeffk = coeff(n, 6).Value Else End If Next n ...
.....mais la boucle "for each next" ne marche pas (dans une function)
... For each n in coeff If (coeff(n, 1) = co1 And coeff(n, 2) = co2 And coeff(n, 3) = co3 And coeff(n, 4) = co4) Then coeffn = coeff(n, 5).Value coeffk = coeff(n, 6).Value Else End If Next ...
coeff est toujours une matrice (est-ce que for each ne marche que pour les collections?)
Merci d'avance et bonnes fetes
Salut Jième,
Pour ta 2e question, si Coeff correspond à une plage, alors:
For Each n In coeff.Rows
If n.Cells(1, 1) = co1 And n.Cells(1,2) = co2 ... Then
Else
End If
Next n
Salutations,
Daniel M.
"Jiéme" <jm.grolet@free.fr> wrote in message
news:41c91a23$0$26522$626a14ce@news.free.fr...
bonjour a tous,
je dois faire une grosse erreur mais je ne la vois pas...
coeff est une matrice et je voudrais recuperer sa dimension max
pour la mettre en limite sup dans l'incrementation d'une boucle mais ubound
renvoie le message "#valeur!"... pourquoi?
Function limite(coeff)
limite = UBound(coeff)
End Function
une autre petite question..
(dans une function) la boucle "for next" fonctionne bien
...
For n = 1 To 18
If (coeff(n, 1) = co1 And coeff(n, 2) = co2 And coeff(n, 3) = co3 And
coeff(n, 4) = co4) Then
coeffn = coeff(n, 5).Value
coeffk = coeff(n, 6).Value
Else
End If
Next n
...
.....mais la boucle "for each next" ne marche pas (dans une function)
...
For each n in coeff
If (coeff(n, 1) = co1 And coeff(n, 2) = co2 And coeff(n, 3) = co3 And
coeff(n, 4) = co4) Then
coeffn = coeff(n, 5).Value
coeffk = coeff(n, 6).Value
Else
End If
Next
...
coeff est toujours une matrice (est-ce que for each ne marche que pour les
collections?)
Pour ta 2e question, si Coeff correspond à une plage, alors:
For Each n In coeff.Rows If n.Cells(1, 1) = co1 And n.Cells(1,2) = co2 ... Then
Else
End If Next n
Salutations,
Daniel M.
"Jiéme" wrote in message news:41c91a23$0$26522$
bonjour a tous,
je dois faire une grosse erreur mais je ne la vois pas... coeff est une matrice et je voudrais recuperer sa dimension max pour la mettre en limite sup dans l'incrementation d'une boucle mais ubound renvoie le message "#valeur!"... pourquoi?
Function limite(coeff) limite = UBound(coeff) End Function
une autre petite question.. (dans une function) la boucle "for next" fonctionne bien
... For n = 1 To 18 If (coeff(n, 1) = co1 And coeff(n, 2) = co2 And coeff(n, 3) = co3 And coeff(n, 4) = co4) Then coeffn = coeff(n, 5).Value coeffk = coeff(n, 6).Value Else End If Next n ...
.....mais la boucle "for each next" ne marche pas (dans une function)
... For each n in coeff If (coeff(n, 1) = co1 And coeff(n, 2) = co2 And coeff(n, 3) = co3 And coeff(n, 4) = co4) Then coeffn = coeff(n, 5).Value coeffk = coeff(n, 6).Value Else End If Next ...
coeff est toujours une matrice (est-ce que for each ne marche que pour les collections?)