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

transfert tableau vers fonction

4 réponses
Avatar
Sergio
bonsoir a tous

voila mon probleme:
je n'arrive pas à transférer un tableau a 2 dimensions
dans une fonction.
voila ce que je fais(en résumé) dans un module.
je fais:

dim Montableau() as integer
(juste après option explicite).

puis j'ai une procedure qui me remplit
un tableau a 2 dimensions.

redim Montableau(nb1,nb2) as integer

Montableau(x,y) = valeur1 etc..
(le tableau est correctement rempli !)

je fais:
call MaFonction

puis:
'xxxxxxxxxxxxxxxxxxxxxxxxx
function MaFonction() as integer
Mafonction(x,y) = tableau(x,y)
end function
'xxxxxxxxxxxxxxxxxxxxxxxxx
il faut surement mettre quelque chose entre les
parenthèses après "MaFonction" mais j'ai tout éssayé
j'ai eu droit à tous les messages d'erreur existants
alors si quelqu'un peut m'aiguiller !

A+
Sergio

4 réponses

Avatar
J-Pierre
Bonsoir Sergio

Mafonction n'est pas un tableau, tu peux au maximum retourner une valeur:

Mafonction = tableau(x,y)

Mais ça implique que MaFonction connaisse x et y (ou alors, se sont des variables globales ?):

function MaFonction(x as integer, y as integer) as integer
Mafonction = tableau(x,y)
end function

Mais si c'est ça ton problème, MaFonction ne sert à rien, tu peux mettre ça directement dans ton code.
MonChamp = tableau(x,y) au lieu de
MonChamp = MaFonction(x,y)

Sans doute ai-je mal compris.

J-Pierre

"Sergio" a écrit dans le message de news:
bonsoir a tous

voila mon probleme:
je n'arrive pas à transférer un tableau a 2 dimensions
dans une fonction.
voila ce que je fais(en résumé) dans un module.
je fais:

dim Montableau() as integer
(juste après option explicite).

puis j'ai une procedure qui me remplit
un tableau a 2 dimensions.

redim Montableau(nb1,nb2) as integer

Montableau(x,y) = valeur1 etc..
(le tableau est correctement rempli !)

je fais:
call MaFonction

puis:
'xxxxxxxxxxxxxxxxxxxxxxxxx
function MaFonction() as integer
Mafonction(x,y) = tableau(x,y)
end function
'xxxxxxxxxxxxxxxxxxxxxxxxx
il faut surement mettre quelque chose entre les
parenthèses après "MaFonction" mais j'ai tout éssayé
j'ai eu droit à tous les messages d'erreur existants
alors si quelqu'un peut m'aiguiller !

A+
Sergio






Avatar
Sergio
bonsoir J-Pierre

mon problème initial , c'est que je calcule un tas de variables que je mets
dans
un tableau (plutôt 6 tableaux) de environ (60, 10)
et je voudrais sortir toutes ces valeurs (+ de 3000) dans un état

donc dans l'état, je dois appeler une fonction à chaque valeur
pour remplir une zone de texte... 3000 fonctions = pas question !
il me faut donc une fonction sous forme de tableau.

je ne peux pas appeler directement un tableau car je n'y ai pas accés
dans l'état

Benoit Compoint m'a dit:
Comme votre tableau a apparemment deux dimensions, vous devrez créer une
fonction VBA qui admette deux paramètres.
Vous appellerez cette fonction à partir de vos contrôles zones de texte
avec

la syntaxe suivante :
=MaFonction(3;2)
pour obtenir la valeur varyNB(3,2) de votre tableau.


et donc je veux bien le croire
et j'essaie
et j'essaie
et j'essaie

A+
Sergio


"J-Pierre" a écrit dans le message de
news:

Bonsoir Sergio

Mafonction n'est pas un tableau, tu peux au maximum retourner une valeur:

Mafonction = tableau(x,y)

Mais ça implique que MaFonction connaisse x et y (ou alors, se sont des
variables globales ?):


function MaFonction(x as integer, y as integer) as integer
Mafonction = tableau(x,y)
end function

Mais si c'est ça ton problème, MaFonction ne sert à rien, tu peux mettre
ça directement dans ton code.

MonChamp = tableau(x,y) au lieu de
MonChamp = MaFonction(x,y)

Sans doute ai-je mal compris.

J-Pierre

"Sergio" a écrit dans le message de news:


bonsoir a tous

voila mon probleme:
je n'arrive pas à transférer un tableau a 2 dimensions
dans une fonction.
voila ce que je fais(en résumé) dans un module.
je fais:

dim Montableau() as integer
(juste après option explicite).

puis j'ai une procedure qui me remplit
un tableau a 2 dimensions.

redim Montableau(nb1,nb2) as integer

Montableau(x,y) = valeur1 etc..
(le tableau est correctement rempli !)

je fais:
call MaFonction

puis:
'xxxxxxxxxxxxxxxxxxxxxxxxx
function MaFonction() as integer
Mafonction(x,y) = tableau(x,y)
end function
'xxxxxxxxxxxxxxxxxxxxxxxxx
il faut surement mettre quelque chose entre les
parenthèses après "MaFonction" mais j'ai tout éssayé
j'ai eu droit à tous les messages d'erreur existants
alors si quelqu'un peut m'aiguiller !

A+
Sergio










Avatar
J-Pierre
Sergio,

Solution possible:

avant d'ouvrir ton état, enregistrer les valeurs de tous tes tableaux dans une table. Si on prend l'exemple de ton premier tableau
(60,10), la définition de ta table comprendra 10 champs. La table aura aussi deux champs, une ID et une date.

L'ID est unique (voir ci-après) , la date est la date de création, comme ça, quand tu ouvres ta base MDB, tu supprimes toutes les
lignes qui ne sont pas du jour.
Pour créer tes lignes, tu écris une fonction qui itérera sur ton tableau pour faire un INSERT, si on reprends ton exemple, ta table
comprendra 60 lignes.

Pour obtenir une ID unique, voilà un extrait de fonction qui insère une ligne dans une table et récupère l'autoNum. La table
comprend 3 champs:
T911_sequence autonum
T911_texte texte
T911_date valeur par défaut date()
----------------------------------------------
Function GetUniqueId(text) As Long

Dim strgSQL As String
Dim WrecordsAffected As Long
Dim cnn As New ADODB.Connection
Dim rst As New ADODB.Recordset

Set cnn = CurrentProject.Connection

strgSQL = "SELECT TOP 1 T911_unique_id.* FROM T911_unique_id;"
rst.Open strgSQL, cnn, adOpenKeyset, adLockOptimistic

rst.AddNew
rst!T911_texte = text

On Error Resume Next

rst.Update

If cnn.Errors.Count > 0 Then
rst.Close
cnn.RollbackTrans
cnn.Close
Set cnn = Nothing
On Error GoTo 0
GetUniqueId = 0
Exit Function
End If

On Error GoTo 0
GetUniqueId = rst!T911_sequence

rst.Close
cnn.Close
Set cnn = Nothing

End Function
----------------------------------------------------
Enfin, si tu deuxième dimension est variable, reviens nous voir en donnant plus de détails

J-Pierre



"Sergio" a écrit dans le message de news: ua9#
bonsoir J-Pierre

mon problème initial , c'est que je calcule un tas de variables que je mets
dans
un tableau (plutôt 6 tableaux) de environ (60, 10)
et je voudrais sortir toutes ces valeurs (+ de 3000) dans un état

donc dans l'état, je dois appeler une fonction à chaque valeur
pour remplir une zone de texte... 3000 fonctions = pas question !
il me faut donc une fonction sous forme de tableau.

je ne peux pas appeler directement un tableau car je n'y ai pas accés
dans l'état

Benoit Compoint m'a dit:
Comme votre tableau a apparemment deux dimensions, vous devrez créer une
fonction VBA qui admette deux paramètres.
Vous appellerez cette fonction à partir de vos contrôles zones de texte
avec

la syntaxe suivante :
=MaFonction(3;2)
pour obtenir la valeur varyNB(3,2) de votre tableau.


et donc je veux bien le croire
et j'essaie
et j'essaie
et j'essaie

A+
Sergio


"J-Pierre" a écrit dans le message de
news:

Bonsoir Sergio

Mafonction n'est pas un tableau, tu peux au maximum retourner une valeur:

Mafonction = tableau(x,y)

Mais ça implique que MaFonction connaisse x et y (ou alors, se sont des
variables globales ?):


function MaFonction(x as integer, y as integer) as integer
Mafonction = tableau(x,y)
end function

Mais si c'est ça ton problème, MaFonction ne sert à rien, tu peux mettre
ça directement dans ton code.

MonChamp = tableau(x,y) au lieu de
MonChamp = MaFonction(x,y)

Sans doute ai-je mal compris.

J-Pierre

"Sergio" a écrit dans le message de news:


bonsoir a tous

voila mon probleme:
je n'arrive pas à transférer un tableau a 2 dimensions
dans une fonction.
voila ce que je fais(en résumé) dans un module.
je fais:

dim Montableau() as integer
(juste après option explicite).

puis j'ai une procedure qui me remplit
un tableau a 2 dimensions.

redim Montableau(nb1,nb2) as integer

Montableau(x,y) = valeur1 etc..
(le tableau est correctement rempli !)

je fais:
call MaFonction

puis:
'xxxxxxxxxxxxxxxxxxxxxxxxx
function MaFonction() as integer
Mafonction(x,y) = tableau(x,y)
end function
'xxxxxxxxxxxxxxxxxxxxxxxxx
il faut surement mettre quelque chose entre les
parenthèses après "MaFonction" mais j'ai tout éssayé
j'ai eu droit à tous les messages d'erreur existants
alors si quelqu'un peut m'aiguiller !

A+
Sergio














Avatar
Sergio
ok merci

je vais essayer ça tout de suite
(ou plutot demain matin)

A+
Sergio

"J-Pierre" a écrit dans le message de
news: eZXB4$
Sergio,

Solution possible:

avant d'ouvrir ton état, enregistrer les valeurs de tous tes tableaux dans
une table. Si on prend l'exemple de ton premier tableau

(60,10), la définition de ta table comprendra 10 champs. La table aura
aussi deux champs, une ID et une date.


L'ID est unique (voir ci-après) , la date est la date de création, comme
ça, quand tu ouvres ta base MDB, tu supprimes toutes les

lignes qui ne sont pas du jour.
Pour créer tes lignes, tu écris une fonction qui itérera sur ton tableau
pour faire un INSERT, si on reprends ton exemple, ta table

comprendra 60 lignes.

Pour obtenir une ID unique, voilà un extrait de fonction qui insère une
ligne dans une table et récupère l'autoNum. La table

comprend 3 champs:
T911_sequence autonum
T911_texte texte
T911_date valeur par défaut date()
----------------------------------------------
Function GetUniqueId(text) As Long

Dim strgSQL As String
Dim WrecordsAffected As Long
Dim cnn As New ADODB.Connection
Dim rst As New ADODB.Recordset

Set cnn = CurrentProject.Connection

strgSQL = "SELECT TOP 1 T911_unique_id.* FROM T911_unique_id;"
rst.Open strgSQL, cnn, adOpenKeyset, adLockOptimistic

rst.AddNew
rst!T911_texte = text

On Error Resume Next

rst.Update

If cnn.Errors.Count > 0 Then
rst.Close
cnn.RollbackTrans
cnn.Close
Set cnn = Nothing
On Error GoTo 0
GetUniqueId = 0
Exit Function
End If

On Error GoTo 0
GetUniqueId = rst!T911_sequence

rst.Close
cnn.Close
Set cnn = Nothing

End Function
----------------------------------------------------
Enfin, si tu deuxième dimension est variable, reviens nous voir en donnant
plus de détails


J-Pierre