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 :

[A-07] Etats - Création VB d'une ligne supplémentaire


Sujet :

IHM

  1. #1
    Membre régulier Avatar de AlainL
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    178
    Détails du profil
    Informations personnelles :
    Âge : 74
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2008
    Messages : 178
    Points : 90
    Points
    90
    Par défaut [A-07] Etats - Création VB d'une ligne supplémentaire
    Bonjour

    J'ai un état (c'est une facture) comprenant un sous-état (les détails de la facture). Fonctionne parfaitement.

    Mais: Dans certains cas uniquement, il me faut ajouter une ou plusieurs lignes supplémentaires sous cette ligne du détail, et uniquement sous celle-ci, donc avant l'impression de la ligne détail suivante. Je sais comment identifier celles qui ont besoin de cette exception.

    Je pensais donc utiliser un code VB soumis à "Sur Activation" du sous-formulaire qui imprime les détails. Par contre, je ne trouve aucun exemple montrant comment, dans le codage pratique, faire cela.

    Si une bonne âme avait un exemple, cela me serait bien utile

    Merci d'avance.

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour

    J'ai du mal à comprendre ce que tu veux faire

    Peux-tu détailler un peu plus.

    En attendant, tu peux lire cela : Apprendre à Ecrire et Dessiner dans les états Access, à moins que tu t'orientes vers la création dynamique de contrôle, mais là cela ne peut se faire dans ton état, mais dans un module qui fait les transformations dans un état en mode création.

    Philippe

  3. #3
    Membre régulier Avatar de AlainL
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    178
    Détails du profil
    Informations personnelles :
    Âge : 74
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2008
    Messages : 178
    Points : 90
    Points
    90
    Par défaut
    Merci Philippe... je n'avais tout simplement pas "intégré" que IHM concernait... les états :0)

    Bon, j'ai donc un état (facture). Dont les composant son gérés en majorité dynamiquement (à cause des différentes langues) via VB. Pas de problème pour cette partie.

    Il comporte un sous-état, concernant donc les détails de cette facture (produit commandé, quantité, PU, etc). Ceci tient, pour chaque détail, sur une seule ligne et fonctionne parfaitement, aussi en fonction de la langue.

    Tel quel, il me sort ma facture, pour la section détail, ligne après ligne correctement.

    Mais il y manque ceci:
    Lorsque la ligne détail concernant certains produits est préparée, il me faut ajouter une ligne supplémentaire comprenant le numéro de série de ce produit (ou plusieurs si la quantité est > 1). Je sais identifier quels produis sont concernés, et trouver leurs numéros de série et les infos nécessaires dans la table concernée.

    Mais je ne sais pas comment lui dire, via VB, au niveau du détail:
    - quand tu as préparé la ligne standard...
    - ajoutes moi dans ce cas la ou les lignes suivantes...
    - avant de traiter la prochaine ligne détail standard.

    Je ne sais tous simplement pas coder cette série d'instructions. Et je n'ai pas trouvé de réponse à une question équivalente dans les forums et tutos.

    Aurais tu un exemple quelque part ?

    Merci

  4. #4
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 348
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 348
    Points : 19 600
    Points
    19 600
    Billets dans le blog
    65
    Par défaut
    Bonne année,

    Je n'ai pas bien compris en détail ce que tu veux, mais en gros il me semble que tu veux agir sur la source de ton état table ou requête:

    Donc soit tu crée une requête SQL qui prends en compte les lignes suplémentaire en faisant des jointures, soit tu passe par VBA et DAO.recordSet...

    @+

  5. #5
    Invité
    Invité(e)
    Par défaut
    Bonjour

    Citation Envoyé par AlainL Voir le message
    Mais je ne sais pas comment lui dire, via VB, au niveau du détail:
    - quand tu as préparé la ligne standard...
    - ajoutes moi dans ce cas la ou les lignes suivantes...
    - avant de traiter la prochaine ligne détail standard.
    Comme le dit user, le mieux est de faire un test de valeurs en DAO, et ensuite suivant le cas d'ajouter dynamiquement tes champs, puis de générer ton état.

    Si j'ai réussi à saisir ton truc.

    Philippe

  6. #6
    Membre régulier Avatar de AlainL
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    178
    Détails du profil
    Informations personnelles :
    Âge : 74
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2008
    Messages : 178
    Points : 90
    Points
    90
    Par défaut
    Bonjour User et Philippe

    Heu... merci pour vos réponses, mais là... je suis largué .

    Dans mon cas, l'état va s'afficher à l'écran (il n'est donc pas directement imprimé physiquement, c'est l'utilisateur qui le fera manuellement) via le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DoCmd.OpenReport "FACORI", acViewPreview
    J'ai tenté d'utilser
    avec un MsgBox pour vérifier le moment où cette action devrait se passer (essayé sur Sur Activation et Sur Chargement du sous-état contenant les détails), sans résultat, pas de message....

    Code réel utilisé:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Private Sub Report_Load()
    Dim W_Serial
    Dim W_CfId
    ' If DET_SER1 = "" Then GoTo Suite_Fin
    W_Serial = Me.DET_SER1.Value
    W_CfId = DLookup("SER_AEA", "SER", "SER_ID = " & W_Serial)
    MsgBox (W_Serial & " / " & W_CfId)
    Me.Print W_Serial & " / " & W_CfId
    Suite_Fin:
    End Sub
    Note: condition inhibée pour faciliter l'essai.

    Essayé également d'imprimer ce report dans OneNote, toujours pas de message, toujours pas d'impression, que ce soit à l'écran ou dans OneNote de la ligne souhaitée.

    Il y a donc quelque chose que je ne comprends pas.

    User: Je ne vois pas comment le SQL pourrait résoudre cette question, puisqu'à ce stade là, les SQL sélectionnant les enregistrements, tant pour l'état principal que pour le sous-état des détail fonctionnent. Quand au DAO.RecordSet... désolé, mais je suis largué, je ne sais pas les utiliser hors exemples.

    Philippe: Je n'arrive pas non plus à suivre ta réponse (désolé !): pour autant que ma compréhension du processus soit correcte, l'état est déjà en train d'être généré.

    Lorsqu'il génère une des lignes détail, c'est là que je dois aller chercher mon info, et générer cette ou ces lignes supplémentaire(s).

    Merci de votre aide.

  7. #7
    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 551
    Points
    24 551
    Par défaut
    Bonjour,

    Regarde dans Sources/Etats il y a une méthode pour générer des lignes de type facture/devis.

    Il te faudra adapter pour les renseigner.

    Ps : le activate n'est pas l'événement à utiliser dans ton cas, regarde plutot Onformat.

    Cordialement,

  8. #8
    Membre régulier Avatar de AlainL
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    178
    Détails du profil
    Informations personnelles :
    Âge : 74
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2008
    Messages : 178
    Points : 90
    Points
    90
    Par défaut
    Bonjour Loufab

    J'ai passé un "certain temps" sur ton Source/Etat. Si j'ai bien saisi, dans cet exemple, en fait tu génères l'entier de ton état via VBA. Ou alors, je n'ai rien compris au film....

    Cela me semble un tantinet compliqué dans mon cas (enfin... pour moi), vu les procédures déjà en action.

    Ce que je recherche, c'est le "simple" ajout d'une ligne.

    Aurais-tu cela quelque part ?

    Merci de ta patience

  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 551
    Points
    24 551
    Par défaut
    Ce bout de code n'a que la fonction de rajouter/simuler des lignes vides dans le détail pour avoir un cadre de facture toujours identique (genre tableau préimprimé).

    Ce qui t'intéresse là dedans c'est uniquement le mécanisme pour simuler/afficher une ligne (les propriété movelayout nextrecord et autre).

    Autre solution radicalement différente : agir en amont, avant le lancement de l'état. En ajoutant des lignes directement dans la table et les supprimer à la fermeture de l'état (su fermeture).

    Cette dernière solution étant plus simple peut-être.

  10. #10
    Membre régulier Avatar de AlainL
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    178
    Détails du profil
    Informations personnelles :
    Âge : 74
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2008
    Messages : 178
    Points : 90
    Points
    90
    Par défaut
    mmmhhhhh (je pense)... Agir avant le lancement de l'état me semble difficile, puisqu'il est constitué en partie dynamiquement sur Sur Chargement.

    Bon, dans ce cas, mon sous-état qui comporte les détails a bien entendu un SQL qui détermine les éléments sélectionnés qui sont à inclure. J'assume que cela se traduit par un RecordSet.

    Je ne me souviens pas d'avoir lu quelque chose sur cette idée, donc:
    est-il possible d'agir (dans mon cas: ajouter un record supplémentaire, ou plusieurs) dans le recordset ainsi constitué ??????

    Par exemple créer un "clone" du RecordSet, le modifier, puis l'utiliser pour générer la facture ???? (sur un exemple j'ai vu utiliser un code "Me.Recordset.Clone"). Et si oui... comment ?

    La notion d'ajouter des lignes "bidon" temporaires dans la table originale me semble .... heu ... dangereuse. Enfin, je veux dire: je ne maîtrise pas vraiment encore ce genre de codage, et je risquerais donc d'aller y mettre un fichu bazard....

    Merci... c'est fou comme un truc simple en principe peut prendre la tête

  11. #11
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 348
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 348
    Points : 19 600
    Points
    19 600
    Billets dans le blog
    65
    Par défaut
    bonsoir,

    Citation Envoyé par AlainL
    Lorsque la ligne détail concernant certains produits est préparée, il me faut ajouter une ligne supplémentaire comprenant le numéro de série de ce produit (ou plusieurs si la quantité est > 1). Je sais identifier quels produis sont concernés, et trouver leurs numéros de série et les infos nécessaires dans la table concernée.
    vous dites que vous savez identifier quels produits sont concernés par cette ajout..
    Précisément comment faites-vous pour identifier ces produits ?

    Merci à vous,

    Denis

  12. #12
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    121
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 121
    Points : 96
    Points
    96
    Par défaut
    Bonjour,

    Il s'agit du même N° de série que sur un post que tu avais posé ?

    Tu dis que sur certains produits tu dois ajouter le N° de série dans ce cas pourquoi que tu ne concaténes pas tes 2 champs en 1 seul champ dans ton état.

    Ex : Désignation & N° série dans le même champ de ton état

    Si sur certains produits il y a un N° de série ils sera sur la même ligne si il n'y en a pas il n'apparaitra pas et de plus il remontra automatiquement.

  13. #13
    Membre régulier Avatar de AlainL
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    178
    Détails du profil
    Informations personnelles :
    Âge : 74
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2008
    Messages : 178
    Points : 90
    Points
    90
    Par défaut
    User: Dans la table (et si besoin de manière cachée dans le sous-état d'impression) il y a un champ qui m'indique que cette ligne de détail là (et pas une autre) doit impérativement être suivie d'au moins une ligne contenant un numéro de série et des infos nécessaires y relatives.

    Kiki.Gaby: Dans la tables, les numéros de série y relatifs sont inclus comme champs individuels. Par contre, au niveau de la génération de l'état, ils doivent être complétés d'autres informations plus longues, qui ne peuvent pas tenir sur la même ligne.

    Si, dans la définition standard du sous-état, je rajoutais une ligne à ce qui existe, cela imprimerait systématiquement 2 lignes pour chaque produit commandé:
    - ligne 1 détail habituelle, description, prix, etc
    - ligne 2 avec numéro de série etc dans le cas d'un produite le demandant
    - ligne 3 détail habituelle, description, prix, etc
    - ligne 4 ... dans ce cas vide, ce que je ne souhaite pas
    - etc...

    C'était bien évidemment la solution la plus simple, full automatique... Mais ce n'est vraiment pas esthétique comme résultat, outre que cela multiplie inutilement le nombre de ligne de ladite facture. Disons que ma vision de chef d'entreprise est que, tant qu'à faire payer quelqu'un, autant qu'il trouve la facture agéable à lire

    Donc le problème est:

    - soit de supprimer la ligne blanche (ligne 4 ci-dessus), la majorité des lignes détail n'ayant pas besoin de ces infos supplémentaires;

    - soit d'ajouter la ligne 2.

    Et je ne sais faire ni l'un... ni l'autre...

    A vrai dire, ce qui m'étonne, c'est que personne d'autre ne semble avoir déjà posé cette question, c'est un cas vraiment classique dans la gestion commerciale

    Mais je remercie ceux qui acceptent de réfléchir à cette épineuse question. Vraiment. Et un 2 janvier en plus !!!!

    PS: Erreur de ma part, en fait, la suppression de la ligne blanche n'est pas possible... puisqu'il peut y en avoir plus d'une...

    Donc seul l'ajout d'une à n lignes me semble cohérent...

  14. #14
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    121
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 121
    Points : 96
    Points
    96
    Par défaut
    Bonjour,

    En activant la fonction "Auto réductible" de la ligne 4 de ton état si celle-ci ne contient rien elle devrait ne pas apparaitre.

  15. #15
    Membre régulier Avatar de AlainL
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    178
    Détails du profil
    Informations personnelles :
    Âge : 74
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2008
    Messages : 178
    Points : 90
    Points
    90
    Par défaut
    Bonjour Kiki.Gaby

    Je viens d'essayer, en mettant le Auto-Réductible des 5 lignes supplémentaires de mon sous-formulaire à OUI.... mais cela n'a pas l'air de fonctionner:
    Il "m'imprime" simplement de l'espace blanc, en conservant la hauteur totale du sous-formulaire.

    Que ce soit en mettant seulement ces 5 lignes, ou l'ensemble des zones de ce sous-formulaire.

    Mais merci quand même

  16. #16
    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 551
    Points
    24 551
    Par défaut
    réduit les controles jusqu'à ce qu'il ne fasse plus qu'une fine ligne et auto extensible à oui.

  17. #17
    Membre régulier Avatar de AlainL
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    178
    Détails du profil
    Informations personnelles :
    Âge : 74
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2008
    Messages : 178
    Points : 90
    Points
    90
    Par défaut
    YEAHHH !!!!!!! Merci Loufab !!!!!

    En fait, la solution consiste à:

    1 - Inclure les champs nécessaires dans le sous-formulaire;
    2 - Leur attribuer à tous Auto-Extensible = Oui;
    3 - Les réduire à la fine ligne indiquée par loufab;
    4 - superposer exactement ces lignes dans l'ordre dans lequel on veut voir apparaître ces infos (la première dessous, la dernière dessus)- ceci va forcer un saut de ligne entre chaque champ.

    Dans mon cas, j'ai ainsi 5 lignes au maximum, et il n'imprime que celles ayant un contenu, ou aucune. Cela permet de garder visuellement ma facture "agréable" à lire.

    C'est tellement simple qu'il .... fallait y penser

    Un grand merci à vous tous pour votre aide.

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 02/09/2013, 17h39
  2. [AC-2000] Etat:inverser l'affichage, une ligne de D en colonne
    Par kir4000 dans le forum IHM
    Réponses: 4
    Dernier message: 07/07/2009, 11h45
  3. Réponses: 5
    Dernier message: 19/06/2006, 14h17
  4. Création non contrôlée de lignes vides dans une Hash
    Par Ashish_Kebab dans le forum Langage
    Réponses: 1
    Dernier message: 02/04/2006, 19h03
  5. Réponses: 4
    Dernier message: 08/11/2005, 17h13

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