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 :

Problème simple de syntaxe chemin sous form VBA [AC-2013]


Sujet :

IHM

  1. #1
    Membre régulier
    Femme Profil pro
    emploi
    Inscrit en
    Mars 2014
    Messages
    138
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : emploi

    Informations forums :
    Inscription : Mars 2014
    Messages : 138
    Points : 99
    Points
    99
    Par défaut Problème simple de syntaxe chemin sous form VBA
    Bonjour à tous,


    Malgré mes recherches, je ne parviens pas écrire la bonne syntaxe pour un code d'un bouton (dans un formulaire de recherche) qui via clic ouvre un formulaire avec sous formulaire ou l'une des valeurs est égale à celle du formulaire ou est mon bouton (formulaire de recherche).

    Voici le code que je tente d'utiliser (qui ne fonctionne pas):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub BtonVoirFacture_Click()
    If Me.ID_Facture <> 0 Then
    DoCmd.OpenForm "F_Clients_Factures", , , "Forms.F_Clients_Factures!SF_Factures.form!ID_Facture =" & Me.ID_Facture
    End If
    End Sub
    Je pense que les plus expérimentés trouveront l'erreur simple; pour ma part je ne suis pas encore bien à l'aise avec la syntaxe VBA.


    Merci d'avance pour vos réponses.
    A bientôt.

  2. #2
    Rédacteur/Modérateur

    Avatar de ClaudeLELOUP
    Homme Profil pro
    Chercheur de loisirs (ayant trouvé tous les jours !)
    Inscrit en
    Novembre 2006
    Messages
    20 596
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de loisirs (ayant trouvé tous les jours !)
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 596
    Points : 281 920
    Points
    281 920
    Par défaut
    Bonjour,

    qui via clic ouvre un formulaire avec sous formulaire ou l'une des valeurs est égale à celle du formulaire ou est mon bouton (formulaire de recherche).
    Pas sûr que cela soit possible en passant une condition.

    Je passerais plutôt le N° de facture en paramètre d’ouverture

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DoCmd.OpenForm "F_Clients_Factures",,,,,,  Me.ID_Facture
    Et dans l’événement Sur Ouverture du formulaire F_Clients_Factures, récupérer [OpenArgs] pour afficher la facture.

  3. #3
    Membre régulier
    Femme Profil pro
    emploi
    Inscrit en
    Mars 2014
    Messages
    138
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : emploi

    Informations forums :
    Inscription : Mars 2014
    Messages : 138
    Points : 99
    Points
    99
    Par défaut
    Bonjour Claude,


    Merci pour ton aide.

    Je rencontre néanmoins une difficulté pour l'ouverture du formulaire F_Clients_Factures en me basant sur l'aide access:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Private Sub Form_Open(Cancel As Integer)
    '    Dim strIDFact As String
    '   strIDFact = Forms!F_Clients_Factures.Form!SF_Factures.OpenArgs
    '    If Len(strIDFact) > 0 Then
    '        DoCmd.GoToControl "ID_Facture"
    '        DoCmd.FindRecord strIDFact, , True, , _
    '           True, , True
    '    End If
    End Sub
    Je ne sais pas trop comment l'écrire autrement pour arriver à mes fins. Aurais-je du le mettre dans le code d'ouverture du sous formulaire directement? (J'ai vaguement essayé mais je n'y suis pas arrivé).

  4. #4
    Rédacteur/Modérateur

    Avatar de ClaudeLELOUP
    Homme Profil pro
    Chercheur de loisirs (ayant trouvé tous les jours !)
    Inscrit en
    Novembre 2006
    Messages
    20 596
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de loisirs (ayant trouvé tous les jours !)
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 596
    Points : 281 920
    Points
    281 920
    Par défaut
    Ton code de l'événement Sur ouverture de F_Clients_Factures devrait ressembler à ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Sub Form_Open(Cancel As Integer)
      If Me.OpenArgs Then
        DoCmd.GoToControl "SF_Factures"
        DoCmd.GoToControl "ID_Facture"
        DoCmd.FindRecord Me.OpenArgs
      End If
    End Sub
    Vois mon test en annexe

  5. #5
    Membre régulier
    Femme Profil pro
    emploi
    Inscrit en
    Mars 2014
    Messages
    138
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : emploi

    Informations forums :
    Inscription : Mars 2014
    Messages : 138
    Points : 99
    Points
    99
    Par défaut
    Merci beaucoup Claude, ça fonctionne.

    EDIT: J'ai parlé un peu vite... En fait ça fonctionne pour un seul et unique client... Si j'en ai plusieurs, ça ne fonctionne plus (probablement à cause de la variable du formulaire parent qui n'est pas transmise- par ex: client 1 fact 1, 2, 3 OK client 2 fact 4 Pas ok, client 1 fact 5 ok...)
    Je vais faire des essais et des recherches à ce sujet, mais si tu passes par la, je veux bien une piste


    Une petite question bonus: je me sers donc du formulaire de recherche pour explorer des factures. Je peux souhaiter en explorer plusieurs (par ex: voir la 5 puis la 7).

    Pour que ce soit plus pratique, voici le code que j'utilise avec mon bouton (du formulaire de recherche):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Private Sub BtonVoirFacture_Click()
    If Me.ID_Facture <> 0 Then
    DoCmd.Close acForm, "F_Clients_Factures"
    DoCmd.OpenForm "F_Clients_Factures", , , , , , Me.ID_Facture
    End If
    End Sub
    Est-ce que c'est propre, sachant que dans la majorité des cas, la ligne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DoCmd.Close acForm, "F_Clients_Factures"
    Ne servira à rien.
    Mon application commencant enfin à ressembler à quelque chose d'à peu près pro (grâce à votre aide à tous), je ne voudrais pas surcharger les actions ou multiplier du code pas forcément approprié au risque de faire ramer certaines utilisations.


    A bientôt.

  6. #6
    Rédacteur/Modérateur

    Avatar de ClaudeLELOUP
    Homme Profil pro
    Chercheur de loisirs (ayant trouvé tous les jours !)
    Inscrit en
    Novembre 2006
    Messages
    20 596
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de loisirs (ayant trouvé tous les jours !)
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 596
    Points : 281 920
    Points
    281 920
    Par défaut
    Tu dois donc passer 2 paramètres : le client et le N° de facture
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Private Sub BtVoir_Click()
      'd'abord fermer F_Clients_Factures s'il est ouvert (indispensable)
      If CurrentProject.AllForms("F_Clients_Factures").IsLoaded Then DoCmd.Close acForm, "F_Clients_Factures"
      'Ouvrir F_Clients_Factures en passant les 2 paramètres
      DoCmd.OpenForm "F_Clients_Factures", , , , , , Me.id_client & "|" & Me.ID_facture
    End Sub

    OpenArgs va donc contenir l’IdClient et le N° de facture que j’ai séparés avec un pipe (« | »). Je choisis un pipe car c’est un caractère rarement utilisé.
    Pour l’événement sur ouverture cela se complique un peu :
    - on va scinder les deux morceaux en utilisant la fonction Split ;
    - on va d’abord se positionner sur le client ;
    - et ensuite, sur la facture.
    Le code devient :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Private Sub Form_Open(Cancel As Integer)
      Dim CliFac() As String
      If Len(Me.OpenArgs) <> 0 Then
          CliFac() = Split(Me.OpenArgs, "|")
          DoCmd.GoToControl "id_client"
          DoCmd.FindRecord CliFac(0)
          DoCmd.GoToControl "SF_Factures"
          DoCmd.GoToControl "ID_Facture"
          DoCmd.FindRecord CliFac(1)
      End If
    End Sub
    Mon test en P.J.
    Fichiers attachés Fichiers attachés

  7. #7
    Membre régulier
    Femme Profil pro
    emploi
    Inscrit en
    Mars 2014
    Messages
    138
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : emploi

    Informations forums :
    Inscription : Mars 2014
    Messages : 138
    Points : 99
    Points
    99
    Par défaut
    Impeccable

    Une petite question de curiosité:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Me.id_client & "|" & Me.ID_facture
    Puis je utiliser cette syntaxe dans la plupart des cas ou je souhaiterais utiliser la fonction split? Je n'ai pas d'idée particulière la sur le moment, mais c'est la deuxième fois que cette fonction split me "résout" un i, problème...

    Merci pour tout et à bientôt.

  8. #8
    Rédacteur/Modérateur

    Avatar de ClaudeLELOUP
    Homme Profil pro
    Chercheur de loisirs (ayant trouvé tous les jours !)
    Inscrit en
    Novembre 2006
    Messages
    20 596
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de loisirs (ayant trouvé tous les jours !)
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 596
    Points : 281 920
    Points
    281 920
    Par défaut
    Puis je utiliser cette syntaxe dans la plupart des cas ou je souhaiterais utiliser la fonction split?
    Oui, pour autant que tu sois sûre que les champs concaténés ne contiennent pas le caractère pipe (« | »).
    Tu dois veiller à ce que les champs ne contiennent pas le caractère que tu choisis comme délimiteur de la fonction Split().

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 08/12/2011, 22h46
  2. Réponses: 1
    Dernier message: 30/08/2010, 10h55
  3. Afficher une arborescence d'un chemin (sous forme JTRee)
    Par thaundeadboss dans le forum Langage
    Réponses: 9
    Dernier message: 03/12/2009, 11h27
  4. Problème de présentation des données sous forme d'un tableau HTML
    Par LaurentDRE dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 05/08/2008, 21h49
  5. [MySQL] problème de mise en page sous forme de tableau HTML
    Par body72 dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 19/03/2008, 20h29

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