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

déclarer un tableau

5 réponses
Avatar
TA
Bonjour à tous.
Voici une difficulté que je rencontre dans l'utilisation des tableaux à
taille fixe en VBA.
Mon code contient une variable de type Integer (appelons-la NB)
correspondant au nombre d'enregistrements d'un recordset. Le tableau n'a
qu'une dimension (mais il pourrait en avoir plusieurs) et son nombre de
lignes doit être égal à NB.
Si je déclare le tableau sous la forme dim MonTableau(NB), j'ai un
message d'erreur (pas d'utilisation de variable dans la déclaration d'un
tableau !).
Si NB était une constante, ça fonctionnerait. Mais je ne peux pas
déclarer de constante dont la valeur est le nombre d'enregistrements du
recordset. En effet, si j'écris const NB as integer =
MonRecordset.Recordcount, ça ne marche pas.
Pour résumer, je ne peux pas déclarer la constante qui me permettrait de
déclarer le tableau et je ne peux pas utiliser la variable dans la
déclaration de ce même tableau. Bref, je tourne en rond. Je sais que je
pourrais contourner le problème en utilisant un tableau dynamique, mais
mon cas n'est certainement pas unique et il y a certainement un moyen de
déclarer un tableau à taille fixe autrement qu'en utilisant des nombres
entiers.
Quelqu'un aurait-il une idée sur le sujet ?.
Merci à eux.

5 réponses

Avatar
ChauffeMarcel
bonjour,
penchez-vous sur l'instruction <REDIM> Confère aide d'Access.
Marcel

On 26 juin, 18:46, TA wrote:
Bonjour à tous.
Voici une difficulté que je rencontre dans l'utilisation des tableaux à
taille fixe en VBA.
Mon code contient une variable de type Integer (appelons-la NB)
correspondant au nombre d'enregistrements d'un recordset. Le tableau n'a
qu'une dimension (mais il pourrait en avoir plusieurs) et son nombre de
lignes doit être égal à NB.
Si je déclare le tableau sous la forme dim MonTableau(NB), j'ai un
message d'erreur (pas d'utilisation de variable dans la déclaration d'un
tableau !).
Si NB était une constante, ça fonctionnerait. Mais je ne peux pas
déclarer de constante dont la valeur est le nombre d'enregistrements du
recordset. En effet, si j'écris const NB as integer =
MonRecordset.Recordcount, ça ne marche pas.
Pour résumer, je ne peux pas déclarer la constante qui me permettrait de
déclarer le tableau et je ne peux pas utiliser la variable dans la
déclaration de ce même tableau. Bref, je tourne en rond. Je sais que je
pourrais contourner le problème en utilisant un tableau dynamique, mais
mon cas n'est certainement pas unique et il y a certainement un moyen de
déclarer un tableau à taille fixe autrement qu'en utilisant des nombr es
entiers.
Quelqu'un aurait-il une idée sur le sujet ?.
Merci à eux.


Avatar
Raymond [mvp]
Bonjour.

il faut raisonner simple pour les tableaux et access s'y retrouve très bien.
dans le principe, déclarer un tableau dynamique, redimensionner le tableau
plusieurs fois dans la même procédure si nécessaire sans pour cela perdre
les valeurs acquises.
dans ton cas,
tu places: Dim MonTableau() As Integer
dans les déclaratives en haut du module de code. ceci ne fait que déclarer
le tableau et le mettre à la disposition de toutes les procédures du module.
dans le code tu redéfinis la capacité de ton tableau très facilement par:
ReDim tableau(Me.RecordsetClone.RecordCount)
dans n'importe quelle procédure et le nouveau tableau sera à la disposition
des autres procédures avec la nouvelle dimension.
ainsi ce tableau peut-être redimensionné à tout moment par le nombre
d'enregistrements de la source de ton formulaire sans utiliser de variable
ou constantes.

--
@+
Raymond Access MVP http://www.OfficeSystemAccess.com/
http://officesystem.access.over-blog.com/
http://officesystem.access.free.fr/wiki/
Pour débuter sur le forum: http://www.mpfa.info/

Venez découvrir Open XML, le nouveau format de fichier de la suite Office !
http://www.comscamp.com/Tracker/Redirect.ashx?linkidÿ71c7f3-78e8-4371-abaf-b73c259e58db


"TA" a écrit dans le message de news:
468142d9$0$25933$
| Bonjour à tous.
| Voici une difficulté que je rencontre dans l'utilisation des tableaux à
| taille fixe en VBA.
| Mon code contient une variable de type Integer (appelons-la NB)
| correspondant au nombre d'enregistrements d'un recordset. Le tableau n'a
| qu'une dimension (mais il pourrait en avoir plusieurs) et son nombre de
| lignes doit être égal à NB.
| Si je déclare le tableau sous la forme dim MonTableau(NB), j'ai un
| message d'erreur (pas d'utilisation de variable dans la déclaration d'un
| tableau !).
| Si NB était une constante, ça fonctionnerait. Mais je ne peux pas
| déclarer de constante dont la valeur est le nombre d'enregistrements du
| recordset. En effet, si j'écris const NB as integer | MonRecordset.Recordcount, ça ne marche pas.
| Pour résumer, je ne peux pas déclarer la constante qui me permettrait de
| déclarer le tableau et je ne peux pas utiliser la variable dans la
| déclaration de ce même tableau. Bref, je tourne en rond. Je sais que je
| pourrais contourner le problème en utilisant un tableau dynamique, mais
| mon cas n'est certainement pas unique et il y a certainement un moyen de
| déclarer un tableau à taille fixe autrement qu'en utilisant des nombres
| entiers.
| Quelqu'un aurait-il une idée sur le sujet ?.
| Merci à eux.
Avatar
Raymond [mvp]
.../...
tu as dû rectifier les noms que j'ai utilisés, il faut que le tableau porte
toujours le même nom.

--
@+
Raymond Access MVP http://www.OfficeSystemAccess.com/
http://officesystem.access.over-blog.com/
http://officesystem.access.free.fr/wiki/
Pour débuter sur le forum: http://www.mpfa.info/

Venez découvrir Open XML, le nouveau format de fichier de la suite Office !
http://www.comscamp.com/Tracker/Redirect.ashx?linkidÿ71c7f3-78e8-4371-abaf-b73c259e58db


"Raymond [mvp]" a écrit dans le message
de news: OGy$
Avatar
TA
.../...
tu as dû rectifier les noms que j'ai utilisés, il faut que le tableau porte
toujours le même nom.

Merci pour vos réponses à tous deux. Vous me confirmez ce que je

pressentais : l'utilisation d'un tableau dynamique est la solution dans
mon cas.
Mais si j'ai posé la question sur ce forum, c'est par curiosité et je
vois qu'il n'y a pas beaucoup de cas où on puisse déclarer un tableau de
taille fixe si sa taille n'est pas toujours identique à chaque exécution
du code (du style dim MonTableau(104) ou dim MonTableau(2,4)).
Dans l'aide Microsoft, on consacre pourtant beaucoup plus de lignes aux
tableaux à taille fixe qu'aux tableaux dynamiques.
Je termine en disant tout le bien que je pense de ce forum. C'est
presque un lieu de promenade et j'en tire toujours quelque chose
d'intéressant. Bonsoir.

Avatar
ChauffeMarcel
re-bonjour,

Pour être complet, il existe 2 autres solutions pour éviter les
tableaux dynamiques :

* La première est d'utiliser un objet Collection (facile si qu'un
champ par ligne)

* La deuxième est d'affecter le contenu du recordset à un variant,
s'il s'agit d'un recordset via DAO :
Dim oDb as Dao.Database
Dim oRs as Dao.Recordset
Dim MonTableau as Variant
Set oDb = CurrentDb
Set oRs = oDb.OpenRecordset("SELECT * FROM MaTable", DbOpenSnapshot)
oRs.MoveLast
MonTableau = oRs.GetRows(oRs.RecordCount)
Set oRs = Nothing
Set oDb = Nothing

On obtient un tableau à 2 dimensions (Numéro champ, Numéro ligne) qui
contient donc le recordset !
Voir Aide d'Access pour plus d'info.

Bonne soirée.

On 26 juin, 21:06, TA wrote:
Raymond [mvp] a écrit :> .../...
tu as dû rectifier les noms que j'ai utilisés, il faut que le table au porte
toujours le même nom.


Merci pour vos réponses à tous deux. Vous me confirmez ce que je
pressentais : l'utilisation d'un tableau dynamique est la solution dans
mon cas.
Mais si j'ai posé la question sur ce forum, c'est par curiosité et je
vois qu'il n'y a pas beaucoup de cas où on puisse déclarer un tableau de
taille fixe si sa taille n'est pas toujours identique à chaque exécut ion
du code (du style dim MonTableau(104) ou dim MonTableau(2,4)).
Dans l'aide Microsoft, on consacre pourtant beaucoup plus de lignes aux
tableaux à taille fixe qu'aux tableaux dynamiques.
Je termine en disant tout le bien que je pense de ce forum. C'est
presque un lieu de promenade et j'en tire toujours quelque chose
d'intéressant. Bonsoir.