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 :

bouton "annulez" inefficace : cela enregistre !


Sujet :

IHM

  1. #1
    Membre habitué
    Inscrit en
    Mars 2008
    Messages
    312
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 312
    Points : 139
    Points
    139
    Par défaut bouton "annulez" inefficace : cela enregistre !
    Bonjour,

    Je peaufine ma base de données sur access 2000.

    Le formulaire principal dispose d'un bouton "ajout facture" (pour faire des factures) en ouvrant le formulaire "facture" avec le code suivant sur le bouton :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        stLinkCriteria = "[N°dossier]=" & Me![N°dossier]
        DoCmd.OpenForm "facture", , , stLinkCriteria
        DoCmd.GoToRecord , , acNewRec
    Cela m'ouvre mon formulaire et incrémente le n° de facture de 1 ... tout va bien (pour l'instant) ...

    Sur mon formulaire facture, j'ai ajouté un bouton "annulez" qui a vocation à sortir du formulaire "facture", sans que la facture ne soit enregistrée ... et faire en sorte que l'incrémentation soit annulée ....

    Le code du bouton "annulez" est le suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DoCmd.Close acForm, "facture", acSaveNo
    Je sors bien de mon formulaire "facture" mais quand je clique à nouveau sur mon bouton "ajout facture", et bien ma facture précédente (qui devrait ne pas exister) a été sauvegardée ... ce qui fausse ma numérotation pour la facture suivante car la facture précédente n'a, "comptablement", jamais existé.

    Je pense que le pb se situe au niveau du bouton "ajout facture" mais j'ai essayé tous les dérivés (aclast, etc.) à la place de acnewrec .... sans succès.

    Quelqu'un aurait-il une idée ?

    Merci d'avance !

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

    Si tu recherches la commande que tu utilises pour annuler dans l'aide tu verras qu'elle permet simplement de fermer un formulaire (ou un autre objet) sans le sauvegarder. Quand je dis le sauvegarder je parle de la structure de l'objet pas les données.

    L'annulation dépend du niveau de la modif ou de l'ajout :

    Annule la dernière action, dans le cas ou c'est la saisie d'un champ cette saisie est annulée, si c'est un ajout il est annulé, attention les Numero Auto ne le sont pas !

    Pour des annulations Ajout+saisie, essaye plusieur me.undo ou une destruction d'enregistrement.

    Regarde également la propriété newrec et la méthode undo et leurs connexes dans l'aide. Cela t'apportera des précisions.

    Cordialement,

    A tout besoin sa commande !

  3. #3
    Membre habitué
    Inscrit en
    Mars 2008
    Messages
    312
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 312
    Points : 139
    Points
    139
    Par défaut
    Bonjour,

    Je patauge allègrement ...

    Il est indispensable que le NUMAUTO créé au début de la procédure de création de la facture soit supprimé lorsque j'annule celle-ci afin que la prochaine facutre "récupère" ce précédent NUMAUTO ... et pas un NUMAUTO+1 ...

    Je suis totalement perdu et dans mon désespoir, j'ai même essayé avec les recordset ... sans succès puisque dans mon formulaire j'ai une table facture et ma table "détail facture" (en sous-formulaire) ...

    J'ai essayé "UNDO" et, effectivement, mon NUMAUTO n'est pas supprimé.

    En fait, il faudrait que j'arrive à faire dans un formulaire ce que l'on arrive à faire en mode "feuille de données" i.e. choisir la ligne et l'effacer ....

    AU SECOURS !

  4. #4
    Rédacteur/Modérateur

    Avatar de Heureux-oli
    Homme Profil pro
    Contrôleur d'industrie
    Inscrit en
    Février 2006
    Messages
    21 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Contrôleur d'industrie
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 21 087
    Points : 42 926
    Points
    42 926
    Par défaut
    Salut,

    tu pourrais envisager de supprimer l'enregistrement en cours.

    Soit par une requête, soit par recordset

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Private Sub BoutonAnnuler_Click()
    Dim tempRec As Integer
    tempRec = Me.Facture_id
    MsgBox Me.Facture_id
    DoCmd.GoToRecord record:=acPrevious
    DoCmd.RunSQL "Delete * from t_Factures Where Facture_id = " & tempRec & ";"
    End Sub
    Par exemple.

  5. #5
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 017
    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 017
    Points : 24 547
    Points
    24 547
    Par défaut
    Bonjour,

    C'est le fonctionnement normal du N° AUto. Une fois qu'il est généré seul un compactage de la base permet de l'annuler.

    D'autres solutions existent pour la numerotation.

    Utiliser une table temporaire.
    Créer son propre système de numérotation automatique.

    C'est 2 solutions ont largement été commentées dans le forum. Une petite recherche te permettra de trouver ces posts.

    Cordialement,

  6. #6
    Rédacteur/Modérateur

    Avatar de Heureux-oli
    Homme Profil pro
    Contrôleur d'industrie
    Inscrit en
    Février 2006
    Messages
    21 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Contrôleur d'industrie
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 21 087
    Points : 42 926
    Points
    42 926
    Par défaut
    loufab a raison, j'avais ommis ce détail

    Mon enregistrement est bien supprimé mais on en récupère pas le num auto.

  7. #7
    Membre habitué
    Inscrit en
    Mars 2008
    Messages
    312
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 312
    Points : 139
    Points
    139
    Par défaut
    bonjour et merci ....

    La table temporaire, j'y pensais justement ... je vais regarder ... et reviens vers vous.

  8. #8
    Rédacteur/Modérateur

    Avatar de Heureux-oli
    Homme Profil pro
    Contrôleur d'industrie
    Inscrit en
    Février 2006
    Messages
    21 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Contrôleur d'industrie
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 21 087
    Points : 42 926
    Points
    42 926
    Par défaut
    Je ne pense pas que ce soit une bonne solution d'utiliser une table temporaire pour ce détail.
    Une solution serait la création d'un NumAuto qui peut être en supplément du premier et remplis lors de la sauvegarde.

    Une seconde solution, un numauto fait maison et utilisé à la place du numauto de la table.

  9. #9
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 017
    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 017
    Points : 24 547
    Points
    24 547
    Par défaut
    La table temporaire est un peu lourde en terme de maintenance applicative.

    Si L'"amateur d'emule" se sent de créer une procédure VBA pour la numérotation c'est aussi bien.

  10. #10
    Membre habitué
    Inscrit en
    Mars 2008
    Messages
    312
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 312
    Points : 139
    Points
    139
    Par défaut
    Bonjour ...

    Avant de rentrer dans le vif du sujet, je ne suis pas "amateur de la mule" mais un amateur de l'émulation ... c'est pas pareil

    Sinon, effectivement, la procédure de la table temporaire (après lecture) me semble lourde d'autant plus, qu'à ce jour, j'ai une table "facture" et une table "facture détail" avec un formulaire principal "facture" et un sous-formulaire "facture détail" ... cela commence à faire beaucoup de tables temporaires

    Sinon, heureux-oli (que je remercie encore vivement pour ses conseils en matière de publipostage) comment pourrai-je procéder avec ta (tes) méthodes ?

  11. #11
    Membre habitué
    Inscrit en
    Mars 2008
    Messages
    312
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 312
    Points : 139
    Points
    139
    Par défaut
    Bonjour (re),

    Comme dit Alain SOUCHON : "on avance, on avance"

    Pour ma "double numérotation", je crois avoir trouvé la solution grâce à la FAQ :

    1) je crée une seconde colonne dans ma table "facture" ... ce sera "n°facture" (le numauto étant sur "N°commande) et elle est numérique

    2) j'ajoute à mon formulaire "facture", un champ "N°facture"

    2) dans mon formulaire "facture", j'ai une liste déroulante qui me permet de choisir le destinataire ... et puis dans l'événement "après MAJ", j'ai ajouté le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Dim rst As DAO.Recordset
    Set rst = CurrentDb.OpenRecordset("SELECT MAX([N°facture])AS Maximum FROM [facture]")
    Me!N°facture = rst!Maximum + 1
    rst.Close
    Ainsi, le NUMauto et le N° de facture sont "déconnectés" ... youpi !

    Il ne me reste plus qu'à simuler un "CTRL + Z" en cliquant sur mon bouton "annulez".

    Si quelqu'un a une idée ... je suis preneur.

  12. #12
    Rédacteur/Modérateur

    Avatar de Heureux-oli
    Homme Profil pro
    Contrôleur d'industrie
    Inscrit en
    Février 2006
    Messages
    21 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Contrôleur d'industrie
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 21 087
    Points : 42 926
    Points
    42 926
    Par défaut
    Ça dépend du niveau de tes connaissances.

    La méthode la plus facile est de créer une requête qui va simplement récupérer la valeur maximum de ton champ.

    Tu fais une sous formulaire basé sur cette requête et tu cache ce sous-formulaire.
    Il te suffit pour la valeur par défaut de récupérer la valeur du sous formulaire et de lui ajouter un, l'assistant est idéal.

    Autre option, utiliser les fonctions de domaine.
    http://starec.developpez.com/tuto/fonctionsdomaines/

    Enfin une dernière qui se rapproche de la requête, c'est l'utilisation du DAO pour récupérer la dernière valeur.

    http://warin.developpez.com/access/dao/

    Et enfin la FAQ
    http://access.developpez.com/faq/?pa...ds#LastNumAuto
    http://access.developpez.com/faq/?pa...reerSonNumAuto

  13. #13
    Membre habitué
    Inscrit en
    Mars 2008
    Messages
    312
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 312
    Points : 139
    Points
    139
    Par défaut
    Merci heureux-Oli

    J'ai mis en place ce code sur mon bouton "annulez" :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DoCmd.RunCommand acCmdDeleteRecord
    Et çà marche ... un peu

    En effet, tant que je n'entre rien dans la table "detail facture", cela fonctionne ...

    Par contre, dès que je mets une ligne dans mon sous-formulaire détail commande ... quand je clique ... impossible d'effacer ... enregistrement connexe dans la table "detail facture" ...

    Je vais lire les docs que tu m'as communiqués.

  14. #14
    Membre habitué
    Inscrit en
    Mars 2008
    Messages
    312
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 312
    Points : 139
    Points
    139
    Par défaut
    Y'à des moments où l'on oublie l'essentiel

    Il suffisait, en plus du code précité, de rajouter dans la liaison facture<->détail facture .... vous savez quoi ... "effacer en cascade" !

    Y'a des moments ... on essaye de réinventer la roue ...

    Allez, c'est résolu et merci de vos aides ...

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

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