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 :

Quelle commande VBA pour déclencher un compactage


Sujet :

VBA Access

  1. #1
    Membre du Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Octobre 2011
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2011
    Messages : 75
    Points : 54
    Points
    54
    Par défaut Quelle commande VBA pour déclencher un compactage
    Bonjour cher réseau,

    Existe t'il une commande vBA permettant de déclencher le compactage d'une BDD ouverte (.mdb) si, après une opération de chargement de donnée externes par exemple, la bdd a pris un embonpoint excessif ?

    Je précise que je ne veux pas paramétrer la bdd pour un compactage systématique à la fermeture, mais seulement si une situation donnée se produit


    merci d'avance de votre aide !

  2. #2
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 278
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 278
    Points : 19 466
    Points
    19 466
    Billets dans le blog
    64
    Par défaut
    Bonjour,

    Avez vous consultez cette contribution :

    compactage automatique d'une base protégée


    Cdlt,
    Vous trouverez dans la FAQ, les sources ou les tutoriels, de l'information accessible au plus grand nombre, plein de bonnes choses à consulter sans modération

    Des tutoriels pour apprendre à créer des formulaires de planning dans vos applications Access :
    Gestion sur un planning des présences et des absences des employés
    Gestion des rendez-vous sur un calendrier mensuel


    Importer un fichier JSON dans une base de données Access :
    Import Fichier JSON

  3. #3
    Membre du Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Octobre 2011
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2011
    Messages : 75
    Points : 54
    Points
    54
    Par défaut
    Merci User,

    La conversation est intéressante quoiqu'un peu ancienne (2003). Je suis maintenant utilisateur d'access 2013.

    En zonant je vois qu'il y aurait l'action

    [application].RunCommand (AcCmdCompactDatabase). qui remplace l'option domenuitem ...

    Là où je coince, c'est pour définir "application". (j'avoue ne pas bien comprendre le concept)

    peux tu me dire simplement comment initialiser la variable application pour que le RunCommand déclenche le compactage de la bdd en cours.


    merci beaucoup

  4. #4
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 600
    Points : 34 271
    Points
    34 271
    Par défaut
    Bonjour,

    Application est un mot cle qui pointe tout simplement sur l'application dans laquelle le code est en train d'etre execute :

    Tu peux donc directement taper ta ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.RunCommand acCmdCompactDatabase
    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 :
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

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

    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

  5. #5
    Membre du Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Octobre 2011
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2011
    Messages : 75
    Points : 54
    Points
    54
    Par défaut
    Merci Jean Philippe,

    C'est effectivement très simple et cela répond à ma question sur "application"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Function test1()
    Application.RunCommand (acCmdCompactDatabase)
    End Function
    et ça marche... sauf que je reçois le message suivant

    impossible de compacter la base de données ouverte en exécutant une macro ou du code visual basic
    Au lieu d'exécuter une macro ou du code, cliquez sur l'onglet fichier puis compacter un base de données.

    Il semblerait donc qu'on ne puisse pas déclencher un compactage par code ou macro, deonc de manière automatique sur critère choisi...

    Si quelqu'un a une autre idée !

    merci à tous

  6. #6
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 600
    Points : 34 271
    Points
    34 271
    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 :
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

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

    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

  7. #7
    Modérateur

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

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Juste une note en passant.

    La conversation est intéressante quoiqu'un peu ancienne (2003). Je suis maintenant utilisateur d'access 2013.
    Ce qui est vrai pour les vielles versions de Access est généralement (il y a des exceptions) toujours vrai dans les dernières versions.
    En tout cas cela donne souvent une piste pour aller de l'avant.

    De plus si tu utilises un format .mdb alors c'est comme si tu étais toujours en 2003.
    Si tu veux vraiment bénéficier des fonctionnalités de 2013, il faut convertir ta BD au format 2007.

    Pour ce qui est du compactage de la BD en cours, on peut le faire à partir d'une macro mais ce qu'on ne peut pas faire c'est :

    1. excuter du code
    2. Compacter
    3. reprendre l'exécution du code


    Peut-être qu'on peut le faire avec une macro mais je n'ai jamais essayé.

    Quand j'ai eu besoin de faire cela je l'ai fait depuis une autre BD.

    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.

  8. #8
    Membre du Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Octobre 2011
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2011
    Messages : 75
    Points : 54
    Points
    54
    Par défaut
    Bonjour à tous et merci des propositions.

    J'ai préparé la petite fonction ci dessous.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Function compacter()
    DBEngine.CompactDatabase "c:\bdd\bdda\avarap_2013.mdb", "C:\bdd\BaseDonneesCopie.mdb"
    Kill "c:\bdd\bdda\avarap_2013.mdb"
    Name "C:\bdd\BaseDonneesCopie.mdb" As "c:\bdd\bdda\avarap_2013.mdb"
    DoCmd.Quit
    End Function
    Je l'ai incluse dans la bdd principale (c:\bdd\bdda\avarap_2013.mdb) mais lorsque je la lance, je reçois un message "ne peut être exécuté car la bdd est ouverte".

    C'est donc le même effet qu'avec la commande runcommand évoquée plus haut, ce qui est assez logique.

    Je contourne finalement le problème en intégrant le code ci dessus dans une autre bdd compacter_bdd.mdb (qui ne contient que ce code). j'ai ensuite créé une macro autoexec exécutant ce code dans dette bdd.

    j'ai ensuite créé un petit fichier bat qui lance successivement la bdd principale puis, quand celle ci est refermée, qui lance la bdd compacter.mdb. Cela fonctionne correctement

    Ce n'est pas exactement ce que je voulais faire car je souhaitais lancer le compactage si la bdd principale était devenue grosse... mais je vais m'en contenter.

    merci à tous

Discussions similaires

  1. Commande VBa pour importer des données de nouveaux classeurs d'un dossier
    Par ronaindor dans le forum Macros et VBA Excel
    Réponses: 13
    Dernier message: 15/02/2012, 11h37
  2. [XL-2003] Commande VBA pour Lancer le Menu "Renommer/Feuille" (Excel)
    Par epsilon99 dans le forum Macros et VBA Excel
    Réponses: 25
    Dernier message: 13/02/2012, 12h11
  3. Powerpoint 2003: Commande Vba pour Ouvrir le Slide Finder
    Par solipas dans le forum VBA PowerPoint
    Réponses: 0
    Dernier message: 02/08/2007, 14h50
  4. Quelle commande utiliser pour écrire des vecteurs en colonne ?
    Par minimel dans le forum Mathématiques - Sciences
    Réponses: 2
    Dernier message: 18/05/2007, 18h24

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