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éitération alias sur 3 tables [AC-2003]


Sujet :

VBA Access

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Mars 2011
    Messages
    316
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Contrôleur de Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2011
    Messages : 316
    Par défaut Réitération alias sur 3 tables
    Bonjour,

    J'ai automatisé via Vba l'ajout sur 3 tables de 3 de fichiers excel liés.
    2 alias pour chacune d'entre elles sont communes à savoir :
    - Le mois
    - Le N° de semaine

    Dons à l'aide du code suivant, la même information est demandée 6 fois de suite (3*2 alias mois & alias semaine).

    A noter que le mois est toujours le même à reseigner ainsi que la semaine.

    Je voudrais formater ces 2 alias en 2 demandes valable pour les 3 tables au code qui suit :

    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
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    Function Automatisme()
     Dim Rep1 As Integer
     Dim Rep2 As Integer
     
     
    On Error GoTo Macro2_Err
     
        Rep1 = MsgBox("Voulez vous mettre la table adressage à jour?", vbYesNo, "")
         If Rep1 = vbYes Then
                 Rep2 = MsgBox("Le Fichier Excel est il mise à jour?", vbYesNo, "")
                        If Rep2 = vbYes Then GoTo PointA
                        ElseIf Rep2 = vbNo Then
                        MsgBox "Merci de mettre le fichier à jour", vbOKOnly, ""
                        Exit Function
     
     
        ElseIf Rep1 = vbNo Then GoTo PointB
        End If
     
     
    PointA:
        DoCmd.SetWarnings False
        DoCmd.OpenQuery "Sup_T_Adresssage", acViewNormal, acEdit
        DoCmd.SetWarnings False
        DoCmd.OpenQuery "Ajout Table BD Adressage", acViewNormal, acAdd
     
    ' Alias mois & N° de semaine commune au 3 Tables                  
    PointB:
        DoCmd.SetWarnings False
        DoCmd.OpenQuery "Ajout Table BNC", acViewNormal, acAdd
        DoCmd.SetWarnings False
        DoCmd.OpenQuery "Ajout Table BD Manquant", acViewNormal, acAdd
        DoCmd.SetWarnings False
        DoCmd.OpenQuery "Ajout Table Mvt Stock", acViewNormal, acAdd
        DoCmd.SetWarnings False
        DoCmd.TransferSpreadsheet acExport, 0, "Demarque/Circuit", "D:\Mes Documents\00 - Réel\2012\La Buissière\Access Démarque\Demarque_Circuit.XLS", False, ""
        DoCmd.Quit acSave
     
     
    Macro2_Exit:
        Exit Function
     
    Macro2_Err:
        MsgBox Error$
        Resume Macro2_Exit
     
    End Function
    Mais je n'arrive pas avoir la logique

  2. #2
    Membre émérite Avatar de dumas.blr
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juin 2010
    Messages
    599
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2010
    Messages : 599
    Par défaut
    bonjour ALEX80800,

    Pour moi, il ne faudrait pas passer par l'utilisation des requêtes qui, même si je ne connais pas le code, pointent directement sur le nom de la table en dur.

    La solution la plus élégante serait exécuter directement le SQL issu de chacune des requetes en ecrivant une instruction du type
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    docmd.runSQL <nom de mon SQL>
    L'avantage est que, le SQL étant une chaine de caractère, il sera aisé de créer dynamiquement le nom des tables source et origine.

  3. #3
    Membre éclairé
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Mars 2011
    Messages
    316
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Contrôleur de Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2011
    Messages : 316
    Par défaut
    Merci de ta réponse Dumas.blr,

    Ok pour le Sql, mais je ne vois pas comment gérer la problématique de la réitération des inputbox des 2 alias en une seule

  4. #4
    Membre émérite Avatar de dumas.blr
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juin 2010
    Messages
    599
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2010
    Messages : 599
    Par défaut
    bonjour ALEX80800,

    La présentation de ta problématique n'est pas très claire pour moi.

    Pourrais tu réexpliquer les opérations que tu effectues et les noms des tables utilisées ?


    Éventuellement, joins le code SQL attaché à chaque requête

  5. #5
    Membre éclairé
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Mars 2011
    Messages
    316
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Contrôleur de Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2011
    Messages : 316
    Par défaut
    Bonjour Dumas.blr,

    Ci joint les codes SQl des 3 tables :

    La table manquant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    INSERT INTO [BD Manquant] ( Année, Mois, Semaine, Catégorie, Circuit, ITM8, [Libellé ITM8], [Nb UVC], Conditionnement, [Prix UC], Valo )
    SELECT 2013 AS Année, [Mois] AS Expr1, [Semaine] AS Expr2, Val([Fampro]) AS Expr3, EX_Manquant.Cirpic, Val([ITM 8]) AS Expr4, EX_Manquant.Désignation, EX_Manquant.[Ecart en UVC], EX_Manquant.PCB, EX_Manquant.[Prix UC], IIf(Val([Mespro])=2,[Prix UC]*[Ecart en UVC]*[Pdbuvc SUM],[Prix UC]*[Ecart en UVC]) AS Valo
    FROM EX_Manquant;
    la table BNC :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    INSERT INTO [BD BNC] ( Année, Mois, Semaine, Catégorie, [Valo Cession], ITM8, [Libellé ITM8], Qté, [Px UC], Motifs, [Avoir/Facture] )
    SELECT 2013 AS Année, [Mois] AS Expr1, [Semaine] AS Expr2, Val([Categorie]) AS Expr3, EX_BNC.[Valo au Px Cession], EX_BNC.Itm8, EX_BNC.[Libelle Article], EX_BNC.[Quantite SUM], EX_BNC.[Pcsfac SUM], EX_BNC.[motifs TR16/TR14], IIf([Type]=1,-[Valo au Px Cession],[Valo au Px Cession]) AS [Avoir/Facture]
    FROM EX_BNC;
    la table Mvt Stock :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    INSERT INTO [BD MvtStock] ( Année, Mois, Semaine, Catégorie, ITM8, LibelléITM8, MvtStock, [Valorisation Mvt Stock] )
    SELECT 2013 AS Année, [Mois] AS Expr1, [Semaine] AS Expr2, Val([F1]) AS Expr3, Val([F2]) AS Expr4, Ex_MvtStock.F3, Ex_MvtStock.F5, Ex_MvtStock.F7
    FROM Ex_MvtStock;
    Comme tu peux le voir les champs mois et semaine communes au 3 tablessont des données à saisir en input box.

    Ce que j'essaie de faire en Vbac'est de ne saisir qu'unez seule fois le mois pour les 3 tables et la semaine pour les 3 tables.

    Mais je n'ai pas la logique.

    Y-a--il une solution?

  6. #6
    Membre émérite Avatar de dumas.blr
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juin 2010
    Messages
    599
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2010
    Messages : 599
    Par défaut
    bonjour ALEX80800,

    Même si ce n'est pas encore hyper clair pour moi, j'y vois un peu mieux.

    A mon avis, on peut aller encore plus loin dans l'automatisation.

    Ce que je peux te proposer tout d'abords (la solution la plus simple mais la moins élégante
    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
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    Function Automatisme()
     Dim Rep1 As Integer
     Dim Rep2 As Integer
     
     '---------> a rajouter
     dim Mois, NumSem as integer
    dim monsql_manquant, monsql_BNC, monsql_MvtStock as string 
     
    On Error GoTo Macro2_Err
     
        Rep1 = MsgBox("Voulez vous mettre la table adressage à jour?", vbYesNo, "")
         If Rep1 = vbYes Then
                 Rep2 = MsgBox("Le Fichier Excel est il mise à jour?", vbYesNo, "")
                        If Rep2 = vbYes Then GoTo PointA
                        ElseIf Rep2 = vbNo Then
                        MsgBox "Merci de mettre le fichier à jour", vbOKOnly, ""
                        Exit Function
     
     
        ElseIf Rep1 = vbNo Then GoTo PointB
        End If
     
     
    PointA:
        DoCmd.SetWarnings False
        DoCmd.OpenQuery "Sup_T_Adresssage", acViewNormal, acEdit
        DoCmd.SetWarnings False
        DoCmd.OpenQuery "Ajout Table BD Adressage", acViewNormal, acAdd
     
    PointB:
    ' Alias mois & N° de semaine commune au 3 Tables
    '---------> a rajouter
    Mois = inputbox("Veuillez saisir un numéro de mois entre 1 et 12","saisir le mois")
    numsem = inputbox("Veuillez saisir un numéro de semaine entre 1 et 52","saisir le numéro de semaine")                   
     
    monsql_manquant = _ 
    "INSERT INTO [BD Manquant] ( Année, Mois, Semaine, Catégorie, Circuit, " & _
    "ITM8, [Libellé ITM8], [Nb UVC], Conditionnement, [Prix UC], Valo ) " & _
    "SELECT 2013 AS Année, " & Mois & " AS Expr1, " & numsem & " AS Expr2, " & _
    "Val([Fampro]) AS Expr3, EX_Manquant.Cirpic, Val([ITM 8]) AS Expr4, " & _ 
    "EX_Manquant.Désignation, EX_Manquant.[Ecart en UVC], EX_Manquant.PCB, " & _
    "EX_Manquant.[Prix UC], IIf(Val([Mespro])=2," & _
    "[Prix UC]*[Ecart en UVC]*[Pdbuvc SUM],[Prix UC]*[Ecart en UVC]) AS Valo " & _
    "FROM EX_Manquant;"
     
    monsql_BNC = _
    "INSERT INTO [BD BNC] ( Année, Mois, Semaine, Catégorie, [Valo Cession], " & _
    "ITM8, [Libellé ITM8], Qté, [Px UC], Motifs, [Avoir/Facture] ) " & _
    "SELECT 2013 AS Année, " & Mois & " AS Expr1, " & numsem & " AS Expr2, " & _
    "Val([Categorie]) AS Expr3, EX_BNC.[Valo au Px Cession], EX_BNC.Itm8, " & _ 
    "EX_BNC.[Libelle Article], EX_BNC.[Quantite SUM], EX_BNC.[Pcsfac SUM], " & _
    "EX_BNC.[motifs TR16/TR14], " &_ 
    " IIf([Type]=1,-[Valo au Px Cession],[Valo au Px Cession]) AS [Avoir/Facture] " & _
    "FROM EX_BNC;"
     
    monsql_MvtStock = _
    "INSERT INTO [BD MvtStock] ( Année, Mois, Semaine, Catégorie, ITM8, " & _
    "LibelléITM8, MvtStock, [Valorisation Mvt Stock] ) " & _
    "SELECT 2013 AS Année, " & Mois & " AS Expr1, " & numsem & " AS Expr2, " & _
    "Val([F1]) AS Expr3, Val([F2]) AS Expr4, Ex_MvtStock.F3, Ex_MvtStock.F5, " & _ 
    "Ex_MvtStock.F7 FROM Ex_MvtStock;"
     
        DoCmd.SetWarnings False
        DoCmd.runsql monsql_manquant
        DoCmd.runsql monsql_BNC
        DoCmd.runsql monsql_MvtStock
     
    '---------> a conserver
        DoCmd.TransferSpreadsheet acExport, 0, "Demarque/Circuit", "D:\Mes Documents\00 - Réel\2012\La Buissière\Access Démarque\Demarque_Circuit.XLS", False, ""
        DoCmd.Quit acSave
        DoCmd.SetWarnings true
     
     
    Macro2_Exit:
        Exit Function
     
    Macro2_Err:
        MsgBox Error$
        Resume Macro2_Exit
     
    End Function
    Je ne l'ai pas testé, mais ça devrait marcher (hors peut-être les fautes de syntaxe éventuelle)

    Maintenant, on peut peut-être automatiser la solution.
    Par exemple, le mois et la semaine doivent probablement figurer dans les feuilles Excel, ou dans le nom du fichier ...
    A toi de voir

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 18/08/2010, 09h33
  2. [ALIAS TABLE] - Comment définir un alias sur des tables
    Par spezet29 dans le forum Administration
    Réponses: 7
    Dernier message: 10/08/2010, 14h16
  3. Réponses: 1
    Dernier message: 29/04/2010, 23h53
  4. Alias sur tables 8i_10 depuis un champ
    Par Thomf dans le forum SQL
    Réponses: 3
    Dernier message: 20/04/2010, 14h53
  5. [SQL] UNION et alias sur table
    Par phoeniix07 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 26/01/2007, 14h19

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