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 :

Coller un champ dans tous les enregistrements d'un sous-formulaire


Sujet :

VBA Access

  1. #1
    Membre à l'essai
    Homme Profil pro
    autre
    Inscrit en
    Décembre 2014
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : autre

    Informations forums :
    Inscription : Décembre 2014
    Messages : 14
    Points : 11
    Points
    11
    Par défaut Coller un champ dans tous les enregistrements d'un sous-formulaire
    Bonjour,

    voici mon problème :

    j'ai une valeur que j'entre dans un champ "champ1" d'un formulaire, qui dispose d'un sous-formulaire en mode "formulaire continu". Je souhaiterais copier ce champ dans tous les champs "champ2" de tous les enregistrements du sous-formulaire.
    Or, la syntaxe

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Me.sous-formulaire.Form.champ2.Value = Me.champ1.Value
    ne copie le champ que sur le premier enregistrement du sous-formulaire. Comment indiquer que la copie doit se faire sur tous les enregistrements ?

    Merci!

  2. #2
    Membre expérimenté Avatar de RobiPMS
    Homme Profil pro
    Conseiller psycho-pédagogique
    Inscrit en
    Octobre 2007
    Messages
    827
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Conseiller psycho-pédagogique
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2007
    Messages : 827
    Points : 1 506
    Points
    1 506
    Par défaut
    Bonjour.

    Le plus simple est de faire une requête de mise à jour du champ2 sur la source de ton sous-formulaire...

    Cordialement.
    N'oubliez pas de tagguer la discussion comme résolue si vous avez été aidé!
    Plus haut monte le singe, plus il montre son cul (Montaigne)
    Je ne réponds pas aux messages personnels concernant des questions discutées dans le forum.

  3. #3
    Membre à l'essai
    Homme Profil pro
    autre
    Inscrit en
    Décembre 2014
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : autre

    Informations forums :
    Inscription : Décembre 2014
    Messages : 14
    Points : 11
    Points
    11
    Par défaut
    Ça m'a l'air compliqué, car mon sous-formulaire est en fait une copie d'un autre formulaire, lui-même produit de 3 requêtes.
    En pratique, qu'appelles-tu "une requête de mise à jour" ? En tant que débutant sur Access, pour moi la requête se limite à un tri, un filtre, une somme, etc... mais je ne crois pas savoir mettre à jour via une requête
    Merci!

  4. #4
    Membre expérimenté Avatar de RobiPMS
    Homme Profil pro
    Conseiller psycho-pédagogique
    Inscrit en
    Octobre 2007
    Messages
    827
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Conseiller psycho-pédagogique
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2007
    Messages : 827
    Points : 1 506
    Points
    1 506
    Par défaut
    Bonjour.

    Dans un premier temps, je te propose de lire cet article expliquant ce qu'est et comment on crée une requête de mise à jour.
    Cela devrait te permettre de voir si cela est applicable dans ton cas (et je ne vois pas pourquoi cela ne le serait pas). Ensuite reviens au forum si tu as besoin qu'on t'aide à élaborer la solution à ton problème.

    Cordialement.
    N'oubliez pas de tagguer la discussion comme résolue si vous avez été aidé!
    Plus haut monte le singe, plus il montre son cul (Montaigne)
    Je ne réponds pas aux messages personnels concernant des questions discutées dans le forum.

  5. #5
    Membre à l'essai
    Homme Profil pro
    autre
    Inscrit en
    Décembre 2014
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : autre

    Informations forums :
    Inscription : Décembre 2014
    Messages : 14
    Points : 11
    Points
    11
    Par défaut
    merci encore robiPMS.
    Cela ne semble pas coller, car la requête mise à jour semble mettre à jour toute la table, or je cherche à modifier uniquement les enregistrements filtrés dans le sous-formulaire.
    Donc je bloque toujours sur comment copier un champ du formulaire principal sur tous les enregistrements déjà existants dans mon sous-formulaire, et pas juste sur le premier?

  6. #6
    Membre expérimenté Avatar de RobiPMS
    Homme Profil pro
    Conseiller psycho-pédagogique
    Inscrit en
    Octobre 2007
    Messages
    827
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Conseiller psycho-pédagogique
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2007
    Messages : 827
    Points : 1 506
    Points
    1 506
    Par défaut
    Tu dois filtrer ta requête de mise à jour de la même manière que la source de ton sous-formulaire. Tu peux donc utiliser la requête-source de ton formulaire pour créer ta requête de mise à jour, en y incluant si besoin est le ou les critère(s) qui filtrent et limitent le contenu à certains enregistrements (ceux que tu veux mettre à jour).

    Si tu as peu d'enregistrements à mettre à jour il y a bien un moyen un peu simpliste qui est de faire une boucle du dernier enregistrement au premier, dans le formulaire, et de mettre à jour ton champ avec le code de ton premier message. Mais ce n'est pas très pro, et beaucoup moins rapide que la requête de mise à jour.

    Je reste à ta disposition pour t'aider plus concrètement si nécessaire.
    N'oubliez pas de tagguer la discussion comme résolue si vous avez été aidé!
    Plus haut monte le singe, plus il montre son cul (Montaigne)
    Je ne réponds pas aux messages personnels concernant des questions discutées dans le forum.

  7. #7
    Membre à l'essai
    Homme Profil pro
    autre
    Inscrit en
    Décembre 2014
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : autre

    Informations forums :
    Inscription : Décembre 2014
    Messages : 14
    Points : 11
    Points
    11
    Par défaut
    J'ai deux questions : comment je peux utiliser la requête-source pour une mise à jour ? Le formulaire est basé initialement uniquement sur une table (filtrée), et non sur une requête. Quand j'ouvre le générateur de requête (propriétés du formulaires/ données/ source), je ne peux ni enregistrer cette requête pour éventuellement la modifier par ailleurs ensuite, ni la modifier en mise à jour directement.

    Par contre ta deuxième proposition pourrait fonctionner, vu que j'ai assez peu d'enregistrements, une quinzaine plus ou moins. Par contre, je ne connais pas les mots pour créer une boucle de copier-coller, tu pourrais m'aider là-dessus ?

    Merci!

  8. #8
    Membre expérimenté Avatar de RobiPMS
    Homme Profil pro
    Conseiller psycho-pédagogique
    Inscrit en
    Octobre 2007
    Messages
    827
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Conseiller psycho-pédagogique
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2007
    Messages : 827
    Points : 1 506
    Points
    1 506
    Par défaut
    La deuxième solution. Imaginons que tu as un bouton "Commande1" pour faire cette mise à jour, bouton situé dans le formulaire principal.
    Le code :
    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
    Private Sub Commande1_Click()
    Me.Sous_formulaire.Form.[Champà mettre à jour].SetFocus   ' tu te positionnes dans le sous-form sur le champ à mettre à jour 
    DoCmd.GoToRecord , , acLast        ' tu vas au dernier enregistrement
    Me.Sous_formulaire.Form.[Champà mettre à jour].Value = Me.[Champ du form principal]
    Call Maj
    End Sub
     
    Function Maj()
    '  cette fonction va boucler du dernier au premier enregistrement. Une erreur se produit à la tentative d'atteindre l'enregistrement précédent quand il n'y en a plus
    '  On la récupère pour afficher le message de réussite et quitter la fonction
    On Error GoTo Maj_Err
    DoCmd.GoToRecord , , acPrevious
    Me.Sous_formulaire.Form.[Champà mettre à jour].Value = Me.[Champ du form principal]
    Call Maj
    Maj_Exit:
        Exit Function
     
    Maj_Err:
        MsgBox "Tous les enregistrements ont été mis à jour"
        Exit Function
    End Function
    Si tu mets cela en place et que ça te convient, marque la discussion comme résolue. Et je te referai un post quand j'aurai un peu plus de temps pour t'expliquer comment faire par rapport à la requête de mise à jour.
    A +
    N'oubliez pas de tagguer la discussion comme résolue si vous avez été aidé!
    Plus haut monte le singe, plus il montre son cul (Montaigne)
    Je ne réponds pas aux messages personnels concernant des questions discutées dans le forum.

  9. #9
    Membre à l'essai
    Homme Profil pro
    autre
    Inscrit en
    Décembre 2014
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : autre

    Informations forums :
    Inscription : Décembre 2014
    Messages : 14
    Points : 11
    Points
    11
    Par défaut
    merci
    pour une raison que je n'arrive pas à comprendre, la commande DoCmd.GoToRecord , , acLast ne voulait pas renvoyer au dernier enregistrement du sous-formulaire, mais qu'au premier.
    Mais avec la base de ton code, j'ai réussi à faire la manip que je voulais, en faisant ça sur un formulaire simple et sans sous-formulaire.
    Bref, tu m'as aidé à enlever une bonne épine du pied
    Merci!

  10. #10
    Membre expérimenté Avatar de RobiPMS
    Homme Profil pro
    Conseiller psycho-pédagogique
    Inscrit en
    Octobre 2007
    Messages
    827
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Conseiller psycho-pédagogique
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2007
    Messages : 827
    Points : 1 506
    Points
    1 506
    Par défaut
    La commande pour atteindre le dernier enregistrement ne marche pas parce qu'il y a une erreur dans mon code, au niveau du SetFocus : c'est au sous-form que l'on doit donner le focus et pas à un champ du sous-form!
    Ce qui suit marche :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Private Sub Commande1_Click()
    Me.Sous_formulaire.SetFocus   ' tu donnes le focus au sous-formulaire
    DoCmd.GoToRecord , , acLast        ' tu vas au dernier enregistrement
    Me.Sous_formulaire.Form.[Champà mettre à jour].Value = Me.[Champ du form principal]
    Call Maj
    End Sub
    N'oubliez pas de tagguer la discussion comme résolue si vous avez été aidé!
    Plus haut monte le singe, plus il montre son cul (Montaigne)
    Je ne réponds pas aux messages personnels concernant des questions discutées dans le forum.

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

Discussions similaires

  1. [AC-2010] InputBox pour remplir un champ dans TOUS les enregistrements filtrés
    Par Vijinn dans le forum VBA Access
    Réponses: 4
    Dernier message: 22/05/2015, 14h46
  2. [AC-2007] Copie d'un champ dans tous les enregistrements (même champ)
    Par toumack dans le forum IHM
    Réponses: 6
    Dernier message: 26/09/2009, 23h31
  3. [AC-2003] Modifier un champ pour tous les enregistrement d'une table
    Par Meph-Dev dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 15/06/2009, 08h41
  4. [AC-2003] Remplissage d'un champ pour tous les enregistrements
    Par oliv45 dans le forum Requêtes et SQL.
    Réponses: 6
    Dernier message: 16/04/2009, 16h31
  5. Réponses: 9
    Dernier message: 01/02/2007, 11h36

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