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 :

Erreur dans "Loop Until"


Sujet :

VBA Access

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 26
    Par défaut Erreur dans "Loop Until"
    Bonjour, suite à mon dernier post, j'essaie d'intégrer une boucle dans le code:

    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
    26
    Private Sub LiaisonCont_Click()
     
    Dim i As Integer
    Dim j As Integer
     
    If Forms!Filiere!PT.Form.Recordset.RecordCount > 0 Then
     
    i = 1
    j = Forms!Filiere!PT.Form.Recordset.RecordCount
     
    Me.Onglets.Pages(4).SetFocus
    Me.PT.SetFocus
     
    Do Until i = j
    DoCmd.GoToRecord , "", acGoTo, i
    Me.PT!EtatPT.SetFocus
    DoCmd.GoToRecord , "", acNewRec
    Forms!Filiere!PT.Form!EtatPT.Form!IdCont = Forms!Filiere!Controle.Form!OBJECTID
    i = i + 1
    Me.PT.SetFocus
    Loop
     
     
    End If
     
    End Sub
    En gros, pour le premier enregistrement du sous-formulaire, on se positionne sur un nouvel enregistrement du sous-sous-formulaire et on remplit un champ. Une fois que c'est fait, on passe à l'enregistrement suivant du sous-formulaire et on refait la même chose jus'qu'a ce qu'il n'y ait plus d'enregistrement.

    Mais seulement voilà, ca cafouille!
    Dans le cas présent, le focus se positionne bien sur le sous-formulaire en question, mais rien ne se passe. Par contre, si je place la condition i=j après loop, c'est la boucle infernale, et les enregistrements se créent indéfiniment dans le sous-sous-formulaire.

    J'ai beau retourner ça dans mon cerveau, je ne comprends pas ce qui cloche.
    Quelqu'un a une idée?
    Merci beaucoup

  2. #2
    Rédacteur/Modérateur

    Avatar de Heureux-oli
    Homme Profil pro
    Contrôleur d'industrie
    Inscrit en
    Février 2006
    Messages
    21 086
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Belgique

    Informations professionnelles :
    Activité : Contrôleur d'industrie
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 21 086
    Par défaut
    Perso, je ne le ferais pas dans un formulaire mais avec des recordset.
    C'est plus facile dans ce cas à les gérer.

    Explique nous le but de la manoeuvre pour qu'on puisse t'aider.
    J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ?
    Débutez en VBA

    Mes articles


    Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus !

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 26
    Par défaut
    Je travaille sur une géodatabase qui permet de rentrer les données relatives aux contrôles des filières d'assainissement non collectif. Il y a donc une partie SIG, qui m'impose des contraintes au niveau de la base de données.

    En cliquant sur un bouton, je voudrais associer à un controle (date, non du technicien, avis....) un nouvel enregistrement pour chaque élément de la filière (par exemple un préfiltre, ou une fosse septique). Mais sur une filière on peut retrouver plusieurs fosses septiques. C'est pour ça que je passe à des sous sous formulaires.
    Un enregistrement dans le sous formulaire correspond à une entité géographique (une fosse septique par ex). Le sous-sous formulaire permet d'associer à cet élément plusieurs états (un état pour chaque contrôle).

    Le but c'est donc de rentrer la clef etrangère "controle" dans de nouveaux "états", qui sont des nouveaux enregistrements au niveau des sous-sosu formulaires.

    PS: quand je parle d'état, ca ne correspond pas du tout aux états access pour l'impression. C'est juste une ligne qui renseigne les informations issues du contrôle pour chaque élément de la filière.

    J'espère ne pas trop t'avoir embrouillé!

  4. #4
    Rédacteur/Modérateur

    Avatar de Heureux-oli
    Homme Profil pro
    Contrôleur d'industrie
    Inscrit en
    Février 2006
    Messages
    21 086
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Belgique

    Informations professionnelles :
    Activité : Contrôleur d'industrie
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 21 086
    Par défaut
    C'est un peu plus clair.

    Si je récapitule, tu entre des enregistrement dans une table et il faut que dans une seconde table, tu aies au moins un enregistrement en relation avec celui de la première table.
    J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ?
    Débutez en VBA

    Mes articles


    Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus !

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 26
    Par défaut
    filière------------->fosse-------->Etat fosse<---------controle


    filière: formulaire principal
    Fosse: sous formulaire
    Etat Fosse: sou sous formulaire

    le bouton sur lequel j'appuie se situe sur l'onglet ou l'on retrouve la table controle.



    J'espère que ce schéma bidouillé sera assez clair.

    Quand j'appuie sur le bouton:
    1 On créée un nouvel enregistrement dans Etat Fosse, et la clef étrangère de contrôle est intégrée avec le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Forms!Filiere!PT.Form!EtatPT.Form!IdCont = Forms!Filiere!Controle.Form!OBJECTID
    2 Si il y a plus d'une fosse, on passe à la fosse suivante (deuxième enregistrement du sous formulaire)

    3 On créée un nouvel enregistrement dans Etat Fosse, et la clef étrangère de contrôle est intégrée avec le même code.

    4 on refait la même chose jusqu'à ce qu'il n'y ait plus d'enregistrement restant dans Fosse

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 26
    Par défaut
    Effectivment ca marche avec loop while!

    Je ne veux pas rester bête, sais tu pourquoi while fonctionne et pas until?
    ces deux lignes traduisent pourtant exactement la même chose.
    Les mystères d'access?

    PS: ce serait plutôt ça non?

    Sinon il ne prend pas en compte le dernier enregistrement

  7. #7
    Rédacteur/Modérateur

    Avatar de Heureux-oli
    Homme Profil pro
    Contrôleur d'industrie
    Inscrit en
    Février 2006
    Messages
    21 086
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Belgique

    Informations professionnelles :
    Activité : Contrôleur d'industrie
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 21 086
    Par défaut
    La boucle comme elle est écrite fonctionne.
    Je l'ai essayé à vide.
    Juste qu'elle s'arrête à J-1 et pas à J
    Puisque quand I = J, elle n'est plus effectuée.
    J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ?
    Débutez en VBA

    Mes articles


    Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus !

  8. #8
    Membre Expert

    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
    Par défaut
    Je crois que For ... Next s'adapte le mieux ici
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    For i=1 ti j
    ...
     
    Next i

  9. #9
    Expert confirmé
    Avatar de Lou Pitchoun
    Profil pro
    Inscrit en
    Février 2005
    Messages
    5 038
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Février 2005
    Messages : 5 038
    Par défaut
    Salut

    Je ne vois pas ce qui ne vas pas dans ton code...
    As tu essayé d'écrire ta boucle d'une autre manière :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Do
    ....
    Loop Until i = j
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Do
    ....
    Loop While i < j

  10. #10
    Expert confirmé
    Avatar de Lou Pitchoun
    Profil pro
    Inscrit en
    Février 2005
    Messages
    5 038
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Février 2005
    Messages : 5 038
    Par défaut
    Salut,

    Est ce que ceci peut t'aider ?

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 26
    Par défaut
    Merci pour le lien, je vais tester ça et je te dirai ce que ca donne (en espérant que ça marche!)

    EDIT: Modification faite, mais ca bloque toujours avec le même message d'erreur...

    EDIT2roblème résolu!
    Le SetFocus ne peut pas s'appliquer à un controle donc la propriété visible est "Faux". Je vais donc m'arranger pour le cacher dans un coin...

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

Discussions similaires

  1. [MySQL] Supprimer les erreurs de syntaxe dues aux quotes
    Par gotenks dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 25/01/2006, 16h10
  2. Réponses: 5
    Dernier message: 15/04/2005, 14h22

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