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

Macros et VBA Excel Discussion :

ouvrir Connexion a Access a l'ouverture de l'application et la fermer a la fermeture de l'application VBA


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Femme Profil pro
    Inscrit en
    Février 2009
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Février 2009
    Messages : 19
    Points : 10
    Points
    10
    Par défaut ouvrir Connexion a Access a l'ouverture de l'application et la fermer a la fermeture de l'application VBA
    Bonjour,
    j'ai un Gros soucis , je vous explique
    je suis débutante en VBA Excel , j'ai commencé a programmer une application avec une connexion à la BD ACCESS

    et j'ai un problème c'est que j'ouvre la connexion et la ferme dans chaque "évènement" comme "Private Sub ComboBox2_Change()" ou "Private Sub MultiPage1_Change()" alors que normalement l'ouverture de la connexion doit se faire une seule fois a l'ouverture de l'application et la fermeture une seule fois a la fin de l'application.

    je voudrais le faire mais je ne sais pas comment y procéder et ça me sort des erreurs comme "Cette Opération n'est pas autorisé si l'objet est Ouvert" quand je change de page avec des combobox sélectionnés

    SVP quelle est la procédure a suivre pour ouvrir la connexion a la BD dés l'ouverture de l'application

    HELP -HELP

  2. #2
    Expert éminent sénior
    Avatar de kiki29
    Homme Profil pro
    ex Observeur CGG / Analyste prog.
    Inscrit en
    Juin 2006
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : ex Observeur CGG / Analyste prog.

    Informations forums :
    Inscription : Juin 2006
    Messages : 6 132
    Points : 11 274
    Points
    11 274
    Par défaut
    Salut, voir ici, si cela peut t'aider.

  3. #3
    Membre à l'essai
    Femme Profil pro
    Inscrit en
    Février 2009
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Février 2009
    Messages : 19
    Points : 10
    Points
    10
    Par défaut
    Merci pour votre réponse, je viens de consulter le lien mais ça ne répond pas a ce que je veux exactement .

    peut être que je n'ai pas été assez clair dans ma question?

  4. #4
    Expert éminent sénior
    Avatar de kiki29
    Homme Profil pro
    ex Observeur CGG / Analyste prog.
    Inscrit en
    Juin 2006
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : ex Observeur CGG / Analyste prog.

    Informations forums :
    Inscription : Juin 2006
    Messages : 6 132
    Points : 11 274
    Points
    11 274
    Par défaut
    Re, fondamentalement pourquoi cette interface via Excel et non Access directement ? Bref sinon connection dans Private Sub Workbook_Open()
    et fermeture dans Private Sub Workbook_BeforeClose(Cancel As Boolean) ? Mais sans garantie.

  5. #5
    Membre à l'essai
    Femme Profil pro
    Inscrit en
    Février 2009
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Février 2009
    Messages : 19
    Points : 10
    Points
    10
    Par défaut
    Merci pour la réponse

    si je met les déclarations dans le "workbook open ()"
    est ce que la variable de connexion va être reconnu dans tout le projet ?

    voila la procédure que je suis pour la connexion

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Dim cnn As New ADODB.Connection
     
    'Connection à la base
    Set cnn = New ADODB.Connection
     strconnect = "Provider=Microsoft.ACE.OLEDB.12.0;" & _
                 "Data Source=C:\Users\XX\xxx\BD1.accdb"
     
        cnn.Open strconnect
    donc si je copie ce code dans le Workbook open ça va marcher?

  6. #6
    Expert éminent sénior
    Avatar de kiki29
    Homme Profil pro
    ex Observeur CGG / Analyste prog.
    Inscrit en
    Juin 2006
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : ex Observeur CGG / Analyste prog.

    Informations forums :
    Inscription : Juin 2006
    Messages : 6 132
    Points : 11 274
    Points
    11 274
    Par défaut
    Gente Dame, à lire, et surtout Public

    Donc qqch comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Option Explicit
     
    Public cnn As ADODB.Connection
     
    Private Sub Workbook_Open()
    Dim strconnect As String
        Set cnn = New ADODB.Connection
        strconnect = "Provider=Microsoft.ACE.OLEDB.12.0;" & _
                     "Data Source=C:\Users\XX\xxx\BD1.accdb"
     
        cnn.Open strconnect
    End Sub

  7. #7
    Membre chevronné Avatar de ZebreLoup
    Homme Profil pro
    Ingénieur Financier
    Inscrit en
    Mars 2010
    Messages
    994
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur Financier
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 994
    Points : 2 131
    Points
    2 131
    Par défaut
    Et j'ajouterais juste qu'autant il est vrai qu'il n'est pas optimal d'ouvrir la connexion à chaque requête lors d'une procédure qui en fait plusieurs, autant l'ouvrir pour toute la durée d'ouverture du classeur n'est sans doute pas nécessaire non plus et peut même poser quelques problèmes.
    Si ça ne fonctionnait pas avant c'était sans doute un petit souci de conception, tu devais essayer d'ouvrir une connexion déjà ouverte.
    Par contre déclarer la connexion en variable globale pour son initialisation, très bien, il n'y a plus qu'à faire des Open et des Close au bon endroit.
    « Compter en octal, c’est comme compter en décimal, si on n’utilise pas ses pouces » - Tom Lehrer
    « Il est assez difficile de trouver une erreur dans son code quand on la cherche. C’est encore bien plus dur quand on est convaincu que le code est juste. » - Steve McConnell

  8. #8
    Membre à l'essai
    Femme Profil pro
    Inscrit en
    Février 2009
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Février 2009
    Messages : 19
    Points : 10
    Points
    10
    Par défaut
    Bonjour

    j'ai lu les tutoriel que vous m'aviez mis en lien hypertexte , j'ai essayé de faire ceci dans le "Private Sub Workbook_Open()"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Private Sub Workbook_Open()
    UserForm1.Show
     
    Public cnn As New ADODB.Connection
    cnn.Open "Provider=Microsoft.ACE.OLEDB.12.0;" & _
                 "Data Source=C:\Users\XX\xxx\BD1.accdb"
    mais ça me sort une erreur

    "Attribut Incorrect dans une procédure Sub ou Fonction"

    devrais je faire autre chose?

  9. #9
    Membre à l'essai
    Femme Profil pro
    Inscrit en
    Février 2009
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Février 2009
    Messages : 19
    Points : 10
    Points
    10
    Par défaut
    Citation Envoyé par kiki29 Voir le message
    Gente Dame, à lire, et surtout Public

    Donc qqch comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Option Explicit
     
    Public cnn As ADODB.Connection
     
    Private Sub Workbook_Open()
    Dim strconnect As String
        Set cnn = New ADODB.Connection
        strconnect = "Provider=Microsoft.ACE.OLEDB.12.0;" & _
                     "Data Source=C:\Users\XX\xxx\BD1.accdb"
     
        cnn.Open strconnect
    End Sub

    Merci Kiki , j'ai appliqué ce que tu ma montré mais sans succés

    car il me sort une erreur
    "les arguments sont de type incorrect en dehors des limites autorisées ou en conflit les uns avec les autres "

    faut il ajouter un bout du code dans chaque evenement comme "comboboxChange"??

    SVP je ne sais vraiment pas quoi faire

  10. #10
    Membre du Club
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Août 2011
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Service public

    Informations forums :
    Inscription : Août 2011
    Messages : 39
    Points : 41
    Points
    41
    Par défaut
    Citation Envoyé par fleur_d_eden Voir le message

    faut il ajouter un bout du code dans chaque evenement comme "comboboxChange"??

    SVP je ne sais vraiment pas quoi faire
    Hello Miss,
    Pourquoi ne pas envisager un sous programme dans un module que tu appelles quand tu veux?...

    Ton programe:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Option Explicit
    Public cnn As ADODB.Connection
     
    Private Sub Workbook_Open()
       Call connexion()
    End Sub
    Le module standard:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Public Sub connexion()
      Dim strconnect As String
      Set cnn = New ADODB.Connection
      strconnect = "Provider=Microsoft.ACE.OLEDB.12.0;" & _
                     "Data Source=C:\Users\XX\xxx\BD1.accdb"
     cnn.Open strconnect
    End Sub
    
    Public Sub deconnexion()
     (ton code de déconnexion)
    end Sub
    Cela te permettra de lancer ta connexion et déconnexion juste avec le "Call sous-programme"...

  11. #11
    Membre à l'essai
    Femme Profil pro
    Inscrit en
    Février 2009
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Février 2009
    Messages : 19
    Points : 10
    Points
    10
    Par défaut
    Citation Envoyé par Tweelight Voir le message
    Hello Miss,
    Pourquoi ne pas envisager un sous programme dans un module que tu appelles quand tu veux?...
    j'ai suivi vos conseil à la lettre mais j'ai tjrs la mm erreur

    "les arguments sont de type incorrect en dehors des limites autorisées ou en conflit les uns avec les autres "

    avez vous deja vu cette erreur?
    j'ai cherché cette erreur sur les forum sur internet mais je ne trouve pas grand chose .

    logiquement avec le code que vous m'avez donné , la variable "cnn" est globale et publique donc elle doit etre reconnu dans tous le projet , sauf que c'est pas le cas , car l'erreur se trouve au niveau des requetes que je fais genre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Dim rst1 As New ADODB.Recordset
     
     
         rst1.Open "SELECT DISTINCT typemateriel.[nom_type] FROM typemateriel INNER JOIN materiel ON (typemateriel.[id_type] =  materiel.[type]) WHERE ( materiel.[affecte] = ('0')) ORDER BY typemateriel.[nom_type];", _
    cnn, adOpenStatic
    faut il que je rajoute qqch avant ou après ?

  12. #12
    Membre du Club
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Août 2011
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Service public

    Informations forums :
    Inscription : Août 2011
    Messages : 39
    Points : 41
    Points
    41
    Par défaut
    "CNN" ne peut qu'être globale et publique ; ok je sors...

    Sinon est-ce que dans une autre partie de ton programme l'objet "cnn" est déclarée? cela pourrait être le conflit...

  13. #13
    Membre à l'essai
    Femme Profil pro
    Inscrit en
    Février 2009
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Février 2009
    Messages : 19
    Points : 10
    Points
    10
    Par défaut
    Citation Envoyé par Tweelight Voir le message
    "CNN" ne peut qu'être globale et publique ; ok je sors...

    Sinon est-ce que dans une autre partie de ton programme l'objet "cnn" est déclarée? cela pourrait être le conflit...
    j'ai choisi "cnn" pr ça :p


    j'ai vérifié , ya aucune déclaration qui pourrait faire conflit !!!


    je galère

  14. #14
    Membre du Club
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Août 2011
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Service public

    Informations forums :
    Inscription : Août 2011
    Messages : 39
    Points : 41
    Points
    41
    Par défaut
    Désolé mais là je sèche complet... Vaut mieux attendre une réponse d'un expert sur la question...

  15. #15
    Membre chevronné Avatar de ZebreLoup
    Homme Profil pro
    Ingénieur Financier
    Inscrit en
    Mars 2010
    Messages
    994
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur Financier
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 994
    Points : 2 131
    Points
    2 131
    Par défaut
    Le message d'erreur ressemble plus à un problème au niveau de la requête elle-même, pas de la connexion. Elle marche la requête quand tu la fais au niveau de la base ? Essaie de passer par un string intermédiaire, histoire de pouvoir récupérer dans le debug la requête exacte.
    « Compter en octal, c’est comme compter en décimal, si on n’utilise pas ses pouces » - Tom Lehrer
    « Il est assez difficile de trouver une erreur dans son code quand on la cherche. C’est encore bien plus dur quand on est convaincu que le code est juste. » - Steve McConnell

Discussions similaires

  1. Réponses: 0
    Dernier message: 07/01/2015, 10h28
  2. [ACCESS] connexion base ACCESS sans VC++ ou BC++ ni wizard
    Par roce dans le forum Autres éditeurs
    Réponses: 3
    Dernier message: 18/03/2007, 23h13
  3. pb connexion asp/access
    Par cell dans le forum ASP
    Réponses: 5
    Dernier message: 21/04/2005, 17h31
  4. API pour ouvrir une BD Access
    Par GofAcid dans le forum Access
    Réponses: 2
    Dernier message: 15/12/2004, 19h25
  5. [ODBC] Connexion MS-Access sans DSN
    Par Chap$ dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 30/11/2004, 17h16

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