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 :

Incompatibilité de type dans 1 formulaire mais pas dans un autre !?


Sujet :

IHM

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    47
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 47
    Points : 28
    Points
    28
    Par défaut Incompatibilité de type dans 1 formulaire mais pas dans un autre !?
    J'ai déjà posté un message sur ce problème mais il n'existe plus suite à un problème du forum ! J'espère que les personnes qui avaient commencé à répondre à ce sujet reviendront.

    Bonjour,

    J'ai 2 formulaires (Conference et Wedding) qui utilisent tous les 2 le même sous-formulaire.
    Bien sur, ces 2 formulaires ne sont pas ouverts en même temps.

    Le code qui suit se trouve dans ce sous-formulaire.
    Mon problème se situe lors de l'ouverture du formulaire "Conference". En effet, j'obtiens un message d'erreur lorsque je souhaite récupérer une valeur du formulaire et l'afficher dans le sous-formulaire.
    J'ai un bouton Refresh et lorsque je clique dessus, la valeur est bien récupéré.
    Dans le formulaire "Wedding", j'utilise les mêmes TextBox, les valeurs sont du même type (il s'agit de la monnaie courante donc là où je suis c'est des £) et je n'ai aucun problème.

    En gras rouge : là où se trouve le problème.
    En gras : d'autres données de même type récupérées dans le formulaire (Wedding) mais ne causant aucune erreur.

    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
    If CurrentProject.AllForms("Wedding").IsLoaded Then
        [...]
        
        If (Forms![Wedding]![PhotographySession] = True) Then
            If Me.CurrentRecord = 1 Then
                Me.Text_Infos = "One invoice > Photography Session"
                Me.DepositAmountRequired = [Forms]![Wedding]![Deposit] * [Forms]![Wedding]![NumberOfHours]
            ElseIf (Me.CurrentRecord >= 2) Then
                DoCmd.GoToRecord , , acFirst
            End If
        Else
            'If first record
            If Me.CurrentRecord = 1 Then
                If ([Forms]![Wedding]![TotalRoomHireCharge] > 0) Then
                    Me.DepositAmountRequired.Value = ([Forms]![Wedding]![TotalRoomHireCharge] + [Forms]![Wedding]!
    
    [TotalAdditionnalCharges]) * 0.3
                    Me.OrderInvoice.Value = 1
                End If
                
                If ([Forms]![Wedding]![TotalDrinksReception] = 0) Then
                    [...]
                Else
                    [...]
                End If
    
            'If second record
            ElseIf Me.CurrentRecord = 2 Then
                [...]
                
                If ([Forms]![Wedding]![TotalDrinksReception] > 0) Then
                    Me.DepositAmountRequired.Value = [Forms]![Wedding]![TotalDrinksReception] * 0.3
                    Me.OrderInvoice.Value = 2
                End If
            ElseIf (Me.CurrentRecord = 3) Then
                DoCmd.GoToRecord , , acFirst
            End If
        End If
        
    'If the Conference form is loaded
    ElseIf CurrentProject.AllForms("Conference").IsLoaded Then
        Me.Command_Refresh.Visible = True
        Me.Command_PreviousRecord.Visible = False
        Me.Command_NextRecord.Visible = False
    
        If (Me.CurrentRecord = 1) Then
            Me.DepositAmountRequired.Value = [Forms]![Conference]![Total_Cost] * 0.3
            Me.Text_Infos.Visible = True
            Me.Text_Infos = ""
        ElseIf (Me.NewRecord = True) Then
            DoCmd.GoToRecord , , acFirst
        End If
    End If
    Dans l'ancien post, (je ne sais plus qui) avait suggéré que cela dépendait de l'ordre d'ouverture ... cette personne avait commencé quelques recherches ...
    J'ai également supprimé le sous-formulaire et recrée dans Conference mais ça n'a rien changé.

    Merci pour votre aide.

  2. #2
    Membre habitué
    Homme Profil pro
    Inscrit en
    Juillet 2007
    Messages
    153
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 153
    Points : 161
    Points
    161
    Par défaut
    Salut,

    Je te retrouvais plus

    Je comprend donc que tu n'as pas eu le temps de lire ce que j'avais écrit, je recommence donc :

    Suite à quelques recherches, je suis arrivé sur une note de MS spécifiant clairement que le chargement des sous-formulaires se fait AVANT celui du formulaire père (voir http://office.microsoft.com/fr-fr/ac...867611036.aspx)

    Je suis à peu près sûr que cela n'est pas modifiable.
    Je me suis tout de même posé la question : pourquoi charger un sous-formulaire avant son père, alors que le fils dépend très probablement de son père.
    Et bien c'est parce qu'un sous-formulaire est avant tout un formulaire, et doit ainsi pouvoir fonctionner indépendement. L'idée est que le code de chargement du sous-formulaire dépendant de son père doit pouvoir être fait dans le sens inverse.
    En effet, dans la pratique on constate qu'accéder à un champ d'un sous-formulaire est beaucoup plus simple que l'inverse :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    'Sous-formulaire accède à un champ de son père : 
    [Forms]![Nom_fomulaire]![Nom_champ].value
     
    'Formulaire accède à un champ de son fils : 
    Nom_champ_sous_formulaire.nom_champ.value
    Ainsi, il te faut placer le code d'initialisation dans chaque formulaire père, au lieu de le faire dans un IF dans le fils :
    Cela donne (juste pour le formulaire qui ne marche pas) :
    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
     
    Sous_Form.Command_Refresh.Visible = True
        Sous_Form.Command_PreviousRecord.Visible = False
        Sous_Form.Command_NextRecord.Visible = False
     
        If (Sous_Form.CurrentRecord = 1) Then
            Sous_Form.DepositAmountRequired.Value = Total_Cost * 0.3
            Sous_Form.Text_Infos.Visible = True
            Sous_Form.Text_Infos = ""
        ElseIf (Sous_Form.NewRecord = True) Then
    'Ici, je ne sais pas comment faire... probablement une procédure public dans le sous-formulaire : 
    'public sub first() 
    '   DoCmd.GoToRecord , , acFirst
    'end sub
              Sous_Form.first
        End If
    Cela devrait régler le problème...

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    47
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 47
    Points : 28
    Points
    28
    Par défaut
    Salut talrashha et merci pour cette réponse rapide.

    Alors j'ai fais ce que tu conseilles et ... j'ai la même erreur !
    Sauf que la, il se met en Debug et m'indique cette ligne en jaune : Call Form_Conference.RefreshSubForm

    En effet, dans l'événement "Form_Current" de mon sous-formulaire, j'appelle la fonction dans le formulaire père Conference qui permet de rafraichir mon sous-formulaire
    Dans cette fonction se trouve la ligne : Form_Payment_SubForm.DepositAmountRequired.Value = Me.Total_Cost * 0.3.
    Lorsque je commente cette ligne : pas d'erreur !


    En fait, comme l'erreur intervient seulement à l'ouverture, je me demande si je n'ai pas foiré sur un ou plusieurs événement(s) ?! Etant sur un Access en anglais, je ne connais pas toujours l'équivalence en français donc je voudrais être sur...
    Je rafraichis mes formulaires sur l'événement "On Current" (le 1er dans liste des événements), si j'ai bien compris, cet événement se lance à chaque fois que l'on change d'enregistrement, est-ce bien ça ?
    J'ai également essayé sur "On Open" et "On Load" mais j'avoue ne pas bien connaitre la différence.

    Peut-être faut-il que je change l'événement au niveau du formulaire 'père' ou 'fils' ...

    Je vais essayer de creuser dans cette branche, si tu as des choses a ajouter, n'hésites pas (ou quelqu'un d'autres !)
    Je vais regardé le lien microsoft que tu as fourni...

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    47
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 47
    Points : 28
    Points
    28
    Par défaut
    Rebonjour,

    J'ai encore regardé ça ce matin (la nuit porte conseille) mais c'est bizarre tout de même !!
    Car dans mon sous-formulaire, je vérifie que le formulaire Conference est bien ouvert grâce à ces quelques lignes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    If CurrentProject.AllForms("Wedding").IsLoaded Then
         Call Form_Wedding.RefreshSubForm
    ElseIf CurrentProject.AllForms("Conference").IsLoaded Then
         Call Form_Conference.RefreshSubForm
    End If
    Donc si le formulaire Conference n'est pas chargé, la fonction ne devrait pas être appelée, non ??

Discussions similaires

  1. Réponses: 11
    Dernier message: 09/09/2010, 02h53
  2. [RegEx] Regex qui fonctionne dans un preg_replace mais pas dans un ereg
    Par méphistopheles dans le forum Langage
    Réponses: 4
    Dernier message: 31/03/2007, 11h56
  3. Réponses: 5
    Dernier message: 02/10/2006, 19h24
  4. Réponses: 2
    Dernier message: 25/03/2006, 18h54
  5. Applet qui s'execute dans un dossier mais pas dans l'autre
    Par Battosaiii dans le forum Applets
    Réponses: 11
    Dernier message: 10/12/2005, 15h54

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