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 :

probleme avec la fonction for i ..next i


Sujet :

VBA Access

  1. #1
    Membre du Club
    Inscrit en
    Août 2006
    Messages
    134
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 134
    Points : 59
    Points
    59
    Par défaut probleme avec la fonction for i ..next i
    Yop bonjour tout le monde

    voila j'ai creer un code vba (si si c vrai j'y arrive un peu maintenant ^^)
    et j'ai une partie de mon qui est du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    nb = InputBox("combien de comparaison souhaitez vous faire?", "COMPARAISON")
     
    For I = 1 To nb
     
    MsgBox "Comparaison n°" & I, vbOKOnly
        DoCmd.OpenForm "frmcomparaison"
     
        DoCmd.Close acform, "frmcomparaison"
     
    Next I
    bon j'ai pas tout mis ca servirai a rien, ca polluerai et rendrai ma demande incompréhensible...
    voila la commande fais bien ce que je veux ..sauf que j'aimerai qui me lance le "next i" que si (condition) il y a click sur le btnok du formulaire frmcomparaison..parce que la il me lance les boucles sans que je puisse faire qqles choses

  2. #2
    Membre émérite

    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 751
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 751
    Points : 2 368
    Points
    2 368
    Par défaut
    Bonjour/Bonsoir,

    Apparemment tu souhaites que l'exécution de la boucle For Next soit suspendue pendant l'ouverture du formulaire et qu'elle reprenne une fois le formulaire fermé.

    Si c'est ça, alors tu vas être content: on peut ouvrir un formulaire en mode "dialog" ce qui permet de suspendre l'exécution du code qui a ouvert le formulaire, jusqu'à la fermeture de ce formulaire:

    Code vba : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    nb = InputBox("combien de comparaison souhaitez vous faire?", "COMPARAISON")
     
    For I = 1 To nb
        MsgBox "Comparaison n°" & I, vbOKOnly
        DoCmd.OpenForm "frmcomparaison", WindowMode:=acDialog
    Next I

  3. #3
    Membre du Club
    Inscrit en
    Août 2006
    Messages
    134
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 134
    Points : 59
    Points
    59
    Par défaut
    si c pas super ca!
    merci je viens dessayer ca marche bien il faut que je ferme le formulaire

    mais il va falloir ke je jongle entre le module public ou jecris et le module de classe pour dire qu'il ferme le formulaire o clic ou puis je faire qqche comme ca
    ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    nb = InputBox("combien de comparaison souhaitez vous faire?", "COMPARAISON")
     
    For I = 1 To nb
     
    MsgBox "Comparaison n°" & I, vbOKOnly
        DoCmd.OpenForm "frmcomparaison", WindowMode:=acDialog
          'si je click pas sur le bouton ne rien faire
              If btnclik.value = false then
                      'ne rien faire
              else
     'si je clique sur le bouton lancer procédure suivante
        DoCmd.Close acform, "frmcomparaison"
            end if
    Next I

    Attention je sais que je peux regler procédure evenementielle pour le bouton o click faire docmd.close acform, "myform" mais la je suis en procédure publique
    dans le module je ne peux pa faire ca

  4. #4
    Membre émérite

    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 751
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 751
    Points : 2 368
    Points
    2 368
    Par défaut
    OK... Je n'avais pas compris que tu souhaitais interrompre la boucle si le contrôle btnClik.Value = False.

    Donc, si je comprends bien, le contrôle btnClick est un bouton bascule (ou une case à cocher)... tu confirmes ?


    Effectivement, c'est une situation dans laquelle il faut permettre un retour d'information: du formulaire vers le code qui l'a ouvert.

    Maintenant, si tu veux simplement signaler l'interruption demandée par l'utilisateur, je te propose une super ruse de sioux:
    il s'agit de mettre en oeuvre la gestion d'erreur.

    Le principe:
    (1) A la fermeture du formulaire, si btnClik.Value = False, alors on provoque une erreur.
    (2) Dans la boucle, on détecte s'il y a eu un déclenchement d'erreur; dans l'affirmative on sort de la boucle.

    Dans le module de code du formulaire:
    Code vba : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private Sub Form_Close()
        If Me.btnClick = False Then
            On Error Resume Next
     
            'Déclencher l'erreur n°18 (Interruption par l'utilisateur)
            Err.Raise 18, "frmComparaison", "Arrêter les comparaisons"
        End If
    End Sub
    Dans le module de code appelant:
    Code vba : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
        Dim i As Long
     
        On Error Resume Next
     
        For i = 1 To 10
            DoCmd.OpenForm "frmcomparaison", WindowMode:=acDialog
            If Err.Number <> 0 Then Exit For
        Next i

  5. #5
    Membre du Club
    Inscrit en
    Août 2006
    Messages
    134
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 134
    Points : 59
    Points
    59
    Par défaut
    oups non le probleme c que justement mon bouton n'es pas un bouton bascule mais un bouton commande...

    voici ce que je cherche a faire en fait, alors attention fo saccrocher
    j'ai un formulaire de resultats obtenue, c resultats on un code sql(..logique) dans mon module public je recup ce code sql.
    Ce code sql je le transforme en sql insert into pour inserer mes valeur dans un table (ca pa de pb je les reussi)
    puis apres jaimerai modifier ce code sql pour ajouter de nouvelle donnée a la table pour des comparaison
    donc toujour ds le même module public..je demande a l'utilisateur combien de comparaison a faire ?
    et a chaque boucle un formulaire multicritère souvre et la je recompose mon code sql..puis je click sur ajouter btnclic..il lance runsql pour rajouter les nouvelles données a la table et reprend la boucle ainsi de suite suivant le nombre de comparaison choisi...

    donc il faudrai que dans la boucle ...
    boucle 1 ouvrir formulaire frmcomparaison
    selection des nouveaux critères (compo de mon sql)
    o click sur bouton ajouter
    lancer runsql
    fermer le formulaire
    boucle 2 idem
    ....ainsi de suite jusqu'au nombre choisi


    NB la construction du sql je le gère c juste la boucle lévénement clic dans la boucle pour continuer la boucle qu'au clic sur le bouton..et vue que je construit un code sql il faut que tout se passe dans le meme module non?

  6. #6
    Membre émérite

    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 751
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 751
    Points : 2 368
    Points
    2 368
    Par défaut
    Déjà, il y a une erreur:
    un contrôle bouton de commande n'a pas de propriété Value.

    Ensuite, explique moi une chose...

    (1) ===========
    Dans ton formulaire "frmcomparaison" il y a un bouton qui permet de dire qu'on veut ajouter de nouvelles données à la table. ok ?

    Mais de quel moyen dispose l'utilisateur pour dire qu'il ne veut plus continuer les comparaisons: il clique sur un autre bouton ou bien simplement il clique sur la croix de fermeture de la fenêtre formulaire.

    (2) ============
    Si le RunSQL est exécuté dans la boucle, mais que la requête SQL est construite dans le formcomparaison, comment fais-tu pour récupérer le code de la requête SQL ?

    (3) ============
    Tu ferais bien de donner ton code.
    Ce serait plus rapide pour moi, et ça m'éviterait de te poser toutes les questions possibles...
    Merci.
    _

  7. #7
    Membre du Club
    Inscrit en
    Août 2006
    Messages
    134
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 134
    Points : 59
    Points
    59
    Par défaut
    je c que le bouton de commande ne retourne pas de valeur et c bien la mon gros probleme maintenant. comment lui dire alors qu'on click sur le bouton pour fermer le formulaire et lancer la prochaine boucle

    et non mon bouton ajouter est sur le formulaire des resultats celui avant
    ce formulaire affiche les resultats...si lutilisateur veut rajouter des resultats il click sur le bouton..evenement click..on appel la procedure public (necessaire car sql passe d'un formulaire a lautre)
    de la...la procedure public fait
    > msgbox : ajouter de nouveau resultats o resultats précédent vbyesno
    if no ...quitter la sub..if yes continuer
    > si continue msgbox comparaison: combien de comparaison rajouter?
    > recupere valeur combien..dans boucle i to nb
    > dans boucle ouvrir formulaire comparaison..
    > ds formulaire comparaison on choisi les nouveaux critères
    > click sur le bouton ajouter introduit la fermeture du formulaire et la poursuite de la boucle jusqu'a nb

    DOnc o final, mon utilisateur a defini avec nb le nombre de boucle..et a choisi avant cela de lancer ou pas la procédure..si il a mis 100 il fera 100 nouveau ajout...^^ dommage pour lui mais c pa grave ca

  8. #8
    Membre émérite

    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 751
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 751
    Points : 2 368
    Points
    2 368
    Par défaut
    Toc-toc-toc...

    Merci de lire mon précédent message (celui avec le numéro #6).
    Je l'avais complété en même temps que tu donnais ta réponse (le message #7).

    Peux-tu répondre aux points 2 et 3, STP, Merci.
    _

  9. #9
    Membre du Club
    Inscrit en
    Août 2006
    Messages
    134
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 134
    Points : 59
    Points
    59
    Par défaut
    pour la 2/ justement c la ou ca devient compliquer le sql creer dans le frmcomparaison est creer a partir de mon module public directement dans la boucle et non pas en privé a partir du formulaire
    voici le code un peu mais jai peur que ca embrouille tout..
    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    nb = InputBox("combien de génotype souhaitez vous comparer?", "COMPARAISON")
     
    For I = 1 To nb
     
    MsgBox "entrez du gentoype n°" & I, vbOKOnly
        DoCmd.OpenForm "frmcomparaison", WindowMode:=acDialog
     
      'ici code reqsql recuperer plus haut dans module insert into...
      'on recup tout le code jusqu'au where apres le where est effacé
        ReqSQL = Left(ReqSQL, InStr(ReqSQL, "WHERE ") + 5)
        Debug.Print ReqSQL
     
    ' ICI MA PROCEDURE IF ....
    'SI CLICK SUR BOUTON btnrech alors reconstruit mon code sql pour la clause where
     
    Dim sqlwhere As String
     
    'Reconstruction du where pour filtrages des données
        sqlwhere = "(((ReqTOUT.SAMPLE_NUMBER)<>'0')"
     
    'verification du remplissage des box a cases cocher
        If Form_Frmcomparaison.Chk_genotype.Value = True And (IsNull(Form_Frmcomparaison.boxgenotype)) Then
            MsgBox "Attention! Le champs GENOTYPE est vide, selectionner un Génotype ou décocher la case", vbExclamation + vbOKOnly
            Exit Sub
        End If
        If Form_Frmcomparaison.Chk_annee.Value = True And (IsNull(Form_Frmcomparaison.boxANNEE)) Then
            MsgBox "Attention! Le champs ANNEE est vide, selectionner une Année ou décocher la case", vbExclamation + vbOKOnly
            Exit Sub
        End If
        If Form_Frmcomparaison.chk_LIEU.Value = True And (IsNull(Form_Frmcomparaison.boxLIEU)) Then
            MsgBox "Attention! Le champs LIEU est vide, selectionner un Lieu ou décocher la case", vbExclamation + vbOKOnly
            Exit Sub
        End If
        If Form_Frmcomparaison.Chk_Trial.Value = True And (IsNull(Form_Frmcomparaison.boxTRIAL)) Then
            MsgBox "Attention! Le champs TRIAL est vide, selectionner un Trial ou décocher la case", vbExclamation + vbOKOnly
            Exit Sub
        End If
        If Form_Frmcomparaison.ChkSample.Value = True And (IsNull(Form_Frmcomparaison.boxSAMPLE)) Then
            MsgBox "Attention! Le champs SAMPLE_NUMBER est vide, selectionner un Sample_Number ou décocher la case", vbExclamation + vbOKOnly
            Exit Sub
        End If
     
        If Form_Frmcomparaison.ChkSample.Value = True Then
            Dim samp As String
            'capture de la valeur de sample
            samp = Form_Frmcomparaison.boxSAMPLE.Value
            sqlwhere = sqlwhere & " AND ((ReqTOUT.SAMPLE_NUMBER)=""" & samp & """)"
        End If
     
        If Form_Frmcomparaison.Chk_genotype.Value = True Then
            Dim gen As String
            'capture de la valeur pour creer un SQL definitif a sauvegarder si besoin cf plus loin code
            gen = Form_Frmcomparaison.boxgenotype.Value
            sqlwhere = sqlwhere & " AND ((ReqTOUT.Tblsemoule.GENOTYPE)=""" & gen & """)"
        End If
     
        If Form_Frmcomparaison.Chk_annee.Value = True Then
            Dim annee As String
            annee = Form_Frmcomparaison.boxANNEE.Value
            sqlwhere = sqlwhere & " AND ((ReqTOUT.ANNEE)=""" & annee & """)"
        End If
     
        If Form_Frmcomparaison.chk_LIEU.Value = True Then
            Dim loc As String
            loc = Form_Frmcomparaison.boxLIEU.Value
            sqlwhere = sqlwhere & " AND ((ReqTOUT.LIEU)=""" & loc & """)"
        End If
     
        If Form_Frmcomparaison.Chk_Trial.Value = True Then
            Dim trial As String
            trial = Form_Frmcomparaison.boxTRIAL.Value
            sqlwhere = sqlwhere & " AND ((ReqTOUT.TRIAL)=""" & trial & """)"
        End If
     
       ReqSQL = ReqSQL & sqlwhere & ");"
     
    'executer le code sql pour rajouter les nouvelles données dans la table
    DoCmd.SetWarnings False
    DoCmd.RunSQL ReqSQL
     
    DoCmd.Close acform, "frmcomparaison"
    ' POURSUITE DE LA BOUCLE
    Next I
     
    End If
    End Sub

  10. #10
    Membre du Club
    Inscrit en
    Août 2006
    Messages
    134
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 134
    Points : 59
    Points
    59
    Par défaut
    encore plus complet ca donne ca ...mais vraiment je pense ce n'est pas utile de le voir je l'ai fait et verifier a chaque etape il marche impecc
    c juste la gestion de mon sql dans la boucle....
    comment lui dire qu'il ya un click sur le bouton de commande..je pense aprés le reste jy arriverai sans trop de souci

    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    Option Compare Database
     
    Global ReqSQL As String
    Sub cleartable()
    Dim delSQL As String
    'effacement de la table comparaison par creation de requete
    DoCmd.SetWarnings False
    delSQL = "DELETE tblcomparaison.*"
    delSQL = delSQL & "FROM tblcomparaison;"
    DoCmd.RunSQL delSQL
     
    End Sub
     
    Sub construct()
     
    Dim I As Integer, nb As Integer
    Dim InsertSQL As String, comparSQL As String
    Dim reponse As String
     
    reponse = MsgBox("Rajouter des genoypes pour comparaison?", vbExclamation + vbOKCancel, "rapport")
     
    If reponse = vbCancel Then
        'si cancel annuler lexecution de la sub
            Exit Sub
    Else
        'sinon lancer la suite
        'effacement de la table comparaison
        Call cleartable
     
    'reprise de la reqSQL dans 2 nouvelle variable pour travaux
    comparSQL = ReqSQL
    InsertSQL = ReqSQL
    Debug.Print "etape 2 : " & InsertSQL
     
    ' la on recupère la sequence a partir de la gauche jusqu'à FROM non inclus
    InsertSQL = Trim(Left(InsertSQL, InStr(InsertSQL, "FROM ") - 1))
    Debug.Print "etape 3 : " & InsertSQL
    ' toutsql est donc egale a "SELECT sqlselect "
    ' on récupère donc a partir de la droite le sqlselect
    ' taille global moins toute la partie avec le SELECT et moins le Select lui même
    InsertSQL = Right(InsertSQL, Len(InsertSQL) - InStr(InsertSQL, "SELECT ") - Len("SELECT ") + 1)
    'affichage dans la fenetre de sélection de la sequence toutsql qui est egale a "sqlselect "
    Debug.Print "etape 4 : " & InsertSQL
    'if InseI
    InsertSQL = Replace(InsertSQL, "Tblsemoule.GENOTYPE", "Tblsemoule_GENOTYPE", 1)
     
    Debug.Print "resultat chamgement : " & InsertSQL
     
    'InsertSQL = "INSERT INTO " & InsertSQL
     
    ReqSQL = "INSERT INTO tblcomparaison (" & InsertSQL & ") " & ReqSQL
     
    Debug.Print "etape 5 : " & ReqSQL
     
    DoCmd.SetWarnings False
    DoCmd.RunSQL ReqSQL
     
     
    DoCmd.Close acform, "frmresults"
    DoCmd.Close acform, "frmrecherche"
     
    nb = InputBox("combien de génotype souhaitez vous comparer?", "COMPARAISON")
     
    For I = 1 To nb
     
    MsgBox "entrez du gentoype n°" & I, vbOKOnly
        DoCmd.OpenForm "frmcomparaison", WindowMode:=acDialog
     
      'ici code reqsql recuperer plus haut dans module insert into...
      'on recup tout le code jusqu'au where apres le where est effacé
        ReqSQL = Left(ReqSQL, InStr(ReqSQL, "WHERE ") + 5)
        Debug.Print ReqSQL
     
    ' ICI MA PROCEDURE IF ....
    'SI CLICK SUR BOUTON btnrech alors reconstruit mon code sql pour la clause where
     
    Dim sqlwhere As String
     
    'Reconstruction du where pour filtrages des données
        sqlwhere = "(((ReqTOUT.SAMPLE_NUMBER)<>'0')"
     
    'verification du remplissage des box a cases cocher
        If Form_Frmcomparaison.Chk_genotype.Value = True And (IsNull(Form_Frmcomparaison.boxgenotype)) Then
            MsgBox "Attention! Le champs GENOTYPE est vide, selectionner un Génotype ou décocher la case", vbExclamation + vbOKOnly
            Exit Sub
        End If
        If Form_Frmcomparaison.Chk_annee.Value = True And (IsNull(Form_Frmcomparaison.boxANNEE)) Then
            MsgBox "Attention! Le champs ANNEE est vide, selectionner une Année ou décocher la case", vbExclamation + vbOKOnly
            Exit Sub
        End If
        If Form_Frmcomparaison.chk_LIEU.Value = True And (IsNull(Form_Frmcomparaison.boxLIEU)) Then
            MsgBox "Attention! Le champs LIEU est vide, selectionner un Lieu ou décocher la case", vbExclamation + vbOKOnly
            Exit Sub
        End If
        If Form_Frmcomparaison.Chk_Trial.Value = True And (IsNull(Form_Frmcomparaison.boxTRIAL)) Then
            MsgBox "Attention! Le champs TRIAL est vide, selectionner un Trial ou décocher la case", vbExclamation + vbOKOnly
            Exit Sub
        End If
        If Form_Frmcomparaison.ChkSample.Value = True And (IsNull(Form_Frmcomparaison.boxSAMPLE)) Then
            MsgBox "Attention! Le champs SAMPLE_NUMBER est vide, selectionner un Sample_Number ou décocher la case", vbExclamation + vbOKOnly
            Exit Sub
        End If
     
        If Form_Frmcomparaison.ChkSample.Value = True Then
            Dim samp As String
            'capture de la valeur de sample
            samp = Form_Frmcomparaison.boxSAMPLE.Value
            sqlwhere = sqlwhere & " AND ((ReqTOUT.SAMPLE_NUMBER)=""" & samp & """)"
        End If
     
        If Form_Frmcomparaison.Chk_genotype.Value = True Then
            Dim gen As String
            'capture de la valeur pour creer un SQL definitif a sauvegarder si besoin cf plus loin code
            gen = Form_Frmcomparaison.boxgenotype.Value
            sqlwhere = sqlwhere & " AND ((ReqTOUT.Tblsemoule.GENOTYPE)=""" & gen & """)"
        End If
     
        If Form_Frmcomparaison.Chk_annee.Value = True Then
            Dim annee As String
            annee = Form_Frmcomparaison.boxANNEE.Value
            sqlwhere = sqlwhere & " AND ((ReqTOUT.ANNEE)=""" & annee & """)"
        End If
     
        If Form_Frmcomparaison.chk_LIEU.Value = True Then
            Dim loc As String
            loc = Form_Frmcomparaison.boxLIEU.Value
            sqlwhere = sqlwhere & " AND ((ReqTOUT.LIEU)=""" & loc & """)"
        End If
     
        If Form_Frmcomparaison.Chk_Trial.Value = True Then
            Dim trial As String
            trial = Form_Frmcomparaison.boxTRIAL.Value
            sqlwhere = sqlwhere & " AND ((ReqTOUT.TRIAL)=""" & trial & """)"
        End If
     
       ReqSQL = ReqSQL & sqlwhere & ");"
     
    'executer le code sql pour rajouter les nouvelles données dans la table
    DoCmd.SetWarnings False
    DoCmd.RunSQL ReqSQL
    Docmd.setwarnings true
     
    'fermeture du formulaire et passe a la boucle suivante jusqu'a nb
    DoCmd.Close acform, "frmcomparaison"
     
    Next I
     
     
    End If
    End Sub

  11. #11
    Membre émérite

    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 751
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 751
    Points : 2 368
    Points
    2 368
    Par défaut
    Comment l'utilisateur doit-il faire pour dire qu'il ne veut plus ajouter de données?

    Peux-tu répondre à cette question ?

    --------------------

    En te lisant, maintenant je pense qu'il est préférable de ne pas utiliser le mode "dialog" pour frmcomparaison: ce n'est pas adapté à la situation.

    J'ai peut-être une solution à te proposer, mais répond d 'abord à ma question ci-dessus.

    Merci.
    _

  12. #12
    Membre du Club
    Inscrit en
    Août 2006
    Messages
    134
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 134
    Points : 59
    Points
    59
    Par défaut
    il n'a pas besoin de le dire..qu'il ne veut plus ajouter
    puisqu'il a precedement choisi lui meme le nombre de donnée a ajouter...

    avec l'inputbox....si il choisi 2 nouvelles données a rajouter..
    la boucle est lancé deux fois donc pas de pb

  13. #13
    Membre du Club
    Inscrit en
    Août 2006
    Messages
    134
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 134
    Points : 59
    Points
    59
    Par défaut
    ca va tu ty perd pas trop ??
    c pour ca au debut jai pas voulu donner le code
    dsle...de te prendre tout ton temps...

  14. #14
    Membre émérite

    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 751
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 751
    Points : 2 368
    Points
    2 368
    Par défaut
    Donc ton bouton sert juste à dire:

    << ça y est ! j'ai choisi les critères de comparaison... maintenant, on peut ajouter les données... puis après on recommencera la saisie dans le form de comparaison, jusqu'à ce que les I ajouts soient effectués. >>

    C'est comme un "feu vert" attendu par la boucle pour poursuivre les opérations...
    OK ?

    Donc, une fois le "feu au vert", le formulaire de comparaison doit rester accessible pour qu'il soit possible de composer la requête.

    Reste avec moi, je lis ton code.
    Merci.
    _

  15. #15
    Membre du Club
    Inscrit en
    Août 2006
    Messages
    134
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 134
    Points : 59
    Points
    59
    Par défaut
    voui voila c exactement ca...
    tinquiete je bouge pas ..de toute facon une nuit blanche mattend ce soir..^^

  16. #16
    Membre émérite

    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 751
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 751
    Points : 2 368
    Points
    2 368
    Par défaut
    Dans la partie déclaration de ton module de code, ajoute une variable globale que j'ai appelée "FeuVert".

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Public ReqSQL As String
    Public FeuVert As Boolean
    Ensuite dans la boucle, il ne faut pas ouvrir le formcomparaison en mode dialog, sinon tu ne pourrais plus lire ses contrôles une fois le formulaire refermé.
    Donc, à la place la boucle va "surveiller" le FeuVert jusqu'à ce qu'il devienne VRAI.
    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
     
    For I = 1 To nb
        ' pour l'instant le feu est rouge
        FeuVert = False
     
        MsgBox "entrez du gentoype n°" & I, vbOKOnly
     
        DoCmd.OpenForm "frmcomparaison"
     
        'on n'a pas le choix !
        ' il faut faire une boucle d'attente dont la sortie
        ' est conditionnée par le feu vert.
        Do
            ' on ne bloque pas les formulaires ouverts
            ' pour autoriser la saisie
            DoEvents
        Loop Until FeuVert = True
     
        ...
     
        'fermeture du formulaire et passe a la boucle suivante jusqu'a nb
        DoCmd.Close acForm, "frmcomparaison"
     
    Next I
    Maintenant, c'est le formcomparaison qui met le feu au vert, quand on clique sur le bouton btnrech.
    Donc, dans le module de code de formcomparaison, il doit y avoir une procédure événementielle "sur clic" associée au bouton btnrech.

    C'est là que le feu passe au vert.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub btnrech_Click()
        FeuVert = True
    End Sub
    OUFFFFF !
    _

  17. #17
    Membre du Club
    Inscrit en
    Août 2006
    Messages
    134
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 134
    Points : 59
    Points
    59
    Par défaut
    ouah super merci
    jetais justement en train d'essayer un truc ds le genre mais bon etant novice un pe en vba

    javais definie une variable global en string

    en privé javais o click sur btn rech
    ma variable = 1

    en load du formulaire
    ma variable = 2

    et apres dans mon module je lui avait dit que si ma variable = 1 alors executer les instruction ds la boucle..l'idée etait plutot bonne mais bien ma connaissance du vba est trop limité est la compréhension des boleen m'est encore inconnu

    un grand merci!! vraiment !! en plus ca du te prendre du temps ...je te remercie bcp...pe etre qu'un jour j'aurai loccaz de te rendre lappareil


    encore merci
    j'essaye de suite

  18. #18
    Membre du Club
    Inscrit en
    Août 2006
    Messages
    134
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 134
    Points : 59
    Points
    59
    Par défaut
    Et une HOLLLLLLLLLLA pour toi ...ca MARCHE NIKEL
    j'en pleure de joie

    Merciii

  19. #19
    Membre émérite

    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 751
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 751
    Points : 2 368
    Points
    2 368
    Par défaut
    Coucou,
    Citation Envoyé par doogybreton Voir le message
    ouah super merci
    ...
    un grand merci!! vraiment !! en plus ca du te prendre du temps ...je te remercie bcp...pe etre qu'un jour j'aurai loccaz de te rendre lappareil
    Peut être qu'un jour, qui sait...

    Citation Envoyé par doogybreton Voir le message
    ouah super merci
    jetais justement en train d'essayer un truc ds le genre mais bon etant novice un pe en vba
    Je vois que tu tentes des choses et c'est très bien.

    Pour ton information, il est très important de comprendre l'utilisation de l'instruction DoEvents.

    Sans cettte instruction, l'interface d'Access serait fotalement figée, car le code exécuterait la boucle Do-Loop sans jamais prendre en compte les événements sur l'interface utilisateur (frappe de touches, clic souris, etc), et notamment la saisie dans le formulaire frmcomparaison.

    Bonne continuation.
    =JBO=
    _

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

Discussions similaires

  1. Probleme avec la fonction Ontimer
    Par Djule dans le forum MFC
    Réponses: 8
    Dernier message: 27/11/2005, 17h52
  2. Probleme avec la fonction rename()
    Par TheZenZen dans le forum C
    Réponses: 6
    Dernier message: 08/10/2005, 15h59
  3. [LG] Problème avec la Fonction ReadLn en fin de programme
    Par killermano dans le forum Langage
    Réponses: 6
    Dernier message: 23/07/2005, 15h16
  4. [LG]Probleme avec une fonction
    Par xavier1936 dans le forum Langage
    Réponses: 7
    Dernier message: 08/02/2005, 22h48

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