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

IHM Discussion :

Affecter une procédure a plusieurs contoles en meme temps


Sujet :

IHM

  1. #1
    Membre du Club
    Homme Profil pro
    incompétent têtu
    Inscrit en
    Novembre 2013
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : incompétent têtu
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2013
    Messages : 98
    Points : 56
    Points
    56
    Par défaut Affecter une procédure a plusieurs contoles en meme temps
    bonjour a tous! je cherche lancer la même fonction apres la mise a jour de toutes les zone de texte d'un formulaire je me suis inspirer du code donné par USER SAMBOLA ET GAYOT ICI :
    http://www.developpez.net/forums/d92...ts-formulaire/
    et j'ai ecrit ceci:
    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
     
    Dim txt As TextBox   'avant il y avait : as control
     
     
     
     
    For Each txt In Me.TextBox 'avant il y avait me.control mais ca plantait plus bas .value)  et j'en ai déduis que l'on pouvais pas affecté une valeur a une étiquette alors j'ai voulut prendre que les zone de texte
     
      '
     
           If Me("txt").Value = "" Then
              Me("txt").Value = 0
           End If
     
     
           Me(txt).AfterUpdate = calcul_montant
     
    Next txt
    je pense comme je l'ai mis en commentaire que je n'arrive pas a sélectionner que les controle qui ont les propriété voulu.

    merci de votre aide.

  2. #2
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 035
    Points : 24 610
    Points
    24 610
    Par défaut
    Bonjour,

    For Each txt In Me.TextBox 'avant il y avait me.control mais ca plantait plus bas .value) et j'en ai déduis que l'on pouvais pas affecté une valeur a une étiquette alors j'ai voulut prendre que les zone de texte
    Pas de déduction.

    Ici tu tentes de parcourir le contrôle textbox du formulaire à la recherche d'objet de type textbox.

    Donc remets le code d'origine :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    dim ctl as control
    For Each Ctl In Me.Controls  'parcour chaque contrôle du formulaire.
         if Typeof Ctl Is textbox then  'maintenant tu t'occupes de repérer le type de controle qui te convient
    cf : http://silkyroad.developpez.com/VBA/LesVariables/

    et enfin :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Me(txt).AfterUpdate = calcul_montant
    txt est déjà une variable de type objet qui contient le bon contrôle, inutile de mettre un me devant.

    L'affectation calcul_montant, à moins qu'il ne s'agisse d'une variable String contenant une expression valide ça ne fonctionnera pas.
    cf https://msdn.microsoft.com/fr-fr/library/ff195266.aspx

    l'affectation doit être comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ctl.afterupdate="=mafonction()"
    Tu ne te sert pas assez de F1 et du MSDN.

    Cordialement,

  3. #3
    Membre du Club
    Homme Profil pro
    incompétent têtu
    Inscrit en
    Novembre 2013
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : incompétent têtu
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2013
    Messages : 98
    Points : 56
    Points
    56
    Par défaut presque!
    salut merci de ta réponse, je vois tout as fait l'erreur de raisonnement que je faisait cependant cela ne fonctionne toujours pas le programme ne rentre jamais dans la boucle du " If TypeOf Ctl Is TextBox Then " donc je suppose que aucun controle n'est de ce type pourtant j'ai 19 zone de texte dans mon FRM bizarre non?

    par ailleur la boucle for tourne plus de 50 fois alors que j'ai que 40 controles dans le frm (étiquette comprises).

    je sais que c'est des erreur de débutant mais c'est parceque je suis débutant j'utilise un peu MSDN mais généralement je comprends a peine la moitié, mais ca vas de mieux en mieux.
    voicie le code complet de ce que j'ai fait:
    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
     
    Private Sub Form_Load()
     
    Dim req_para As String
    Dim mds_para As Recordset
    Dim i As Integer
    Dim txt As Control
     
     
     
    Set madb = CurrentDb
     
    req_para = "SELECT TBL_PARAMETRE.* FROM TBL_PARAMETRE WHERE ID_PARAMETRE = 1"
     
        Set mds_para = madb.OpenRecordset(req_para, dbOpenDynaset)
        mds_para.Edit
     
        lst_sess.Value = mds_para("GVAR_SESS_PARAMETRE")
     
        mds_para.Update
        mds_para.Close
     
        Me.Requery
     
     
     
    For Each txt In Me.Controls 'parcour chaque contrôle du formulaire.
     
            If TypeOf Ctl Is TextBox Then  'maintenant tu t'occupes de repérer le type de controle qui te convient
     
                 If Me("txt").Value = "" Then
                   Me("txt").Value = 0
                End If
     
            txt.AfterUpdate = calcul_montant()
     
           End If
     
    Next txt
    'Set Ctl = Nothing
     
    End Sub
     
    Function calcul_montant()
    Dim req, req_mtn_dep, req_mtn_rec, req_jour As String
    Dim mds_mtn_dep, mds_mtn_rec, mtn_jour As Recordset
    Dim mtn_dep, mtn_rec, nb_stag, nb_jour, liv_tee As Double
     
    mtn_dep = 0
    mtn_rec = 0
     
    Set madb = CurrentDb
     
    '----------------------------------
    ' source du formualaire
    '_________________________________________________________________________
     
    req = "SELECT TBL_SESSION.* "
    req = req & "FROM TBL_SESSION "
    req = req & "WHERE TBL_SESSION.ID_SESSION = " & lst_sess.Value
     
    Me.RecordSource = req 
     
    ecetera.....

  4. #4
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 035
    Points : 24 610
    Points
    24 610
    Par défaut
    Tu as un problème de variables. Tu n'utilise pas la même. (ctl txt)

    Active l'option suivante dans VBE : Options/Editeur/Déclaration des variables obligatoires.
    Tu auras surement des surprises mais il faut en passer par là.

  5. #5
    Membre du Club
    Homme Profil pro
    incompétent têtu
    Inscrit en
    Novembre 2013
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : incompétent têtu
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2013
    Messages : 98
    Points : 56
    Points
    56
    Par défaut un petit pas de plus
    j'ai activer l'option pas de surprise pour l'instant mais je suppose que j'en aurais plei au fur et a mesure que j'utiliserai des variable déjà (mal) déclarées
    effectivement ereur de copier collé pour CTL/txt par contre maintenant il me dit:" incompatibilité de type" :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    For Each txt In Me.Controls 'parcour chaque contrôle du formulaire.
          
            If TypeOf txt Is TextBox Then  'maintenant tu t'occupes de repérer le type de controle qui te convient
                 
                 If Me(txt).Value = "" Then ' ici incompatibilité de type
                   Me(txt).Value = 0
                End If
                
            txt.AfterUpdate = calcul_montant()
                
           End If
           
    Next txt

  6. #6
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 035
    Points : 24 610
    Points
    24 610
    Par défaut
    déjà signalé :
    txt est déjà une variable de type objet qui contient le bon contrôle, inutile de mettre un me devant.
    Tu compiles manuellement ou en automatique ?

  7. #7
    Membre du Club
    Homme Profil pro
    incompétent têtu
    Inscrit en
    Novembre 2013
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : incompétent têtu
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2013
    Messages : 98
    Points : 56
    Points
    56
    Par défaut désolé!
    je comprends pas la question et je connais pas la réponse je suppose que je fais comme c'est par défaut mais je suis pas sur!

  8. #8
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 035
    Points : 24 610
    Points
    24 610
    Par défaut
    donc c'est en automatique.

    Si txt est déjà de type contrôle et qu'il est instancié (qu'il fait référence à un contrôle) l'écriture est comme ceci :


  9. #9
    Membre du Club
    Homme Profil pro
    incompétent têtu
    Inscrit en
    Novembre 2013
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : incompétent têtu
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2013
    Messages : 98
    Points : 56
    Points
    56
    Par défaut
    j'avais compris grace a ton précédent message, et j'aurais du comprendre avant si j'avais pris le temps de bien lire le message encore avant. tout fonctionne presque je rentre bien dans les boucles, par contre je mets pas les valeurs des zones de texte a zero comme j'aimerai, car dans ma fonction "calul_montant" j'ai la formule ci-dessous les valeurs des zones de texte sont a null:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    liv_tee = nb_stag * (PRIX_LIVRET_SESSION.Value + PRIX_TEE_SHIRT_SESSION.Value) + REPAS_SESSION.Value + CONSOMABLE_SESSION.Value
    donc je suppose qu'il y a encore un truc simple que j'ai pas compris...

    rapel du 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
    For Each txt In Me.Controls 'parcour chaque contrôle du formulaire.
     
            If TypeOf txt Is TextBox Then  'maintenant tu t'occupes de repérer le type de controle qui te convient
     
                 If txt.Value = "" Then
                   txt.Value = 0
                End If
     
     
     
           End If
     
    Next txt
    For Each txt In Me.Controls 'parcour chaque contrôle du formulaire.
     
            If TypeOf txt Is TextBox Then  'maintenant tu t'occupes de repérer le type de controle qui te convient
     
     
     
            txt.AfterUpdate = calcul_montant()
     
           End If
     
    Next txt

  10. #10
    Membre du Club
    Homme Profil pro
    incompétent têtu
    Inscrit en
    Novembre 2013
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : incompétent têtu
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2013
    Messages : 98
    Points : 56
    Points
    56
    Par défaut encore trop précipité!!!
    correctif en fait je rentre pas dans la boucle là:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    MsgBox (txt) ' txt = null
     
     If txt.Value = "" Then  ' la je rentre pas
                   txt.Value = 0
                End If
    la msgbox ne marche pas car txt = null je croyait que txt devais prendre le nom de chaque zone de texte mais j'entrevois que si je lui dit pas quelque part il peut pas le savoir...

  11. #11
    Membre du Club
    Homme Profil pro
    incompétent têtu
    Inscrit en
    Novembre 2013
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : incompétent têtu
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2013
    Messages : 98
    Points : 56
    Points
    56
    Par défaut je crois que je pollue ma propre discussion
    je me dit que cela dois pas trop se faire d'envoyer trois message d’affilé mais le fait de les écrire me permet de mieux comprendre ce que je fais a l'avenir je chercherai un peu plus avant de bombarder le forum! j'ai donc trouver encore une erreur de raisonnement mais je crois que cette fois-ci je peux pas laller plus loin tout seul:
    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
    For Each txt In Me.Controls 'parcour chaque contrôle du formulaire.
     
            If TypeOf txt Is TextBox Then  'maintenant tu t'occupes de repérer le type de controle qui te convient
     
                 MsgBox (txt.Name) ' là il trouve bien chaque zone de texte
                 MsgBox (txt.Value) ' là il me dit "utilisation incorrecte de null" et que txt.value est null donc msgbox ne marche pas
     
                 If txt.Value = "" Or txt.Value = Null Then ' là il rentre pas alors que txt.value est null je vais me jeter par la fenêtre...
                    txt.Value = 0
     
     
                End If
     
     
     
           End If
     
    Next txt
    For Each txt In Me.Controls 'parcour chaque contrôle du formulaire.
     
            If TypeOf txt Is TextBox Then  'maintenant tu t'occupes de repérer le type de controle qui te convient
     
     
     
            txt.AfterUpdate = calcul_montant()
     
           End If
     
    Next txt
    si tu trouve encore du temps et l'envi de m'aider ce serait vraiment génial!

  12. #12
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 810
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 810
    Points : 14 894
    Points
    14 894
    Par défaut
    la msgbox ne marche pas car txt = null
    bonsoir,
    la Msgbox t'affiche la valeur Null, car par défaut, c'est la propriété Value du contrôle qui est renvoyée. Si tu veux connaitre le nom du contrôle tu dois spécifier la propriété Name
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    MsgBox txt  ' ==> renvoie la valeur du contrôle
    MsgBox txt.Value ' ==> renvoie aussi la valeur du contrôle
    MsgBox txt.Name ' ==> renvoie le nom du contrôle

  13. #13
    Membre du Club
    Homme Profil pro
    incompétent têtu
    Inscrit en
    Novembre 2013
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : incompétent têtu
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2013
    Messages : 98
    Points : 56
    Points
    56
    Par défaut ok mais..
    si la valeur est nul pourquoi il ne rentre pas dans le reste du code (apres le then) pour mettre la valeur de txt a 0 ?

  14. #14
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 810
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 810
    Points : 14 894
    Points
    14 894
    Par défaut
    Bon j'ai posté un peu tard mon dernier post.
    Pour ton dernier post, la syntaxe correcte est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If txt.Value = "" Or IsNull(txt.Value)

  15. #15
    Membre du Club
    Homme Profil pro
    incompétent têtu
    Inscrit en
    Novembre 2013
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : incompétent têtu
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2013
    Messages : 98
    Points : 56
    Points
    56
    Par défaut whaoo!!
    je me jetterai pas par la fenêtre ! ca marche merci beaucoup a tout les deux... je vais essayer de vous mettre un point a chacun si j'y arrive ( ce qui est pas gagné!)

    merci encore je resterai éternellement impressionné par le temps que des gens comme vous deux passez à aider des ignorants comme moi! je sais pas si derrière tout cela il y as de la passion ou de l'engagement "politique" mais ça rassure sur la nature humaine.

Discussions similaires

  1. [AC-2007] Affecter une procédure événementielle en vba
    Par morinxav dans le forum VBA Access
    Réponses: 1
    Dernier message: 27/04/2012, 10h20
  2. Affecter une procédure à une variable
    Par gvdmoort dans le forum Langage
    Réponses: 5
    Dernier message: 26/05/2011, 11h36
  3. Affecter une valeur différente à plusieurs cellules
    Par johannj dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 13/03/2009, 19h08
  4. Réponses: 2
    Dernier message: 25/08/2008, 10h44
  5. Réponses: 2
    Dernier message: 26/05/2006, 18h30

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