IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Access Discussion :

Declaration tableau sous Access 2000


Sujet :

Access

  1. #1
    Membre à l'essai
    Homme Profil pro
    Employé administratif
    Inscrit en
    Janvier 2005
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Employé administratif
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2005
    Messages : 37
    Points : 21
    Points
    21
    Par défaut Declaration tableau sous Access 2000
    Bonjour a tous

    Voila mon probleme :
    Je souhaite déclarer des variables en "grille", c'est a dire affecter une valeur 1 ou 0 a un tableau de 10*10 cases (repère orthonormé x y).
    Ces valeurs me permettrons ensuite de faire des traitement en fonction de la case où je suis.
    A paremment la déclaration tableau correspond a ce que je veux mais ensuite je ne comprend pas comment déclarer les 1 ou 0 (en dure dans le code : ils ne changeront pas)
    Je pensais à :

    Dim MonTableau(4, 4) As Variant

    MonTableau(0) = Array(1, 1, 1, 1, 1)
    MonTableau(1) = Array(1, 0, 0, 0, 1)
    MonTableau(2) = Array(1, 0, 1, 1, 1)
    MonTableau(3) = Array(1, 0, 0, 1, 1)
    MonTableau(4) = Array(1, 1, 0, 1, 1)

    Le tout dans une procedure public

    Mais il me génère une erreur.
    Malgré mes recherches et a l'aide, je ne comprend pas.
    HELP... Please
    Merci pour votre assistance

  2. #2
    Responsable Access

    Avatar de Arkham46
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    5 865
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations forums :
    Inscription : Septembre 2003
    Messages : 5 865
    Points : 14 526
    Points
    14 526
    Par défaut
    Slt,

    Un tableau de tableaux :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Dim MonTableau As Variant
    MonTableau = Array(Array(1, 1, 1, 1, 1), _
                       Array(1, 0, 0, 0, 1), _
                       Array(1, 0, 1, 1, 1), _
                       Array(1, 0, 0, 1, 1), _
                       Array(1, 1, 0, 1, 1))
    Debug.Print MonTableau(1)(1)
    Ou un tableau à deux dimensions :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Dim MonTableau(4, 4) As Integer
    MonTableau(0, 0) = 1
    MonTableau(0, 1) = 1
    MonTableau(0, 2) = 1
    MonTableau(0, 3) = 1
    MonTableau(0, 4) = 1
    MonTableau(1, 0) = 1
    MonTableau(1, 1) = 1
    Debug.Print MonTableau(1, 1)

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    265
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 265
    Points : 181
    Points
    181
    Par défaut pourquoi pas une table de booleens de 10* 5
    Plutot que de faire un tableau, pour ma part, j'utilise souvent des
    tables.

    Alors ici, je verrais bien une table temporaire de 10 lignes,
    Ou chaque ligne comprend une colonne id, et 5 champ de type Vrai/Faux.

    Non?

  4. #4
    Membre à l'essai
    Homme Profil pro
    Employé administratif
    Inscrit en
    Janvier 2005
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Employé administratif
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2005
    Messages : 37
    Points : 21
    Points
    21
    Par défaut
    Bonjour et merci de me repondre

    Pour Arkham46
    La compilation du code me génère une erreur : il bloque sur le premier "1". Est ce que ca peut venir du fait que je déclare en public ?

    Quant a ta 2nd solution cela voudrait dire que je doit faire autant de ligne de code qu'il y a de case ? Est ce que je ne perd pas l'interret du tableau ?

    Pour batou22003
    J'avais bien pensé à une table. Mais après pour le traitement ça risque de ce compliquer : passer d'un enregistrement a un autre... Faut que j'essaie

  5. #5
    Responsable Access

    Avatar de Arkham46
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    5 865
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations forums :
    Inscription : Septembre 2003
    Messages : 5 865
    Points : 14 526
    Points
    14 526
    Par défaut
    Citation Envoyé par Tsatogua
    La compilation du code me génère une erreur : il bloque sur le premier "1". Est ce que ca peut venir du fait que je déclare en public ?
    faudrait voir ton code, et surtout le message d'erreur
    à priori le public pour la fonction ne dérange pas

    Citation Envoyé par Tsatogua
    Quant a ta 2nd solution cela voudrait dire que je doit faire autant de ligne de code qu'il y a de case ? Est ce que je ne perd pas l'interret du tableau ?
    c'est sûr c'est moins pratique, c'était juste pour montrer la syntaxe

    Citation Envoyé par Tsatogua
    J'avais bien pensé à une table. Mais après pour le traitement ça risque de ce compliquer : passer d'un enregistrement a un autre... Faut que j'essaie
    personnellement je ne suis pas fan des tables dans ce cas-là
    ça demande d'avoir un champ pour trier la table dans le bon ordre
    et il faut lancer une requête à chaque fois qu'on veut une donnée
    ou alors on construit un tableau à partir des données de la table mais pour une table de 10x10 avec des données constantes c'est pas nécessaire

  6. #6
    Membre à l'essai
    Homme Profil pro
    Employé administratif
    Inscrit en
    Janvier 2005
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Employé administratif
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2005
    Messages : 37
    Points : 21
    Points
    21
    Par défaut
    Il me dit "instruction incorrecte a l'interieur d'une procédure"
    Et il s'arrete au 1er "1"
    Mon code c'est un copier/coler de ta proposition:

    Option Compare Database

    Option Explicit

    Dim MonTableau As Variant
    MonTableau = Array(Array(1, 1, 1, 1, 1), _
    Array(1, 0, 0, 0, 1), _
    Array(1, 0, 1, 1, 1), _
    Array(1, 0, 0, 1, 1), _
    Array(1, 1, 0, 1, 1))
    Debug.Print MonTableau(1)(1)

    Le tout dans un module avec ensuite des fonctions de calcule sur evenement

  7. #7
    Responsable Access

    Avatar de Arkham46
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    5 865
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations forums :
    Inscription : Septembre 2003
    Messages : 5 865
    Points : 14 526
    Points
    14 526
    Par défaut
    ah oui mais non...

    tu ne peux pas initialiser un tableau en dehors d'une fonction

    il faut l'initialiser dans une procédure que tu démarres au lancement de l'application

  8. #8
    Membre à l'essai
    Homme Profil pro
    Employé administratif
    Inscrit en
    Janvier 2005
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Employé administratif
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2005
    Messages : 37
    Points : 21
    Points
    21
    Par défaut
    D'accord
    Du coup j'ai déplacé la déclaration dans un evenement "sur ouverture" d'un formulaire

    Mais quand je clique sur un bouton créé pour simuler un évennement j'ai mis un MsgBox MonTableau(1, 2) pour voir s'il me renvoi bien la valeur et il me dit "Sub ou Fonction non défini"

    Je suppose donc qu'il ne faut pas mettre la déclaration dans "Sur ouverture" (private) mais en "Public". Où doit-je le mettre ? Comment déclarer une fois pour toute ?

  9. #9
    Responsable Access

    Avatar de Arkham46
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    5 865
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations forums :
    Inscription : Septembre 2003
    Messages : 5 865
    Points : 14 526
    Points
    14 526
    Par défaut
    pas tout compris la portée dont tu as besoin pour ton tableau

    t'es dans un module et tu ne t'en sers que dans ce module?

    dans ce cas tu mets tout dans un même module

    pour initialiser le tableau tu le fais au moment où tu en as besoin, peut-être avec une fonction public d'initialisation avant la première utilisation

    mais je vois pas très bien là...

  10. #10
    Membre à l'essai
    Homme Profil pro
    Employé administratif
    Inscrit en
    Janvier 2005
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Employé administratif
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2005
    Messages : 37
    Points : 21
    Points
    21
    Par défaut
    En fait je ne suis pas sur pour le module.

    J'ai besoin de ce tableau sur un formulaire. Du coup j'ai fait ma declaration dans "Sur ouverture". Mais ca marche pas. A paramment cette déclaration n'est plus valable après l'ouverture (et donc lors des evennements a venir)
    C'est pour ca que je l'ai mise dans un module, pensant que ca la rendrait valable pour toute l'application. Mais non.

    Voila donc je cherche a déclarer un public mais sur ce formulaire.

  11. #11
    Responsable Access

    Avatar de Arkham46
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    5 865
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations forums :
    Inscription : Septembre 2003
    Messages : 5 865
    Points : 14 526
    Points
    14 526
    Par défaut
    si j'ai bien compris tu n'as besoin de ce tableau que dans un seul formulaire

    donc tout le code peut-être mis dans le module du formulaire

    donc en en-tête de module, après les instructions options ... :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Private MonTableau As Variant
    le tableau est privé pour le formulaire, ce qui ne m'empêche pas d'être accessible dans toutes les fonctions et procédure du formulaire

    et sur le form_open :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    MonTableau = Array(Array(1, 1, 1, 1, 1), _ 
                       Array(1, 0, 0, 0, 1), _ 
                       Array(1, 0, 1, 1, 1), _ 
                       Array(1, 0, 0, 1, 1), _ 
                       Array(1, 1, 0, 1, 1))

  12. #12
    Membre à l'essai
    Homme Profil pro
    Employé administratif
    Inscrit en
    Janvier 2005
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Employé administratif
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2005
    Messages : 37
    Points : 21
    Points
    21
    Par défaut
    Merci grace a toi j'ai bien progessé.
    A présent il prend bien la déclaration et je n'ai plus de message d'erreur.

    J'ai fait un evennement "sur clic" de test : mais il ne renvoi aucune valeur (msgbox vide). De quelle manière je rappelle les valeurs dans ce tableau ?
    Autre question : a quoi sert ta ligne "Debug.Print MonTableau(1)(1)" ? J'ai été obligé de la mettre en commentaire car elle bloque.
    Voici l'ensemble du code :

    Option Compare Database
    Option Explicit
    Dim MonTableau(4, 4) As Variant

    Private Sub Form_Open(Cancel As Integer)
    MonTableau(4, 4) = Array(Array(1, 1, 1, 1, 1), _
    Array(1, 0, 0, 0, 1), _
    Array(1, 0, 1, 1, 1), _
    Array(1, 0, 0, 1, 1), _
    Array(1, 1, 0, 1, 1))
    'Debug.Print MonTableau(1)(1)

    End Sub

    Private Sub BTUP_Click()
    MsgBox MonTableau(1, 2)

    End Sub

  13. #13
    Responsable Access

    Avatar de Arkham46
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    5 865
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations forums :
    Inscription : Septembre 2003
    Messages : 5 865
    Points : 14 526
    Points
    14 526
    Par défaut
    t'as mélangé les deux syntaxes, tu déclares un tableau à deux dimensions et tu ne rempli que la valeur d'indice (4,4) avec un tableau de tableau

    le code précédent devrait fonctionner

    le debug.print c'est juste un exemple pour récupérer une valeur
    ça écrit la valeur dans la fenêtre d'exécution de l'éditeur vba

    tu peux remplacer debug.print par msgbox si tu préfères

    MonTableau(1) renvoit le tableau en indice 1
    MonTableau(1)(1) renvoit la valeur d'indice 1 de ce tableau
    on imbrique des tableaux de dimension 1 en fait

  14. #14
    Membre à l'essai
    Homme Profil pro
    Employé administratif
    Inscrit en
    Janvier 2005
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Employé administratif
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2005
    Messages : 37
    Points : 21
    Points
    21
    Par défaut
    OUI Ca marche !!

    J'ai enlevé les (4, 4) dans la déclaration et modifié mon msgbox par MsgBox MonTableau(1)(3) '(par exemple)

    Il me renvoi bien la valeur attendue.

    Merci
    Bon week end a tous

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Calculs sous Access 2000
    Par didoo6 dans le forum Access
    Réponses: 1
    Dernier message: 24/04/2006, 14h53
  2. Clauses ALTER COLUMN multiples sous Access 2000
    Par richardkiii dans le forum Access
    Réponses: 10
    Dernier message: 30/03/2006, 09h01
  3. Réaliser un tableau sous access
    Par andyvo dans le forum Access
    Réponses: 2
    Dernier message: 28/12/2005, 12h54
  4. Utilisation de formulaire sous access 2000
    Par 24 faubourg dans le forum IHM
    Réponses: 3
    Dernier message: 29/11/2005, 11h54
  5. Réponses: 1
    Dernier message: 23/11/2005, 11h06

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo