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 :

Récupérer données de la source dynamique d'un sous formulaire Access [AC-2016]


Sujet :

VBA Access

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Mars 2019
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Mars 2019
    Messages : 11
    Points : 9
    Points
    9
    Par défaut Récupérer données de la source dynamique d'un sous formulaire Access
    Bonjour tout le monde,

    Je tiens à préciser que j'ai creusé google à la recherche d'infos avant de poster dans le Forum. Je vais essayer d’être le plus synthétique possible.

    Dans un formulaire A il y a deux sous formulaires :
    • Sous_formulaire 1 : Il a une source dynamique (des requêtes prédéfinies appelées selon le résultat d'une liste déroulante)
    • Sous_formulaire 2 : Il a comme source la table Panier


    Dans les requêtes qui sont appelées par le sous_formulaire 1 il y a une case à cocher "Sélectionné".


    Ce que je veux faire c'est :
    à partir de la source actuelle du sous_formulaire 1 copier les enregistrements où la case "Sélectionné" est vrai, et les coller dans la table Panier.

    J'ai essayé avec le code suivant mais ça ne marche pas du tout :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Private Sub bouton_panier_Click()
     
    Dim cSQL As String
     
     cSQL = "SELECT * INTO Panier"
     cSQL = cSQL + " FROM Forms![Formulaire A]![Sous_formulaire 1].Form.RecordSource "
     cSQL = cSQL + " WHERE Sélectionné.value = True"
     
    End Sub
    Je pense que je me perds entre du SQL et du VBA, ou je mélange d'autres concepts.

    Merci de votre aide ce bout de code va me rendre fou.

  2. #2
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 648
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 648
    Points : 14 626
    Points
    14 626
    Par défaut
    bonsoir,
    essaie comme cela:
    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
    Dim oRst1 As DAO.Recordset
    Dim oRst2 As DAO.Recordset
    ' recordset formulaire 1
    Set oRst1 = Me![Sous_formulaire 1].Form.RecordsetClone
    ' recordset formulaire 2
    Set oRst2 = Me![Sous_formulaire 2].Form.RecordsetClone
     
    Do Until orst1.EOF
        if orst1.fields("Sélectionné") then 
            oRst2.AddNew
            oRst2.Fields("champ1") = orst1.fields("champ1")
            oRst2.Fields("champ2") = orst1.fields("champ2")
            oRst2.Fields("champ3") = orst1.fields("champ3")
            ' ...
            oRst2.Update
        end if
        orst1.movenext
    loop	
    orst1.close
    orst2.close
    set orst1 = nothing
    set orst2 = nothing
    PS: je n'ai pas testé, j'ai fait ça à la volée
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...
    ah non ? donc devant l'écran c'est la connectique ?

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Mars 2019
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Mars 2019
    Messages : 11
    Points : 9
    Points
    9
    Par défaut
    Un grand merci à toi !! effectivement ça marche.
    Cependant, lorsque par exemple je sélectionne 2 articles, que je clique sur ajouter au panier (Donc copie du sous_formulaire 1 vers sous-formulaire 2) ça les copie bien, mais si je sélectionne encore un autre article après ça et que je reclique sur ajouter au panier, le programme ne fait rien.

    Illustration :
    Enregistrement 1 + Enregistrement 2 sélectionnés
    Clique sur ajout au panier
    Copie de enregistrement 1 + enregistrement 2 depuis le sous_formulaire 1 vers le sous_formulaire 2
    MAJ des sélections : Enregistrement 1 + Enregistrement 2 + Enregistrement 3 sélectionnés
    Clique sur ajout au panier --> Rien ne se passe

    Or l'idéal pour moi serait qu'il rajoute à ce moment là l'enregistrement 3 à la table Panier. (Enregistrement 3 seulement puisque les 1 et 2 ont déjà été copiés).

    Merci d'avance !

  4. #4
    Membre expert
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Octobre 2012
    Messages
    1 869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2012
    Messages : 1 869
    Points : 3 448
    Points
    3 448
    Par défaut
    Bonjour dz737, tee_grandbois,

    Clique sur ajout au panier --> Rien ne se passe
    C'est parce que le RecordsetClone est rendu à la fin du jeu d'enregistrement. Il faut le ramener au début avec un ".MoveFirst".

    Or l'idéal pour moi serait qu'il rajoute à ce moment là l'enregistrement 3 à la table Panier. (Enregistrement 3 seulement puisque les 1 et 2 ont déjà été copiés).
    Comment identifier que l'enregistrement 1 et 2 ont été ajoutés? Genre identifiant unique?

    Bonne journée
    Ce qui se conçoit bien s’énonce clairement et les mots pour le dire arrivent aisément. Nicolas Boileau
    Si tout est OK, n'oubliez pas de cliquer sur

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Mars 2019
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Mars 2019
    Messages : 11
    Points : 9
    Points
    9
    Par défaut
    Or l'idéal pour moi serait qu'il rajoute à ce moment là l'enregistrement 3 à la table Panier. (Enregistrement 3 seulement puisque les 1 et 2 ont déjà été copiés).
    Comment identifier que l'enregistrement 1 et 2 ont été ajoutés? Genre identifiant unique?
    Enfaîte j'ai réglé le problème simplement en décochant automatiquement les cases qui ont servi à sélectionner les enregistrements à chaque clique sur Ajouter au Panier.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CurrentDb.Execute "UPDATE Selection SET Sélectionné = False WHERE Sélectionné=True"
    C'est mieux que de se casser la tete à Identifier !


    Sinon pour le .MoveFirst c'est où qu'il faut l’insérer dans le code? J'arrive pas à comprendre la logique derrière le RecordSet.MoveFirst

  6. #6
    Membre expert
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Octobre 2012
    Messages
    1 869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2012
    Messages : 1 869
    Points : 3 448
    Points
    3 448
    Par défaut
    Bonjour dz737,

    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
    Dim oRst1 As DAO.Recordset
    Dim oRst2 As DAO.Recordset
    ' recordset formulaire 1
    Set oRst1 = Me![Sous_formulaire 1].Form.RecordsetClone
    oRst1.MoveFirst  'Ici on force à revenir au début du jeu d'enregistrement
    ' recordset formulaire 2
    Set oRst2 = Me![Sous_formulaire 2].Form.RecordsetClone
     
    Do Until orst1.EOF
        if orst1.fields("Sélectionné") then 
            oRst2.AddNew
            oRst2.Fields("champ1") = orst1.fields("champ1")
            oRst2.Fields("champ2") = orst1.fields("champ2")
            oRst2.Fields("champ3") = orst1.fields("champ3")
            ' ...
            oRst2.Update
        end if
        orst1.movenext
    loop	
    orst1.close
    orst2.close
    set orst1 = nothing
    set orst2 = nothing
    Ligne 5 du code.

    Bonne journée
    Ce qui se conçoit bien s’énonce clairement et les mots pour le dire arrivent aisément. Nicolas Boileau
    Si tout est OK, n'oubliez pas de cliquer sur

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Mars 2019
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Mars 2019
    Messages : 11
    Points : 9
    Points
    9
    Par défaut
    ça marche, un grand merci à vous !

    Je passe le sujet en résolu.

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 13/11/2017, 07h20
  2. Changer Source Objet d'un sous-formulaire
    Par vandrie dans le forum IHM
    Réponses: 6
    Dernier message: 28/11/2007, 14h48
  3. Réponses: 9
    Dernier message: 14/05/2007, 16h57
  4. [DAO]Récupérer le contenu d'un champ d'un sous-formulaire
    Par DonQuiShoote dans le forum VBA Access
    Réponses: 3
    Dernier message: 16/04/2007, 14h00
  5. Réponses: 1
    Dernier message: 29/03/2007, 20h06

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