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

VBA Access Discussion :

[VBA Access 97] Création de collections possible ? [Sources]


Sujet :

VBA Access

  1. #1
    Membre averti
    Étudiant
    Inscrit en
    Janvier 2007
    Messages
    32
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2007
    Messages : 32
    Par défaut [VBA Access 97] Création de collections possible ?
    Bonjour à tous,

    J'ai une petite question :

    est-il possible, avec access 97 de pouvoir créer ses propres collections et donc les manipuler suivant les besoins??

    En réalité, j'ai un formulaire avec énormément de zones de textes et de cases à cocher (pas moyen de réduire, besoin de l'utilisateur) et j'aimerais effectuer des manipulation sur ses zones de textes et cases à cocher afin de pouvoir limiter les saisies et donc les erreurs, je pense que faire des collections est approprié mais je n'ai trouvé aucune aide sur ce sujet sur aucun site au forum

    Pouvez-vous m'éclairer SVP



    Merci d'avance à tous

  2. #2
    Membre confirmé
    Inscrit en
    Mai 2004
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 47
    Par défaut
    Tu as deja Me.Controls qui contient tous les controles de ton formulaire

    tu peux faire par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    For i = 0 To Me.Controls.Count
        Me.Controls.Item(i).Locked = True
    Next i
    ca va verouiller tous les controles

    tu peux aussi utiliser for each
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    For Each ctl In Me.Controls
                ctl.Locked = True
    Next ctl
    avec ca tu peux acceder a toutes les propriétés des controles, dont le nom qui te permettra d'effectuer tel traitement plutot qu'un autre

    genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    If Left(ctl.Name, 5)="texte" Then 'si c'est une zone de texte
      'traitement pour les zone de texte
    End If
    voila si ca peut t'aider

  3. #3
    Membre averti
    Étudiant
    Inscrit en
    Janvier 2007
    Messages
    32
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2007
    Messages : 32
    Par défaut
    Merci Shoryu pour ton aide

    Avec sa je pense pouvoir faire quelque chose je verrais cet après midi et te dirais si sa m'a aidé

    donc on ne peut pas créer de collection personnalisées sous access c'est sa? il faut se débrouiller avec ce qui existe quoi...

    Merci en tout cas

  4. #4
    Membre averti
    Étudiant
    Inscrit en
    Janvier 2007
    Messages
    32
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2007
    Messages : 32
    Par défaut pas encore
    Re,

    Il y a une piste mais ce n'est pas encore sa.

    je développe plus mon sujet :

    J'ai plusieurs zones de texte, zones de listes et des cases à cocher.

    Je veux créer une sorte de lien entre mes zones de listes et mes cases cocher de tel sorte que lorsqu'une certaine valeure est séléctionnée dans ma liste, ma case est visible ou non. il y en a 35 de chaque, je sais le faire une par une mais sa va être du code à rallonge, une collection serais plus rapide si c'est faisable...

    J'éspère être assez claire

    Merci par avance

  5. #5
    Membre confirmé
    Inscrit en
    Mai 2004
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 47
    Par défaut
    a part ca :
    en jouant sur les noms des controles c'est possible
    si par exemple t'as ca

    liste31
    case31

    liste32
    case32

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
    Dim trouve as boolean
    Dim i as Integer
    trouve = false
     
    For Each ctl In Me.Controls
                If left(ctl.Name,1)="l" Then  'si le nom du controle commence par un l
                    'verif de la valeur
                    'if ctl.value= ce_que_tu_veux then
                             i=0
                            trouve=false
                           while(trouve=false)
                                if left(Controls.Item(i).Name,1)="c" and right(Controls.Item(i).name,2)=right(ctl.name,2) then 'si c'est une case et que c le meme numero
                                      Controls.Item(i).visible = true ' or false 
                                      trouve=true
                                end if
                            i=i+1;
                           wend
                   'end if
                End if
    Next ctl
    c'est bourrin mais ca devrait faire l'affaire

    edit : j'ai modifié le code un peu car ca bouclait pour rien

  6. #6
    Expert éminent

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Par défaut
    Deux cas possibles :

    Leur donner des noms similaires (caseDate, lstDate). Ainsi en cliquant sur caseDate tu peux associer lstDate.

    La propriété Remarque (Tag en VBA) permet de d'inscrire n'importe quelle valeur utile. Tu peux ainsi par exemple y inscrire des numéros de groupe. Case1 avec liste1 auraient le tag 1, case2 et liste2 le 2 etc.

  7. #7
    Membre averti
    Étudiant
    Inscrit en
    Janvier 2007
    Messages
    32
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2007
    Messages : 32
    Par défaut
    ta réponse Shoryu me parait juste, certe un peu longue mais juste, je vais essayer tout de suite.
    Pour la réponse de Tofalu, l'histoire des tag me paraît pas mal du tout, mais comment les utiliser? je ne les ai jamais vu avant, je ne sais pas comment m'y prendre dsl... Mais cette solution me paraît mieux encore

    Merci a vous deux

  8. #8
    Expert éminent

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Par défaut
    Tag est uniquement une propriété du contrôle et est manipulable en VBA par :

    Tout comme tu référencerais n'importe quelle autre propriété

  9. #9
    Membre averti
    Étudiant
    Inscrit en
    Janvier 2007
    Messages
    32
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2007
    Messages : 32
    Par défaut
    Ok OK, je viens d'essayer, effectivement, facile comme bonjours!!

    Mais comment gérer ces différents tag dans une boucle itérative (For...Next) afin de pouvoir jouer sur la propriété visible de la case?

  10. #10
    Expert éminent

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Par défaut
    Dans ta boucle tu parcours tous les contrôles (for each) et avec un if tu vérifies si le tag est le bon ou pas

  11. #11
    Membre averti
    Étudiant
    Inscrit en
    Janvier 2007
    Messages
    32
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2007
    Messages : 32
    Par défaut
    Ok Merci pour toutes les infos tofalu

    Une dernière petite question ne rigolez pas... : Sur quel événement de formulaire je peux coder tout cela, car rien ne me semble approprié



    Merci beaucoup

  12. #12
    Expert éminent

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Par défaut
    Tout dépend du comportement souhaité.

    Apparement tu vas écrire une procédure générique qui s'occupera d'afficher / masquer en fonction du controle courant

    Bien entendu, cette procédure devra être appelée par chaque contrôle qui devra lever l'évènement.


    Exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    Private Sub Cocher11_Click()
    AfficherMasquer
    End Sub
     
    Private Sub Cocher9_Click()
    AfficherMasquer
    End Sub
     
    Sub AfficherMasquer()
    Dim oCSource As Control
    Dim oCtemp As Control
     
    'Récupère le controle actif
    Set oCSource = Application.Screen.ActiveControl
    'Boucle sur tous les controles et gère leur affichage
    For Each oCtemp In Me.Controls
        If oCtemp.Tag = oCSource.Tag And Not oCtemp Is oCSource Then
            oCtemp.Visible = oCSource.Value
        End If
    Next
    End Sub

  13. #13
    Membre averti
    Étudiant
    Inscrit en
    Janvier 2007
    Messages
    32
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2007
    Messages : 32
    Par défaut
    Eh bien, ça me convient parfaitement tout cela!! Un grand merci pour ton aide Tofalu, je vais pouvoir bien avancer sur mon projet, car cette fonction va m'être utile plusieurs fois dans mon application
    Merci Merci Merci

  14. #14
    Membre averti
    Étudiant
    Inscrit en
    Janvier 2007
    Messages
    32
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2007
    Messages : 32
    Par défaut
    bonjours

    J'ai un petit problème avec mon code

    J'ai repris l'éxemple fourni par Tofalu et j'y ai rajouter mes besoins :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
     
     
    Sub AfficherMasquer()
     
        Dim oCSource As Control
        Dim oCtemp As Control
     
        'Récupère le contôle actif
        Set oCSource = Application.Screen.ActiveControl
            'Vérifie la valeur de la séléction dans la zone
            If oCSource.Value = "Tôlerie / Montage" Or oCSource.Value = "Peinture" Or oCSource.Value = "CN / Laser" Then
                'Boucle sur tout les contrôles et gère leurs affichage
                For Each oCtemp In Me.Controls
                    If oCtemp.Tag = oCSource.Tag And Not oCtemp Is oCSource Then
                        oCtemp.Visible = oCSource.Visible
                    End If
                Next
            Else
                For Each oCtemp In Me.Controls
                    If oCtemp.Tag = oCSource.Tag And Not oCtemp Is oCSource Then
                        oCtemp.Visible = False
                    End If
                Next
            End If
    End Sub
    Par contre, dans ma dernière boucle Si, je n'arrive pas à dire qu'il faut mettre la propritété visible du contrôle du même tag que mon contrôle courant à faux sauf mon contôle courant... , ce sauf m'embête un peu

    Merci a vous

  15. #15
    Membre averti
    Étudiant
    Inscrit en
    Janvier 2007
    Messages
    32
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2007
    Messages : 32
    Par défaut nouveau problème
    Re,
    Je viens de trouver un autre problème, le code pour rendre visible la case à cocher du même tag marche, mais que pour la zone de liste 1, pas pour les autres, alors que l'appel de la procédure est bien faite sur chaque click sur la zone de liste.
    Je ne vois pas d'où le problème viens..

    Merci d'avance

  16. #16
    Expert éminent

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Par défaut
    Les évènements sont les clics des cases à cocher et non des zones de liste normalement

  17. #17
    Membre averti
    Étudiant
    Inscrit en
    Janvier 2007
    Messages
    32
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2007
    Messages : 32
    Par défaut


    Oui c'est vrai, je n'ai pas fait attention à ça...



    Mais alors quel événement mettre pour que l'action se fait sur la zone de liste??...

    Et avez-vous une solution à mon premier problème (le SAUF)

    Merci d'avance

  18. #18
    Membre averti
    Étudiant
    Inscrit en
    Janvier 2007
    Messages
    32
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2007
    Messages : 32
    Par défaut Dernière ligne droite
    C'est bon, j'ai résolu le problème de l'événement, j'ai mis, sur perte focus...
    certe c'est un peut ennuyant de cliquer sur un autre contrôle pour que l'événement se déclanche mais je ne vois que sa qui puisse faire l'affaire...

    Par contre le premier problème reste entier...

    Merci

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

Discussions similaires

  1. [Vba Access] Création tableau a longeur variable
    Par 57Steph dans le forum VBA Access
    Réponses: 4
    Dernier message: 06/09/2007, 08h34
  2. [VBA ACCESS] - Création menu Fichier - Edition ..
    Par bruno28 dans le forum VBA Access
    Réponses: 4
    Dernier message: 17/07/2007, 09h22
  3. Création dynamique et boucle for en vba Access 2000
    Par billy123 dans le forum Access
    Réponses: 4
    Dernier message: 22/02/2007, 11h29
  4. Création d'une image en vba Access
    Par crashyear dans le forum VBA Access
    Réponses: 7
    Dernier message: 27/11/2006, 14h22
  5. Réponses: 4
    Dernier message: 16/04/2005, 16h54

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