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

Access Discussion :

Remplir la zone "détail" d'un formulaire par programmation


Sujet :

Access

  1. #1
    Invité
    Invité(e)
    Par défaut Remplir la zone "détail" d'un formulaire par programmation
    Bonjour à tous,

    Je cherche à alimenter les lignes de mon formulaire se trouvant dans la zone "détail" , où ma ligne contient seulement un champ combo (qui est alimentée à l'aide d'une requête dans l'IHM), comment faire pour insérer de nouvelles lignes?
    J'ai cherché sur google, sans succès.
    Merci

  2. #2
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Développeur VBA/C#/VB.Net/Power Platform
    Inscrit en
    Juillet 2007
    Messages
    14 598
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur VBA/C#/VB.Net/Power Platform
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 598
    Points : 34 286
    Points
    34 286
    Par défaut
    Bonjour,

    je ne suis pas certain d'avoir compris ce que tu cherches a faire

    Parmi les pistes auxquelles je tente de rattacher tes quelques lignes :
    - mettre a jour une valeur dans ta combobox
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Me.Combo.Value = "exemple"
    - je suppose que les lignes auxquelles tu fais allusion sont en fait des enregistrements (1 entree dans une table, composee de champs, et non de colonnes)
    Un peu de lectures sur les moyens de manipuler des donnees
    - en DAO http://warin.developpez.com/access/dao/
    - en ADO http://vb.developpez.com/bidou/recordset-ado/
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  3. #3
    Invité
    Invité(e)
    Par défaut
    Je vais expliquer autrement :
    J'ai un formulaire avec un seul champ, un champ combo, se trouvant dans la section Détail.

    Initialement, dans les propriétés de mon formulaire, dans l'onglet Données :
    -> dans source = SELECT * FROM BENNE;
    -> dans Type de recordset = Feuille de réponse dynamique
    -> Dans Filtre, je n'ai rien

    Dans les propriétés de mon champ combo, dans l'onglet Données :
    -> dans Source contrôle = N°Mat
    -> dans Contenu = SELECT NumMAT FROM MATIEL WHERE TYPEMAT like "BEN" ORDER BY NumMat
    -> Dans Origine source = Table/requête

    Aujourd'hui, mon formulaire ne s'alimente plus par l'IHM mais par programmation, comme la propriété source de mon formulaire est vide, je ne sais pas alimenter la section de mon formulaire.

    Par programmation, j'ai fait:
    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
        Dim l_conn As ADODB.Connection
        Dim l_cmd As ADODB.Command
        Dim l_rst As ADODB.Recordset
        Dim l_query As String
        Set l_conn = New ADODB.Connection
        l_conn.ConnectionString = MyConnectionString()
        l_conn.Open
     
    l_query = "SELECT CodeAffaire, NumMat, TypeMat FROM BENNE WHERE CodeAffaire='" & Forms(l_nomFormulaire)![CodeAffaire] & "'"
            Set l_cmd = New ADODB.Command
        With l_cmd
            .ActiveConnection = l_conn
            .CommandText = l_query
        End With
     
        Set l_rst = l_cmd.Execute
     
        If l_rst.EOF = False Then
            l_rst.MoveFirst
            While l_rst.EOF = False
                Forms![Mise à jour réparation].Form![SF Mise à jour rep]![Num Benne]![N°Mat].Value = l_rst.Fields("NumMat").Value
                l_rst.MoveNext
            Wend
        End If
        l_rst.Close
     
        If l_conn.State <> 0 Then
            l_conn.Close
        End If
    Ce code s'éxécute, le soucis que quand j'ouvre le formulaire principal, le sous formulaire affiche aucune ligne, or ce que j'aimerais :
    - si ma requête renvoie N enregistrements, je vois mes N enregistrements et que j'ai une ligne vierge pour avoir saisir un nouvel enregistrement.
    - si ma requête ne renvoie rien, mon sous formulaire doit afficher une ligne vierge pour pouvoir insérer mon premier enregistrement.

    Afin d'avoir une présentation dans ce genre là :
    Nom : benne_creation_nMat.png
Affichages : 347
Taille : 23,4 Ko

  4. #4
    Invité
    Invité(e)
    Par défaut
    En faisant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    l_query = "SELECT NumMat FROM BENNE WHERE CodeAffaire='R160365'"
    Forms![Mise à jour réparation].Form![SF Mise à jour rep]![Num Benne].RecordSource=l_query
    J'ai le message d'erreur :
    Propriété ou méthode non gérée par cet objet

    En remplaçant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Forms![Mise à jour réparation].Form![SF Mise à jour rep]![Num Benne].RecordSource=l_query
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Forms![Mise à jour réparation].Form![SF Mise à jour rep]![Num Benne].Form.RecordSource=l_query
    Ce n'est guère mieux :
    L'expression entrée fait référence à un objet fermé ou supprimé
    Dernière modification par Invité ; 24/10/2016 à 10h58.

  5. #5
    Expert confirmé

    Homme Profil pro
    consultant développeur
    Inscrit en
    Mai 2005
    Messages
    2 878
    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 878
    Points : 4 754
    Points
    4 754
    Par défaut
    Bonjour,
    Essaie :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Forms![Mise à jour réparation].Form![SF Mise à jour rep]![Num Benne].RowSource=l_query
    Cdlt
    "Always look at the bright side of life." Monty Python.

  6. #6
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par micniv Voir le message
    Bonjour,
    Essaie :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Forms![Mise à jour réparation].Form![SF Mise à jour rep]![Num Benne].RowSource=l_query
    Cdlt
    J'ai le message d'erreur :
    Propriété ou méthode non gérée par cet objet
    Je ne sais pas si ce que je vais dire sera un élément de réponse, toute la partie initialisation de mon formulaire et sous formulaires ne se fait par dans les événements Open, ni Load du formulaire principal, mais je gère cela dans le clic du bouton qui ouvre justement le formulaire principal.

  7. #7
    Expert confirmé

    Homme Profil pro
    consultant développeur
    Inscrit en
    Mai 2005
    Messages
    2 878
    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 878
    Points : 4 754
    Points
    4 754
    Par défaut
    Tu as bien vérifié l'orthographe des tes form / ss-Form/ champ ?
    Cela suppose aussi que la propriété [RowSourceType] la liste deroulante du controle [Num Benne] soit : 'Table/requete'

    dans quel évenement as-tu mis le code de mise à jour de la liste déroulante ?

    Cdlt
    "Always look at the bright side of life." Monty Python.

  8. #8
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par micniv Voir le message
    Cela suppose aussi que la propriété [RowSourceType] la liste deroulante du controle [Num Benne] soit : 'Table/requete'
    Cdlt
    Dans "origine source", j'ai bel et bien "Table/requête" par rapport à la liste déroulante


    Citation Envoyé par micniv Voir le message
    dans quel évenement as-tu mis le code de mise à jour de la liste déroulante ?
    Désormais, le champ combo de mon sous formulaire a pour "origine source" la valeur du paramètre "liste valeurs", dans le code du clic du bouton qui ouvre le formulaire principal, j'essaye de l'alimenter, quand je fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Forms![Mise à jour réparation]![SF Mise à jour rep]![Num Benne]![N°Mat].Clear
    J'ai le message d'erreur
    L'expression entrée fait référence à un objet fermé ou supprimé
    Quand je commente cette ligne de code, ainsi que la partie pour alimenter le champ, le sous formulaire n'affiche rien, même pas de ligne vierge où je peux insérer de nouvelles lignes...
    A croire que le sous formulaire n'est pas ouvert ou un truc dans le genre
    Dernière modification par Invité ; 24/10/2016 à 17h48.

  9. #9
    Expert confirmé

    Homme Profil pro
    consultant développeur
    Inscrit en
    Mai 2005
    Messages
    2 878
    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 878
    Points : 4 754
    Points
    4 754
    Par défaut
    Pour être plus efficace, peux-tu joindre un extrait de ta base ? je regarderai.
    Cdlt
    "Always look at the bright side of life." Monty Python.

  10. #10
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par micniv Voir le message
    Pour être plus efficace, peux-tu joindre un extrait de ta base ? je regarderai.
    Cdlt
    Dans "objet source" de mon sous formulaire, je n'avais plus rien, j'ai remis "Num Benne", le sous formulaire s'affiche enfin, dans la partie "source" du sous formulaire depuis l'IHM, j'ai remis "SELECT NumMat as [N°Mat] FROM BENNE", j'ai remis dans "source contrôle" de ma combobox la valeur N°Mat, du coup, en ouvrant le formulaire principal, j'ai des lignes qui apparaissent dans mon sous formulaire.

    Nouveau problème : comment faire pour y appliquer un filtre qui devra se faire sur le champ CodeAffaire de la table BENNE?

    Bien que j'ai mis
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Forms![Mise à jour réparation]![SF Mise à jour rep]![Num Benne].LinkMasterFields = "CodeAffaire"
    Forms![Mise à jour réparation]![SF Mise à jour rep]![Num Benne].LinkChildFields = "CodeAffaire"
    Mon sous formulaire affiche 2425 enregistrements, alors que normalement, il aurait dû afficher à peu près 2 ou 3 lignes.

    Le fait de mettre ce code dans l'événement AfterUpdate, comme cela a été suggéré ici, le filtre ne s'applique pas...

  11. #11
    Expert confirmé

    Homme Profil pro
    consultant développeur
    Inscrit en
    Mai 2005
    Messages
    2 878
    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 878
    Points : 4 754
    Points
    4 754
    Par défaut
    Romulus,
    Vois dans la PJ une proposition de simplification pour la gestion des numBenne que je trouve anormalement compliquée mise dans un sous formulaire

    Nom : Capture evol numBenne.JPG
Affichages : 396
Taille : 70,0 Ko

    RECTIFICATION : J'ai peut-être enfin compris ! : as-tu un sous-formulaire pour numBenne car tu peux avoir plusieurs bennes par affaire (mais un seul camion et une seule remorque ?)
    dans ce cas, c'est bien un sous-form qu'il te faut avec la bonne requete source, et les champs peres et fils correctement remplis .

    A suivre donc
    Cdlt
    "Always look at the bright side of life." Monty Python.

  12. #12
    Invité
    Invité(e)
    Par défaut
    Bonjour Micniv,

    J'ai exécuté la requête
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT CodeAffaire, count(*) as Nb
    FROM BENNE
    GROUP BY CodeAffaire;
    histoire de savoir si je peux avoir au plus 1 benne par code affaire, justement, ce n'est pas le cas, pour le code affaire R041440, j'ai 10 bennes.
    Ce que je viens de penser et qui serait plus gérable (reste à voir comment le traduire en programmation), ce serait de mettre un champ de saisie qui listerait toutes les bennes séparées par des points virgule par exemple, à côté, un bouton pour ouvrir mon formulaire Num Benne où j'appliquerais le filtre par rapport au champ CodeAffaire de la table BENNE qui dépendrait du champ CodeAffaire du formulaire Mise à jour réparation
    Dernière modification par LittleWhite ; 06/11/2016 à 19h23. Motif: Pas besoin de citer l'intégralité du message précédent

Discussions similaires

  1. Réponses: 25
    Dernier message: 26/01/2007, 17h04

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