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 :

modifier sans bug en même temps SourceObjet, champs père et fils ? [AC-2010]


Sujet :

VBA Access

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    138
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 138
    Points : 67
    Points
    67
    Par défaut modifier sans bug en même temps SourceObjet, champs père et fils ?
    Bonjour,

    Malgré mes recherches, je ne trouve comment faire pour modifier en même temps le SourceObjet d'un cadre de sous-formulaire, son champ père et son champ fils sans problème.

    Voici mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Forms![F__Home]![SaisieSFM].SourceObject = FormEnCoursNomSTR & "__Detail"
        Forms![F__Home]![SaisieSFM].LinkMasterFields = "" 'champ père
        Forms![F__Home]![SaisieSFM].LinkChildFields = "" ' champ fils
        Forms![F__Home]![SaisieSFM].LinkMasterFields = "ParentIdTxtZTX" 'champ père
        Forms![F__Home]![SaisieSFM].LinkChildFields = FormEnCoursChampcleSTR ' champ fils
    [F__Home] est le formulaire principal.
    [SaisieSFM] est le cadre contenant le sous-formulaire.
    FormEnCoursNomSTR est la variable contenant le nom du sous-formulaire que je souhaite afficher.
    "ParentIdTxtZTX" est le nom du champs du formulaire principal et qui sert de champ père pour le cadre.
    FormEnCoursChampcleSTR est la variable contenant la clé de la source du sous-formulaire que je souhaite afficher et qui sert de champ fils au cadre.


    Voici mon objectif :

    J'ai un menu qui ouvre toujours le même formulaire qui contient un cadre de sous-formulaire. Chaque bouton du menu change le sous-formulaire dans le cadre.
    Conséquence : il faut changer les champs pères/fils à chaque fois.

    Mon problème :

    Lorsque je clique sur le bouton qui affiche un sous-formulaire différent du précédent ouvert alors il me demande de renseigner la clé du précédent sous-formulaire (donc du précédent champs fils).

    En fait, je pense qu'il faudrait pouvoir vider les propriétés "Objet source", "champs pères" et "Champs fils" en même temps, ce avant de les renseigner à nouveau avec les renseignements pour le nouveau sous-formulaire. Mais je ne trouve comment faire.

    Auriez vous une solution à me proposer SVP ?

  2. #2
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 349
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 349
    Points : 23 813
    Points
    23 813
    Par défaut
    Pourquoi ne pas utiliser un contrôle Onglet avec un sous-formulaire sur chaque onglet. Tu aurais juste à gérer l'affichage des onglets sans changer quoi que ce soit à ta structure de formulaire.

    Autre possibilité remplacer la fonctionnalité père/fils par un filtre dans la source de données du sous-formulaire et des valeurs par défaut dans le sous-formulaire.

    Paramètre :

    =[Forms]![NomTonFormParent]![NomTaClef]

    Valeur par défaut :

    =[Forms]![NomTonFormParent]![NomTaClef]

    Il faut juste faire attention de forcer le rafraichissement de l'affichage lors du changement du "Père".

    A+

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    138
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 138
    Points : 67
    Points
    67
    Par défaut
    Bonjour marot_r et merci pour ton aide

    Je n'ai pas fait le coup des onglets car il pourrait m'en falloir une centaine, autant qu'il y a de formulaire, le tout multiplié par 4 car pour chaque sous-formulaire j'ai déjà 3 autres onglets qui appliquent chacun un filtre différent.

    En fait, j'essaye de faire une application où l'ajout de nouveaux formulaires seraient plus ou moins simple et tous homogènes. De ce fait, presque tout est géré en code VBA, code qui doit pouvoir gérer les différents formulaire. Par exemple, mon formulaire a 2 cadre de sous-formulaires, l'un pour la liste des enregistrements et l'autre pour le formulaire Détails de l'enregistrement sélectionné dans ladite liste. Et çà sera toujours comme cela, que ce soit pour les tables Clients, que les tables Contrats, que les tables Factures, etc. Du coup, mon code VBA crée la requette source du sous-formulaire "liste".

    Par contre, je n'avais pas pensé de faire de même pour le sous-formulaire "Détail". Il faut que je vois si je peux le faire en VBA avec un code commun quelque soit le thème (Clients, contrats, factures, etc). Cela contournerait le problème.

    Merci pour l'idée marot_r. Je viendrais dire si çà fonctionne

  4. #4
    Expert éminent sénior

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Points : 32 311
    Points
    32 311
    Par défaut
    Et si tu le fais dans cet ordre :

    1. père/fils=""
    2. SourceObject=nouvelle source
    3. père/fils=nouvelles valeurs

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    138
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 138
    Points : 67
    Points
    67
    Par défaut
    En fait, on ne peut définir le père/fils (même si on met "= "" ") que si SourceObject est renseigné.

    Mais quand "j'ouvre" un nouveau sous-formulaire le SourceObject est vide alors que les pères/fils sont toujours présents. Je l'ai constaté en mettant des Msgbox avant et après chaque ligne de code. C'est bizarre mais c'est comme çà.

    Donc on tourne en rond car :

    1) pour pouvoir modifier les pères/fils, il faut que SourceObject soit renseigné.

    2) et pour pouvoir modifier SourceObject, il faut que les pères/fils soient vides ou avec déjà les bons renseignement.

    Alors comment fait on quand on se retrouve avec un SourceObject vide et des pères/fils non vides et faux ? C'est un truc de dingue !

    Il aura fallu qu'Access supprime de lui même les Pères/fils lorsque SourceObject était vide mais il ne le fait pas.

    C'est un bug vous croyez ?

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    138
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 138
    Points : 67
    Points
    67
    Par défaut
    Par contre, cela fonctionne lorsqu'on ouvre le formulaire pour la première fois.

    Savez vous s'il y a un moyen d'initialiser le cadre sans fermer et réouvrir le formulaire svp ?

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    138
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 138
    Points : 67
    Points
    67
    Par défaut
    Citation Envoyé par marot_r Voir le message
    Autre possibilité remplacer la fonctionnalité père/fils par un filtre dans la source de données du sous-formulaire et des valeurs par défaut dans le sous-formulaire.
    J'ai repris cette solution en créant le code VBA qui crée la requête source du sous-formulaire et cela fonctionne impeccable.

    Cela règle mon problème mais je ne mets pas le sujet en "résolu" car j'aimerais bien savoir pourquoi le problème sur les pères/enfants et savoir s'il existe une autre solution que celle détournée qu'on a utilisée plus haut.

    Merci à vous pour avoir pris le temps de m'aider

  8. #8
    Expert éminent sénior

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Points : 32 311
    Points
    32 311
    Par défaut
    Ce genre de code fonctionne très bien sur Access 2010 de mon côté :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    If n Mod 2 = 0 Then
        With Me.cadresform
            .SourceObject = "sfrm2"
            .LinkMasterFields = "numero"
            .LinkChildFields = "numero"
        End With
    Else
           With Me.cadresform
            .SourceObject = "sfrm1"
            .LinkMasterFields = "unautrechamp"
            .LinkChildFields = "unautrechamp"
        End With
    End If
    n = n + 1
    A chaque clic sur le bouton, le sous-formulaire change et la liaison change de champs aussi : un coup je filtre sur numero, un coup sur unautrechamp. sfrm1 et sfrm2 n'ont pas la même source de données ni les mêmes champs

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    138
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 138
    Points : 67
    Points
    67
    Par défaut
    Merci Tofalu

    Avant toute chose, j'ai dû mettre par défaut un sous-formulaire bidon dans le cadre "Detail" afin que le cadre ne soit jamais vide. Sinon cela pose forcément problème.

    J'ai ensuite mis ton code adapté :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    With Forms![F__Home]![SaisieSFM]
            .LinkMasterFields = ""
            .LinkChildFields = ""
            .SourceObject = FormEnCoursNomSTR & "__Detail"
            .LinkMasterFields = "ParentIdTxtZTX"
            .LinkChildFields = FormEnCoursChampcleSTR
        End With
    J'ai crée le code pour que le champ "parent" dans le formulaire reprenne automatiquement la clé du sous-formulaire "Liste" (puisque le sous form Détail affiche la fiche détaillée de l'enregistrement sélectionné dans le sous form Liste, et que un père/fils ne peut se faire directement entre deux sous form).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Forms![F__Home]![ParentIdTxtZTX].ControlSource = "=Forms![F__Home]![PrimaireSFM].Form![" & FormEnCoursChampcleSTR & "]"
    Cela fonctionne pour l'onglet principal. Il faut que je l'adapte pour qu'il soit applicable à chaque onglet.

    Cependant, lorsque j'ouvre les sous-formulaires dans le formulaire principal, le traitement est plus long que lorsque j'avais appliqué la méthode de la requête dans le sous form Détail. On a l'impression que les sous-form clignotent rapidement, comme si çà actualisait plusieurs fois.

    çà vous parait normal ?

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    138
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 138
    Points : 67
    Points
    67
    Par défaut
    Je mets le sujet en résolu car je ne pense pas que le ralentissement vienne de çà. En mettant en commentaire toutes les lignes de code relatives aux Pères/fils, on a toujours cet effet de chargement.

    Merci beaucoup à vous car désormais je sais que 2 solutions existent

    Excellente journée.

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 02/10/2012, 00h27
  2. [SP-2010] Modifier plusieurs sites en même temps
    Par diabli73 dans le forum SharePoint
    Réponses: 1
    Dernier message: 15/02/2011, 17h27
  3. [Gimp]Modifier plusieurs calques en même temps ?
    Par byloute dans le forum Imagerie
    Réponses: 0
    Dernier message: 13/02/2009, 13h50
  4. Modifier plusieur object en même temp
    Par jojo86 dans le forum Composants VCL
    Réponses: 4
    Dernier message: 24/01/2008, 14h42
  5. [DW MX2004] Modifier plusieurs page en même temps sous DW
    Par david47000 dans le forum Dreamweaver
    Réponses: 1
    Dernier message: 17/07/2007, 09h17

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