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 :

Enregistrer les valeurs après recalc du form


Sujet :

VBA Access

  1. #1
    Membre du Club
    Inscrit en
    Mars 2007
    Messages
    92
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 92
    Points : 43
    Points
    43
    Par défaut Enregistrer les valeurs après recalc du form
    Bonjour, j'ai un souci avec l'enregistrement de champs calculés,

    J'ai un form "commandes" dans lequel figure un subform "commande_details",
    le champ Montant_ttc (se situant sur le form "commandes") correspondant au montant total des écritures saisies dans mon subform.

    Mon problème est le suivant:

    J'ai plusieurs champ du même type que "Montant_TTC",

    Lorsque que je ferme mon form, je lance une macro servant à copier les valeurs de ces champs calculés dans ma table "commandes".

    Etant donné que mon form comprend de nombreux champs, certaines valeurs sont copiées avant que le form soit entièrement recaclulé, les données copiées ne sont donc pas correctes.


    Y a-t-il un moyen pour ne copier les valeurs seulement après que le form soit entièrement recalculé ?

    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
     
     
    Sub Close_button_click
     
     
    Me.recalc
     
        Montant_HT.Value = Form_Document_details_produits_subform.Order_Total_HT.Value
        Montant_TTC.Value = Form_Document_details_produits_subform.Order_Total_TTC.Value
        Montant_TVA.Value = Montant_TTC.Value - Montant_HT.Value
        Nb_heures_contrat.Value = Form_Document_details_produits_subform.Nb_heures_total.Value
        Restant_du.Value = Restant_du_tempo.Value
        Total_paye.Value = Total_paye_tempo.Value
     
    End sub

  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 006
    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 006
    Points : 24 598
    Points
    24 598
    Par défaut
    Bonjour,

    Merci de ne pas utiliser le langage SMS même partiellement.

    Mets un Do Events avant l'enregistrement.

    Cordialement,
    Détecter les modifications formulaire Cloud storage et ACCESS
    Classe MELA(CRUD) Opérateur IN et zone de liste Opérateur LIKE
    Visitez mon Blog
    Les questions techniques par MP ne sont pas lues et je ne pratique pas la bactériomancie

  3. #3
    Membre du Club
    Inscrit en
    Mars 2007
    Messages
    92
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 92
    Points : 43
    Points
    43
    Par défaut
    Désolé mais cela ne fonctionne pas,

    Mes valeurs sont toujours sauvegardées avant que le form soit entièrement recalculé.

    La seule solution que j'ai trouvée pour l'instant est de mettre un timer (afin de laisser le temps au form de reclacluer les champs), mais cette solution tient vraiment du bidoullage (supposons que l'appli tourne sur une machine plus lente, le timer serai alors inutile).

    Merci

  4. #4
    Expert confirmé

    Homme Profil pro
    consultant développeur
    Inscrit en
    Mai 2005
    Messages
    2 879
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : consultant développeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 879
    Points : 4 755
    Points
    4 755
    Par défaut
    Essaie un après la mise à jour des champs.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Sub Close_button_click
     
     
    Me.recalc
     
        Montant_HT.Value = Form_Document_details_produits_subform.Order_Total_HT.Value
        Montant_TTC.Value = Form_Document_details_produits_subform.Order_Total_TTC.Value
        Montant_TVA.Value = Montant_TTC.Value - Montant_HT.Value
        Nb_heures_contrat.Value = Form_Document_details_produits_subform.Nb_heures_total.Value
        Restant_du.Value = Restant_du_tempo.Value
        Total_paye.Value = Total_paye_tempo.Value
     Me.refresh
    End sub
    "Always look at the bright side of life." Monty Python.

  5. #5
    Membre du Club
    Inscrit en
    Mars 2007
    Messages
    92
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 92
    Points : 43
    Points
    43
    Par défaut
    Désolé mais cela ne toujours fonctionne pas,

    Mes valeurs sont toujours sauvegardées avant que le form soit entièrement recalculé!!!


  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 006
    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 006
    Points : 24 598
    Points
    24 598
    Par défaut
    Le do events tu l'as mis après le me.recalc ?
    Détecter les modifications formulaire Cloud storage et ACCESS
    Classe MELA(CRUD) Opérateur IN et zone de liste Opérateur LIKE
    Visitez mon Blog
    Les questions techniques par MP ne sont pas lues et je ne pratique pas la bactériomancie

  7. #7
    Membre du Club
    Inscrit en
    Mars 2007
    Messages
    92
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 92
    Points : 43
    Points
    43
    Par défaut
    Oui, mais malheureusement les valeurs sont sauvegardées avant qu'elles ait eu le temps d'être mises à jour.

    Voici mon code complet, c'est un peu compliqué (j'utilise des champs temporaires afin de pouvoir annuler les modifications) :
    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
    
    Sub MAJ_CHAMPS_TABLE()
    
    
    
    'MAJ CHAMPS TEMPO --> CHAMPS
    
    
    If Not IsNull(Code_affaire_tempo.Value) Then
        Code_Affaire.Value = Code_affaire_tempo.Value
        Else
        Code_Affaire.Value = ""
    End If
    
    If Not IsNull(Code_commercial_tempo.Value) Then
        Code_commercial.Value = Code_commercial_tempo.Value
        Else
        Code_commercial.Value = ""
    End If
    
    
    
    
    If Not IsNull(Nom_stagiaires_tempo.Value) Then
        Nom_stagiaires.Value = Nom_stagiaires_tempo.Value
        Else
        Nom_stagiaires.Value = ""
    End If
    
    If Not IsNull(Mode_reglement_tempo.Value) Then
        Mode_reglement.Value = Mode_reglement_tempo.Value
        Else
        Mode_reglement.Value = ""
    End If
    
                
    
    
    
    If Not IsNull(ref_document_tempo.Value) Then
    Ref_document.Value = ref_document_tempo.Value
    Else
    Ref_document.Value = Left(Code_Affaire.Value, 2) & Format(Date, "mmyy-") & N_piece.Value
    End If
    
    
    'TYPE DE DOC
    
    If Not IsNull(Type_doc_tempo.Value) Then Type_doc.Value = Type_doc_tempo.Value
    
    If Type_doc_tempo.Value = "Devis" Then
        If IsNull(Date_devis.Value) Then
        Date_devis.Value = Format(Date, "dd-mmmm-yy")
        End If
    End If
    
    If Type_doc_tempo.Value = "Commande" Then
        If IsNull(Date_commande.Value) Then
        Date_commande.Value = Format(Date, "dd-mmmm-yy")
        End If
    End If
    
    
    If Type_doc_tempo.Value = "Facture" Then
        
        'SI FACTURE N'EXISTE PAS ENCORE
        If IsNull(N_facture.Value) Then
        
        
        'DATE FACT
            If Not IsNull(Date_facture_tempo.Value) Then
            Date_facture.Value = Date_facture_tempo.Value
            Else
            Date_facture.Value = Format(Date, "dd-mmmm-yy")
            End If
            
        
        'création du N FACT
         
            If Not IsNull(N_facture_tempo) Then
            N_facture.Value = N_facture_tempo.Value
            Else
            Form_Facture_subform.Date_facture.Value = Format(Date, "dd-mmmm-yy")
            Form_Facture_subform.Code_client.Value = Code_client.Value
            N_facture.Value = Form_Facture_subform.N_facture.Value
            End If
        
        End If
                   
    End If
    
    
    If Type_doc_tempo.Value = "Avoir" Then
    
    
        If IsNull(Date_Avoir.Value) Then
        Date_Avoir.Value = Format(Date, "dd-mmmm-yy")
        End If
        
        
        
    End If
    
    Me.Recalc
    
    DoEvents
    
    
    Total_paye.Value = Form_Document_details_reglement_verse_subform.Total_paye.Value
        
        Montant_HT.Value = Form_Document_details_produits_subform.Order_Total_HT.Value
        Montant_TTC.Value = Form_Document_details_produits_subform.Order_Total_TTC.Value
        Montant_TVA.Value = Montant_TTC.Value - Montant_HT.Value
        Nb_heures_contrat.Value = Form_Document_details_produits_subform.Nb_heures_total.Value
    
    
    
    End Sub

  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 006
    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 006
    Points : 24 598
    Points
    24 598
    Par défaut
    Si tu veux faire une procédure l'annulation, tu peux utiliser directement un undo (Me.undo) sur le formulaire.

    Regarde le propriété me.dirty, me.newrec, me.undo ce sont trois propriétés et méthodes qui permettent de savoir si le record est modifié, si c'est un nouveau et l'annuler le cas échéant.

    Tu peux également passer par une table temporaire qui est plus souple d'utilisation (une saisie, une copie via requete Ajout lors de la validation)

    La méthode que tu utilise me semble un peu capilotractée.
    Détecter les modifications formulaire Cloud storage et ACCESS
    Classe MELA(CRUD) Opérateur IN et zone de liste Opérateur LIKE
    Visitez mon Blog
    Les questions techniques par MP ne sont pas lues et je ne pratique pas la bactériomancie

Discussions similaires

  1. [1.x] Enregistrer les valeurs d'un form dans la table d'un embedform
    Par noreaga10 dans le forum Symfony
    Réponses: 0
    Dernier message: 19/01/2010, 00h19
  2. Réponses: 0
    Dernier message: 11/08/2008, 10h13
  3. [Débutant]Récuperer les valeurs de panel sous forme de matrice
    Par feather1 dans le forum Windows Forms
    Réponses: 3
    Dernier message: 19/02/2008, 18h09
  4. enregistrer les valeurs d'une select mutiple
    Par biba158 dans le forum Langage
    Réponses: 1
    Dernier message: 11/05/2007, 15h51
  5. Réponses: 1
    Dernier message: 29/04/2007, 23h02

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