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 :

Déclarer une procédure en tant que variable dans une procédure globale


Sujet :

VBA Access

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 63
    Points : 56
    Points
    56
    Par défaut Déclarer une procédure en tant que variable dans une procédure globale
    Bonjour,

    Le problème est dans le titre, comment faire ?
    dim SousProcédure as quoi?
    call Procédure(sql as string , ... , SouProcédure) ?
    Si c'est possible, dans mon cas je ne sais pas trop comment écrire ce qui est pour l'instant en gras.

    Pour illustrer avec mon cas, voilà ce que j'arrive à faire :
    J'ai un formulaire avec tableau en sous-form, et un objet classeur excel avec feuille de données et graphe XY nuage de points, qui au lancement du formulaire doit recevoir les labels de la feuille de données et d'autres mises en form.

    Le processus est :
    1. Activation du formulaire - appel de la procédure envoi de données
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Private Sub Form_Current()
    Call redimen
    Dim oWb As Excel.Workbook, sql As String, oFeuille As Worksheet, oGraph As Chart, Procédure As Quoi?
    Set oWb = Forms.RA_Positionnement_Cargo.RA_Positionnement_Cargo_graphe.Object
    sql = "SELECT Distinct Avion, [Volume Soute], [Charge maximale] from RA_Positionnement_Cargo WHERE (InStr(1, SelectionAvions(), Avion) > 0)"
    Set Procedure = RA_Positionnement_Cargo_Etiq(oWb, oFeuille, oGraph)
    
    Call ExporteRequeteToObjetExcel(oWb, oFeuille, oGraph, sql, Procedure)
    end sub
    2. procédure qui va envoyer les données de ma requete sur la feuil1 du classeur excel. A la fin, cette procédure appelle la procédure qui met en forme le graphique
    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
    Sub ExporteRequeteToObjetExcel(oWb As Excel.Workbook, oFeuille As Worksheet, oGraph As Chart, sql As String, Procedure As ?)
        Set oFeuille = oWb.Worksheets(1)
        Set oGraph = oWb.Charts(1)
    
        Dim qdf As QueryDef
        Dim rst As Recordset
        Dim fld As Field
        Dim i As Integer
    
         Set rst = CurrentDb.OpenRecordset(sql, dbOpenDynaset)
    
        ' copie les en-têtes
        i = 1
        For Each fld In rst.Fields
            oFeuille.Cells(1, i).Value = fld.Name
            i = i + 1
        Next fld
    
        ' copie le contenu du recordset
        oFeuille.Cells(2, 1).CopyFromRecordset rst
    
        rst.Close
    
    'Call RA_Positionnement_Cargo_Etiq(oWb, oFeuille, oGraph) ' en gros ça marche avec cette ligne
    Call Procedure(oWb, oFeuille, oGraph)
    
    ...=nothing
    end sub
    3.mise en forme du graphique
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Public Sub RA_Positionnement_Cargo_Etiq(oWb As Excel.Workbook, oFeuille As Worksheet, oGraph As Chart)
     
    ....
    Tout marche en ne paramétrant pas tout au maximum comme ici,mais comme j'ai plusieurs formulaires avec leurs graphes qui marchent de la même façon, je veux que l'étape 1 et à la limite l'étape 3 soient à à peine réécrire pour chaque formulaire, mais pas l'étape 2 ExportRequeteToObjetExcel.
    C'est un peu bordélique je sais.

    Sinon, j'ai déjà poser des sujets, sans réponse, mais que j'ai résolu pour des graphiques, je mettrai les résolutions en septembre (avis aux modérateurs)

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 63
    Points : 56
    Points
    56
    Par défaut solution alternative pour mon cas
    J'ai trouvé une parade en remplaçant l'étape 1 du post au dessus.
    J'appelle mes deux procédures à la suite.
    A la fin de l'étape 2 (ExporteRequeteToObjetExcel), on enlève les lignes type set owb=nothing pour les remettre à la fin de tout le processus (à la fin du point 1), et on supprime évidemment tout ce qui est en rapport avec la variable procédure.

    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
    Private Sub Form_Current()
    Call redimen 'redimensionne le form a chaque changment
    Dim Jour As Date
    Jour = Date
    Me.date_jour = DateEnLettre(Jour)
     
    Dim oWb As Excel.Workbook, oFeuille As Worksheet, oGraph As Chart, sql As String ', JusteNomSubEtiquette As SubForm
     
    Set oWb = Forms.RA_Positionnement_Cargo.RA_Positionnement_Cargo_graphe.Object
    Set oFeuille = oWb.Worksheets(1)
    Set oGraph = oWb.Charts(1)
    sql = "SELECT Distinct Avion, [Volume Soute], [Charge maximale] from RA_Positionnement_Cargo WHERE (InStr(1, SelectionAvions(), Avion) > 0)"
    'Set Procedure = RA_Positionnement_Cargo_Etiq(oWb, oFeuille, oGraph)
     
    Call ExporteRequeteToObjetExcel(oWb, oFeuille, oGraph, sql) ', Procedure)
    Call RA_Positionnement_Cargo_Etiq(oWb, oFeuille, oGraph)
     
    Set oFeuille = Nothing
    Set oGraph = Nothing
    Set oWb = Nothing
     
    End Sub
    Je suis quand même toujours intéressé par la manière de déclarer une sous-sub (avec ses propres variables) en tant que variable dans un sub

Discussions similaires

  1. passer une variable en tant que text dans une fonction
    Par Barokar dans le forum Langage
    Réponses: 6
    Dernier message: 18/06/2014, 15h23
  2. Réponses: 5
    Dernier message: 19/12/2010, 18h06
  3. [OPTIMISATION] Date en tant que variable dans les clauses WHERE
    Par dens19 dans le forum Développement
    Réponses: 11
    Dernier message: 18/09/2009, 08h57
  4. Réponses: 10
    Dernier message: 26/07/2007, 14h16
  5. Licence MySql en tant que BD dans une application web
    Par Volta dans le forum SQL Procédural
    Réponses: 3
    Dernier message: 26/02/2004, 14h38

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