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 :

Problème de zone de texte et de procédure évènementielle [AC-2013]


Sujet :

VBA Access

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    102
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 102
    Points : 57
    Points
    57
    Par défaut Problème de zone de texte et de procédure évènementielle
    Bonjour,
    J’ai un formulaire dans lequel il y a plusieurs zones de texte. Ces textes se rapportent à des [Column].
    Nom : 101.jpg
Affichages : 213
Taille : 31,1 Ko
    J’ai créé une procédure évènementielle pour que ces zones s’affichent suivant des critères :
    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
    Private Sub Form_Current()
    Dim strSQL As String
    If Me.C_Sites__oui_non = "11" Then
    strSQL = "SELECT [T-Sites].IDSites, [T-Sites].[S-Nom-Societe], [T-Sites].[S-Adr1], [T-Sites].[S-CP], [T-Sites].[S-Ville], [T-Sites].Payeur " _
    & "From [T-Sites] WHERE [T-Sites].Payeur = " & Me.IDClient & " ORDER BY [T-Sites].[S-Nom-Societe];"
    Me.IDSites.RowSource = strSQL
    Me.IDSites.Requery
    Me.IDSites.Visible = True
    Me.Texte56.Visible = True
    Me.Texte58.Visible = True
    Me.Texte60.Visible = True
    Me.Étiquette59.Visible = True
    Me.Étiquette57.Visible = True
    Me.Cocher64.Visible = True
    Me.Cocher342.Visible = True
    Me.Commande70.Visible = True
    Me.Commande101.Visible = True
    Me.C_Temps_de_trajet.Visible = False
    Me.C_KMS_A_R.Visible = False
    Me.Texte344.Visible = True
    Me.Texte346.Visible = True
    Me.Étiquette345.Visible = True
    Me.Étiquette347.Visible = True
    Else
    Me.IDSites.Visible = False
    Me.Texte56.Visible = False
    Me.Texte58.Visible = False
    Me.Texte60.Visible = False
    Me.Étiquette59.Visible = False
    Me.Étiquette57.Visible = False
    Me.Cocher64.Visible = False
    Me.Cocher342.Visible = False
    Me.Commande70.Visible = False
    Me.Commande101.Visible = False
    Me.C_Temps_de_trajet.Visible = True
    Me.C_KMS_A_R.Visible = True
    Me.Texte344.Visible = False
    Me.Texte346.Visible = False
    Me.Étiquette345.Visible = False
    Me.Étiquette347.Visible = False
    End If
     
    If Me.C_CDF_oui_non = "11" Then
    strSQL = "SELECT [T-CDF].IDCDF, [T-CDF].[CDF-NOM], [T-CDF].[CDF-ADRESS1], [T-CDF].[CDF-CP], [T-CDF].[CDF-VILLE], [T-CDF].[CDF-PAYEUR] " _
    & "From [T-CDF] WHERE [T-CDF].[CDF-PAYEUR] = " & Me.IDClient & " ORDER BY [T-CDF].[CDF-NOM];"
    Me.IDCDF.RowSource = strSQL
    Me.IDCDF.Requery
    Me.IDCDF.Visible = True
    Me.Texte325.Visible = True
    Me.Texte328.Visible = True
    Me.Texte330.Visible = True
    Me.Texte348.Visible = True
    Me.Texte350.Visible = True
    Me.Étiquette329.Visible = True
    Me.Étiquette326.Visible = True
    Me.Étiquette337.Visible = True
    Me.Étiquette349.Visible = True
    Me.Étiquette351.Visible = True
    Me.Commande340.Visible = True
    Me.C_Temps_de_trajet.Visible = False
    Me.C_KMS_A_R.Visible = False
    Me.Commande336.Visible = True
    Else
    Me.IDCDF.Visible = False
    Me.Texte325.Visible = False
    Me.Texte328.Visible = False
    Me.Texte330.Visible = False
    Me.Texte348.Visible = False
    Me.Texte350.Visible = False
    Me.Étiquette329.Visible = False
    Me.Étiquette326.Visible = False
    Me.Étiquette337.Visible = False
    Me.Étiquette349.Visible = False
    Me.Étiquette351.Visible = False
    Me.Commande340.Visible = False
    Me.C_Temps_de_trajet.Visible = True
    Me.C_KMS_A_R.Visible = True
    Me.Commande336.Visible = False
    End If
    End Sub
    Le problème est que les textes 344 (trajet) et 346 (kms) de "Sites" et les textes 348 (forfait km) et 350 (tarif MO) de "CDF" ne s’affichent pas mais leurs étiquettes respectives oui.
    Je les ai recréés pour vérifier que je ne m’étais pas trompé et là les textes apparaissaient mais dès que je modifie les numéros des textes dans la procédure, ils ne s’affichent plus. Il apparaît un numéro dont je ne comprends pas la signification.
    Nom : 1011.jpg
Affichages : 177
Taille : 18,8 Ko Nom : 2021.jpg
Affichages : 183
Taille : 17,7 Ko
    Y a t-il une cause à effet entre les zones de texte et la procédure et si oui comment puis-je régler le problème ?
    Avec mes remerciements, cordialement

  2. #2
    Membre éprouvé

    Homme Profil pro
    Ingénieur retraité
    Inscrit en
    Novembre 2007
    Messages
    904
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur retraité

    Informations forums :
    Inscription : Novembre 2007
    Messages : 904
    Points : 1 229
    Points
    1 229
    Par défaut
    Bonjour

    1 commence par bien revérifier dans chacune des parties de ton code les contrôles qui doivent être visibles ou non
    2 à noter que les étiquettes crées avec les Zones de Texte suivent automatiquement ces dernières quand on les rend visibles ou non

    Titi95
    Un problème bien posé est à moitié résolu

  3. #3
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Bonjour.

    M$ recommande de ne pas supperposer les contrôles pour des raisons de performance ... moi je le recommande pour des raisons de maintenance.
    Personnellement j'utiliserai un contrôle onglet pour faire les 2 affichages.

    Ceci, fait un test sur un formulaire en mettant tous les contrôles côte à côte et vois si tu as toujours le problème.
    Si non vérifie la propriété fond de tes contrôles est bien transparent. Il est possible qu'un contrôle vide en masque un autre.
    Aussi finalise tes réglages dans le formulaire avec les contrôle côte à côte et ensuite supperpose les.

    Et enfin, donne des noms significatifs à tes contrôles. Text344 cela ne dit rien mais txtTrajet ou simplement Trajet c'est beaucoup plus parlant. Même chose pour tous les contrôles qui portent des noms génériques comme CommandeXX.

    Donner des noms signifcatifs aide à la compréhesion de ton code et donc à sa maintenance.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    102
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 102
    Points : 57
    Points
    57
    Par défaut
    Bonjour,

    Merci pour vos réponses. J'ai tout essayé rien ne change. Le numéro qui apparaît est celui du client ...?

    Bref, j'ai créé un contrôle onglet. Dans l'un j'ai mis le site et dans l'autre le CDF. J'ai créé l'évènement suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Private Sub Form_Current()
    If Me.C_Sites__oui_non = "11" Then
    Me.CtlTab366.Visible = True
    Else
    Me.CtlTab366.Visible = False
    End If
     
    If Me.C_CDF_oui_non = "11" Then
    Me.CtlTab366.Visible = True
    Else
    Me.CtlTab366.Visible = False
    End If
    End Sub
    Etant donné que CDF est sur le deuxième onglet, j'aimerais, lorsque j'ouvre un client CDF que l'onglet CDF (Page 368) s'affiche. Est-ce possible et si oui comment l'écrire dans l'évènement ?

    Cordialement

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    102
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 102
    Points : 57
    Points
    57
    Par défaut
    Rectification: le code ci-dessus ne permet pas l'apparition du contrôle onglet lorsqu'il s'agit d'un client.

    Donc je l'ai modifié comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Sub Form_Current()
    If Me.C_Sites__oui_non Or Me.C_CDF_oui_non = "11" Then
    Me.CtlTab366.Visible = True
    Else
    Me.CtlTab366.Visible = False
    End If
    End Sub
    et là, le contrôle onglet apparaît aléatoirement sans prendre en compte la distinction client avec site ou pas.

    Je ne comprends plus rien

  6. #6
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Bonjour.

    Les contrôles "Onglet" sont parfois capricieux.

    Dans ce genre de cas il est recommandé de "voir" ce que fait Access.

    1. Va en mode modification de ton code.
    2. Clique dans la marge à gauche de If Me.C_Sites__oui.
      Cela va afficher un gros point marron (c'est un point d'arrêt).
    3. Sauvegarde et ouvres ton formulaire en mode affichage.
    4. Quand Access va arriver à cette instruction, il va s'arréter et te proposer de passer en mode debug.
    5. Tu choisis débug.
    6. Puis fais exécuter ton code une instruction à la fois en appuyant sur la touche [F8].
      En pointant avec la souris sur une variable ou une propriété Access affiche la valeur.

    Cela devrait te donner une piste.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    102
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 102
    Points : 57
    Points
    57
    Par défaut
    OK, je me réponds concernant le problème d'apparition ou pas. En fait il faut écrire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Sub Form_Current()
    If Me.C_Sites__oui_non = "11" Or Me.C_CDF_oui_non = "11" Then
    Me.CtlTab366.Visible = True
    Else
    Me.CtlTab366.Visible = False
    End If
    End Sub
    Maintenant le contrôle onglet apparaît bien (ou pas) dans les fiches clients suivant le critère "11".

    Il reste le problème des fiches CDF, comment faire pour que la page 2 de l'onglet s'affiche automatiquement à la création ou à l'ouverture d'une fiche CDF ?

  8. #8
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Il y a une propriété sur le contrôle Onglet qui défini la page active.

    Tu peux l'assigner avec une procédure événementielle associée à l'ouverture du formulaire et une à l'ajout.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    102
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 102
    Points : 57
    Points
    57
    Par défaut
    Bonjour marot_r,

    Effectivement les contrôles onglet sont capricieux parce que ce matin en ouvrant une fiche, le Site ne s'affichait pas et à la seconde ouverture tout à fonctionner...allez comprendre.

    Concernant votre dernière réponse, comment je trouve cette propriété et comment je l'insère dans le code ?

    Cordialement

  10. #10
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Bonjour.

    C'est la propriéte Value.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    me.TonControlTab.Value=NumeroPage 'de 0 à N-1 page.
    À adapter à ta réalité pour les noms

    Tu peux mettre ce code dans la procédure événementielle associée à l'événement sur activation du formulaire.
    Cela va changer la page chaque fois que tu vas accéder à l'écran.
    Sinon tu peux utiliser l'événement sur chargement et l'événement avant insertion (à vérifier pour ce dernier).

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    102
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 102
    Points : 57
    Points
    57
    Par défaut
    Bonjour,

    Pour afficher la page CDF sur activation J'ai essayé ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Private Sub Form_Current()
    If Me.C_Sites__oui_non = "11" Or Me.C_CDF_oui_non = "11" Then
       Me.CtlTab366.Visible = True
    Else
      Me.CtlTab366.Visible = False
    End If
     
    If Me.C_CDF_oui_non = "11" Then
       Me.CtlTab366.Value = "n - 1"
    End If
     
    End Sub
    j'ai essayé sans les ", avec majuscule, en écrivant Page368 avec ou sans " mais ça ne fonctionne pas. Pouvez-vous me dire où je me trompe ?
    Cordialement

  12. #12
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Bonjour.

    value est un nombre compris entre 0 et N-1 où N est le nombre total de pages.

    ex :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    me.CtlTab366.Value=3 'Affiche la 4ième page de ton contrôle onget.
    Si tu as besoin de trouver la page par son nom interne (le nom dans la propriété nom) tu peux faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    me.CtlTab366.Value=me.CtlTab366.NomInterneTaPage.PageIndex
    ou

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    me.CtlTab366.Value=me.CtlTab366.Pages("NomInterneTaPage").PageIndex
    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  13. #13
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    102
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 102
    Points : 57
    Points
    57
    Par défaut
    Bonjour marot_r,

    Votre 3ème exemple fonctionne parfaitement.
    Merci pour le temps que vous avez consacré à mon problème.

    Bien cordialement,

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

Discussions similaires

  1. [AC-2003] Problème de zone de texte
    Par ortiz dans le forum IHM
    Réponses: 2
    Dernier message: 29/01/2010, 11h50
  2. Problème de zone de texte
    Par ted1057 dans le forum Macros et VBA Excel
    Réponses: 17
    Dernier message: 29/11/2008, 19h20
  3. Problème de zone de texte dans une GtkVBox
    Par Shugo78 dans le forum GTK+ avec C & C++
    Réponses: 2
    Dernier message: 18/09/2007, 17h21
  4. Problème de zone de texte qui s'étire.
    Par Shugo78 dans le forum GTK+ avec C & C++
    Réponses: 6
    Dernier message: 01/08/2007, 22h04
  5. Problème Effacer Zone de texte
    Par fomblardo dans le forum GTK+ avec C & C++
    Réponses: 2
    Dernier message: 12/03/2007, 17h52

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