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 :

Code VBA qui plante lorsque base déployée avec le runtime 2013


Sujet :

VBA Access

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Femme Profil pro
    bureautique
    Inscrit en
    Février 2015
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : bureautique

    Informations forums :
    Inscription : Février 2015
    Messages : 16
    Par défaut Code VBA qui plante lorsque base déployée avec le runtime 2013
    Bonjour,
    Je ne connais rien au VBA. J'ai développé une toute petite base documentaire dont les tables sont liées. Dans cette base il y a du code VBA (que j'ai trouvé sur votre site -grand merci-) et que j'ai recopié tel quel. Il sert à créer un état sur filtre de formulaire. Je n'ai pas trouvé comment le faire autrement que par VBA. Il fonctionne parfaitement sur les ordis qui ont access mais ne fonctionne plus dès que je déploie avec un runtime sur un ordi qui n'a pas access.
    Pourriez-vous m'aider, s'il vous plaît ?
    Je vous mets ci-dessous le code du module et les codes de l'état et du formulaire que j'ai nommés exactement comme le code que j'ai trouvé pour être sûre que ça marche même si cela n'a rien à voir avec le contenu. (je pense que vous le reconnaîtrez :-)
    Module nommé synchro_etats:

    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
    30
    31
    32
    Option Compare Database
    Option Explicit
     
    Public Function Report_Synchro(FrmFilter As Form, RepFilter As Report)
    'FrmFilter : Variable Nom du formulaire
    'RepFilter : Variable Nom de l'état correspondant
        Dim ExpFiltre As String  'Variable expression de filtre
        Dim ExpTri As String     'Variable expression de tri
     
        ExpFiltre = FrmFilter.Filter  'Récupère l'exprssion de filtre du formulaire
        ExpTri = FrmFilter.OrderBy    'Récupère l'expression de tri du formulaire
     
        RepFilter.RecordSource = FrmFilter.RecordSource   'affecte à l'état la même source que le formulaire
     
    'Si le formulaire est filtré nous attribuons à l'état l'expression stockée dans la variable ExpFiltre
        If FrmFilter.FilterOn Then
            RepFilter.Filter = ExpFiltre
            RepFilter.FilterOn = True
        Else
            RepFilter.FilterOn = False
        End If
     
    'Si le formulaire est trié attribuons à l'état l'expression stockée dans la variable ExpTri
        If FrmFilter.OrderByOn Then
            RepFilter.OrderBy = ExpTri
            RepFilter.OrderByOn = True
        Else
            RepFilter.OrderByOn = False
        End If
    ' Emplois
    '--------------------------------------------------------
    End Function
    Le code trouvé dans le formulaire nommé : Form_Frm_Stocks

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Option Compare Database
    Option Explicit
    Private Sub Report_Open(Cancel As Integer)
    'Appelle la fonction synchro de l'état
        Call Report_Synchro(Form_Frm_Stocks, Report_Rpt_Stocks)
    End Sub
    Le code trouvé dans l'Etat nommé Report_Rpt_Stocks

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Option Compare Database
    Option Explicit
    Private Sub Report_Open(Cancel As Integer)
    'Appelle la fonction synchro de l'état
        Call Report_Synchro(Form_Frm_Stocks, Report_Rpt_Stocks)
    End Sub
    Sur mon formulaire j'ai un bouton qui ouvre l'état.
    Merci d'avance et infiniment à tous ceux qui prendront la peine de me lire et de m'aider. Je vous avoue que cela fait un mois que j'essaie de régler ce problème et là je baisse les bras.
    Line

  2. #2
    Modérateur

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

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 410
    Par défaut
    Bonjour.

    Je ne vois rien d'anormal.

    Il conviendrait d'insérer des lignes pour la gestion d'erreur, cela te donnerai peut-être une piste.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Private Sub Report_Open(Cancel As Integer)
        'Appelle la fonction synchro de l'état
        on error goto Err_Report_Open
        Call Report_Synchro(Form_Frm_Stocks, Report_Rpt_Stocks)
     
    Exit_Report_Open:
        exit sub
     
    Err_Report_Open:
         msgbox "Erreur : " & err.number & ", " & err.desctription, vbexclamation
         resume Exit_Report_Open
     
    End Sub
    Si tu ne trouves pas tu peux peut-être procéder autrement en fermant puis ouvrant à nouveau ton rapport.

    Les commandes DoCmd.OpenRoport et DoCmd.OpenForm comporte un paramètre (le 4ième de mémoire) qui permet de spécifier un filtre.
    Attention si le formulaire ou le rapport sont déjà ouvert, il faut le fermer puis le rouvrir.

    Voici le code que j'utilise pour ne pas avoir d'erreur lors de cette opération :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Public Sub FermerFormulaire(prmFrmName As String)
        'Ferme le formulaire sans erreur
     
        If CurrentProject.AllForms(prmFrmName).IsLoaded Then
            DoCmd.Close acForm, prmFrmName
        End If
     
    End Sub
    Pour tester en mode runtime sur une machine avec un vrai Access tu peux passer le paramètre /runtime dans la ligne de commande.
    Ici les détails (c'est pour 2003 mais cella reste vrai pour les versions ultérieures).
    How to use command-line switches in Microsoft Access
    https://support.microsoft.com/en-us/kb/209207
    Ce n'est pas exactement comme un vrai runtime mais cela aide.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  3. #3
    Membre averti
    Femme Profil pro
    bureautique
    Inscrit en
    Février 2015
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : bureautique

    Informations forums :
    Inscription : Février 2015
    Messages : 16
    Par défaut
    Merci Infiniment pour avoir pris le temps de regarder et de répondre. Comme je l'ai écrit je ne connais absolument rien à VBA. Je vais donc essayer ce que tu as écrit mot pour mot et je reviendrai te dire si cela a corrigé cette erreur.
    Merci vraiment beaucoup
    Line

  4. #4
    Membre averti
    Femme Profil pro
    bureautique
    Inscrit en
    Février 2015
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : bureautique

    Informations forums :
    Inscription : Février 2015
    Messages : 16
    Par défaut
    J'ai testé chez moi et ça maaaaaaaaaaaaaaaaaaaaaaaarche :-) :-)en appliquant ta première solution. Je teste ça demain dans ma boite et reviens te dire ce que ça donne. Merci, merci et encore merci

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