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 :

Boucle imbriquée avec for each et while


Sujet :

Access

  1. #1
    Membre habitué
    Homme Profil pro
    consultant environnement et développement d'applications de base de données
    Inscrit en
    Janvier 2006
    Messages
    336
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : consultant environnement et développement d'applications de base de données
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Janvier 2006
    Messages : 336
    Points : 166
    Points
    166
    Par défaut Boucle imbriquée avec for each et while
    Bonjour

    J'essaye de faire une boucle imbriquée pour balayer tous les contrôles d'un formulaire (un plan de cave...) afin de vérifier si le contrôle (cuve..) doit être visible ou pas (en fonction de son nom et de sa présence ou pas dans un recordset)...

    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
        For Each ctrl In Forms![F-Plan de cave].ssform.Controls
            If ctrl.Name <> "masque" Then
                'récupère le num de cuve du controle
                cuve = Mid(ctrl.Name, InStrRev(ctrl.Name, "_") + 1)
                'fait une boucle sur recordset pour voir si présent
                While Not rst.EOF
                    Debug.Print "controle " & cuve & " - recordset " & rst("N° de cuve")
                    If (rst("N° de cuve") = cuve) Then
                        ctrl.visible = True
                    Else
                        ctrl.visible = False
                    End If
                    rst.MoveNext
                Wend
            End If
        Next ctrl
    J'obtiens bien la boucle sur le recordset mais cela ne boucle pas sur les contrôles du formulaire, je reste scotcher au premier...
    Où il y a t'il une autre solution plus simple...
    merci de vos idées.

    Guen

  2. #2
    Expert confirmé

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 419
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 419
    Points : 4 297
    Points
    4 297
    Par défaut
    ton if ne traite que le controle masque et il n'y a pas de else

  3. #3
    Membre habitué
    Homme Profil pro
    consultant environnement et développement d'applications de base de données
    Inscrit en
    Janvier 2006
    Messages
    336
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : consultant environnement et développement d'applications de base de données
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Janvier 2006
    Messages : 336
    Points : 166
    Points
    166
    Par défaut
    avec le if je veux juste exclure mon contrôle appelé masque du formulaire de cette boucle, je n'ai pas besoin de else.
    en clair :
    si le contrôle ne s'appelle par "masque" alors je regarde s'il est inclu dans mon recordset, si oui, je l'affiche, si non, je le masque...
    sachant que j'ai mis ce contrôle masque exclu de la boucle car je ne peux pas masquer le contrôle actif je setfocus donc sur un contrôle hors de la boucle...
    je ne comprend donc pas ta réponse...

  4. #4
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Localisation : Sénégal

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 229
    Points : 1 579
    Points
    1 579
    Par défaut
    For Each ctrl In Forms![F-Plan de cave].ssform.Controls
    Tu boucle apparamment dans un sous formulaire. A part la syntaxe qui parait correcte, je ne trouves pas d'erreur.

    Par contre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    cuve = Mid(ctrl.Name, InStrRev(ctrl.Name, "_") + 1)
    Le recordset contient des données. Je penses que au lieu de ctrl.Name est ce que ce ne serais pas ctrl.Value?

  5. #5
    Membre habitué
    Homme Profil pro
    consultant environnement et développement d'applications de base de données
    Inscrit en
    Janvier 2006
    Messages
    336
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : consultant environnement et développement d'applications de base de données
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Janvier 2006
    Messages : 336
    Points : 166
    Points
    166
    Par défaut
    Non, c'est bien sur le nom du contrôle car ils sont du type cuve_25 où 25 est le numéro de la cuve et correspond à un numéro index du recordset...
    il s'agit effectivement d'un sous-formualire.
    bizarre !

  6. #6
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Localisation : Sénégal

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 229
    Points : 1 579
    Points
    1 579
    Par défaut
    Essai de remplacer
    Forms![F-Plan de cave].ssform.Controls
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Forms![F-Plan de cave].Form!ssform.Controls
    PS je supposes que ssform et le véritable nom du sous formulaire. Sinon remplace le par le nom correct.

    D'autre part moi j'aurais procéder à l'inverse (sous reserve de ne pas très bien comprendre)
    J'aurais d'abord bouclé sur le recordset et seulement ensuite parcourir le sous formulaire pour rendre visible ou non mes controls.

  7. #7
    Membre habitué
    Homme Profil pro
    consultant environnement et développement d'applications de base de données
    Inscrit en
    Janvier 2006
    Messages
    336
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : consultant environnement et développement d'applications de base de données
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Janvier 2006
    Messages : 336
    Points : 166
    Points
    166
    Par défaut
    J'ai essayé la modif mais pas mieux..
    En ce qui concerne la boucle inverse, j'ai essayé mais j'ai un problème ensuite pour masquer mes contrôles...
    ça donne :
    pour chaque numéro de cuve de mon recordset

  8. #8
    Membre habitué
    Homme Profil pro
    consultant environnement et développement d'applications de base de données
    Inscrit en
    Janvier 2006
    Messages
    336
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : consultant environnement et développement d'applications de base de données
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Janvier 2006
    Messages : 336
    Points : 166
    Points
    166
    Par défaut
    pardon, j en'ai pas pu finir.;
    je peux peut être essayé :
    je mets tous les contrôles masqués puis
    pour chaque numéro de cuve de mon recordset
    je fais une boucle pour le trouver et je rends visible
    je passe au recordset suivant

    mais ça risque d'être lourd (un recordset peut contenir 100 ou 150 enregistrement et le formualaire environ 400...ce qui fait un nombre de boucle énorme !)
    il faut peut être que je trouveune autre solution...

Discussions similaires

  1. insertion de données issues d'un array sans boucles de type for each ou while.
    Par piotrowski-s dans le forum PHP & Base de données
    Réponses: 0
    Dernier message: 05/09/2012, 11h27
  2. problème avec boucle Sub et For each
    Par lbroc84 dans le forum VBScript
    Réponses: 1
    Dernier message: 23/08/2011, 19h18
  3. [XSLT] Problème de boucle avec for-each
    Par knack8 dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 29/04/2009, 01h42
  4. [VB.NET] Problème avec For Each...
    Par cyrcroix dans le forum Windows Forms
    Réponses: 5
    Dernier message: 15/06/2005, 10h49
  5. [XSL]boucle imbriquée avec condition
    Par kor dans le forum XSL/XSLT/XPATH
    Réponses: 10
    Dernier message: 11/01/2005, 14h19

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