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éplacer la table dans un groupe personnalisé après création [AC-2016]


Sujet :

VBA Access

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Septembre 2018
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2018
    Messages : 3
    Par défaut Déplacer la table dans un groupe personnalisé après création
    Bonjour à tous,

    Je gère un fichier Access avec un nombre assez conséquent d'objets divers (type tables, requêtes...etc.) et j'ai donc créer un certain nombre de groupe personnalisé dans la partie de gauche dédié à la navigation.

    Mais là, n'est pas le problème.
    J'ai créer dans un formulaire un bouton permettant de créer des sauvegardes d'une table relativement sensible.
    Ci-dessous la première partie de mon code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Dim Dateheure As String
    Dateheure = Year(Date) & Month(Date) & Day(Date) & "_" & Hour(Time) & "-" & Minute(Time)
     
    DoCmd.CopyObject , "Backup_Table_Detailtarifaire_" & Dateheure , acTable, "Detailtarifaire"
    Jusque là tout va bien, mais maintenant, pour éviter que la copie de la table ne se retrouve dans les éléments non-classé, j'aimerais pouvoir rajouter dans mon code une commande qui déplacerait ce nouveau fichier vers mon groupe personnalisé et là, je butte en touche.

    Existe-t-il une commande de transfert vers un groupe personnalisé?
    Si oui, comment faire pour qu'il prenne en compte à chaque fois tous les objets commençant par "Backup_Table_Detailtarifaire_" en ignorant la variable Dateheure qui elle va tout le temps être différente?

    Merci pour votre aide

  2. #2
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 682
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 682
    Par défaut
    Salut,

    c'est tout à fait possible, en insérant tes détails dans la table MSysNavPaneGroupToObjects.

    Tu auras 2 choses à passer en paraètres : ton nom de table, ton nom de groupe

    Le code ressemble à ceci :
    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
     
    Public Sub DeplacerObjetDansGroupe(strNomObjet As String, strNomGroupe As String)
        Dim strSql, idObj, idGrp, db
        Set db = CurrentDb
    'on récupère les ID dans les tables Systèmes
        idObj = DLookup("Id", "MSysNavPaneObjectIDs", "Name='" & strNomObjet & "'")
        idGrp = DLookup("Id", "MSysNavPaneGroups", "Name='" & strNomGroupe & "'")
    ' on détermine si l'objet est déjà dans un groupe (en principe non pour toi)
        If DCount("*", "MSysNavPaneGroupToObjects", "GroupID = " & idGrp & " AND ObjectID = " & idObj) > 0 Then
            strSql = "UPDATE MSysNavPaneGroupToObjects SET GroupID = " & idGrp & ", Name='" & strNomObjet & "' WHERE ObjectID = " & idObj
            db.Execute strSql, dbFailOnError
        Else
            strSql = "INSERT INTO MSysNavPaneGroupToObjects ( GroupID, ObjectID, Name ) " & vbCrLf & _
            "VALUES (" & idGrp & "," & idObj & ",'" & strNomObjet & "');"
            db.Execute strSql, dbFailOnError
        End If
    'on rafraichit l'interface
        RefreshDatabaseWindow
        Set db = Nothing
    End Sub
    *correction End Sub *
    et l'appel :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DeplacerObjetDansGroupe "Backup_Table_Detailtarifaire_" & Dateheure , "TonGroupePersoQuiTue"
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Migrer les applications VBA Access et VBA Excel vers la Power Platform
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Coffrets disponibles de mes ouvrages : https://www.editions-eni.fr/jean-philippe-andre
    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  3. #3
    Candidat au Club
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Septembre 2018
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2018
    Messages : 3
    Par défaut
    Merci Jean-Philippe!

    Je débute en VBA et je suis pas certaine, mais il n'y aurait pas un problème dans le code? cela commence par un Sub et fini par End Function...
    S'agit-il ici de créer un module avec le code function et de l'appeler dans mon code qui est rattaché à mon bouton?
    Dans ce cas, je dois utiliser call pour l'appel du code, avec un Dim?

    Désolé pour toutes ces questions mais j'essaye de comprendre et c'est pas toujours simple quand on commence.

  4. #4
    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.

    Tu as raison, cela devrait etre end sub et non end function.
    L'editeur va corriger automatiquement.

    Pour l'appel, il faut le mettre dans une procdure ou une function.
    A mon avis comme ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    DoCmd.CopyObject , "Backup_Table_Detailtarifaire_" & Dateheure , acTable, "Detailtarifaire"
    DeplacerObjetDansGroupe "Backup_Table_Detailtarifaire_" & Dateheure , "TonGroupePersoQuiTue"
    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.

  5. #5
    Candidat au Club
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Septembre 2018
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2018
    Messages : 3
    Par défaut
    Merci marot_r!

    J'ai fais des tests et cela fonctionne bien...à une exception...c'est que j'aimerais lui dire de prendre toutes les tables dont le nom commence par Backup_Table_Detailtarifaire_

    J'ai essayé avec Like, mais je vois
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DeplacerObjetDansGroupe("Backup_Tabelle_DBH_RICHTPREISDETAIL_" Like "Backup_Tabelle_DBH_RICHTPREISDETAIL_*", "Access_Backup")
    mais je ne maîtrise pas encore les histoires de syntaxes :-(
    Est-ce que tu pourrais m'aider? STP

  6. #6
    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.

    Bonne idee de syntaxe mais le VBA n'est pas comme du SQL, tu ne peux pas specifier ce que tu veux faire et esperer qu'il le fasse.
    Il faut ecrire tout soi-meme.

    dans ton cas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    dim db as dao.database:set db=currentdb 'Pointe sur la BD en cours.
    dim t as dao.tabledef 'Defini un objet de type table
     
    for each t in db.tabledefs 'Pour toute le tables de la BD
     
       if t.name like "Backup_Tabelle_DBH_RICHTPREISDETAIL_*" then
          DeplacerObjetDansGroupe(t.name , "Access_Backup")
      end if
     
    next t
     
    db.close: set db=nothing 'Signale au compilateur (et surtout a l'humain) qu'on en a fini avec l'objet
    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.

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 03/02/2014, 08h06
  2. Réponses: 3
    Dernier message: 08/11/2012, 10h50
  3. Réponses: 3
    Dernier message: 13/07/2012, 09h29
  4. Déplacer une colonne dans une table...
    Par ralkif dans le forum PostgreSQL
    Réponses: 10
    Dernier message: 07/10/2009, 06h50
  5. Réponses: 7
    Dernier message: 26/01/2006, 12h19

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