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 :

Code pour tester si un classeur excel est ouvert depuis access [AC-2003]


Sujet :

VBA Access

  1. #1
    Débutant
    Inscrit en
    Décembre 2007
    Messages
    1 235
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 1 235
    Points : 269
    Points
    269
    Par défaut Code pour tester si un classeur excel est ouvert depuis access
    Bonjour, depuis ma base de données ACCESS, je créer des bon de commande sur Excel.

    J'ouvre mon fichier excel de la façon suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Dim xlApp As Excel.Application
    Dim xlSheet As Excel.Worksheet
    Dim xlBook As Excel.Workbook
     
    Set xlApp = CreateObject("Excel.Application")
    xlApp.Visible = True
    Set xlBook = xlApp.Workbooks.Open(AdresseGmao + "Matériel à commander\Commandes\Commande Vierge.xls")
    Set xlSheet = xlApp.Worksheets("Commande")
    Ensuite je colle des données dans les cellules de ma feuille excel.

    Ma question est comment tester si le classeur est déja ouvert?

    J'ai trouvé ceci dans la FAQ, mais je pense que l'on peux faire plus simple:

    http://access.developpez.com/faq/?pa...p#estFicOuvert

    Merci

  2. #2
    Membre chevronné
    Inscrit en
    Août 2006
    Messages
    1 588
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 1 588
    Points : 2 178
    Points
    2 178
    Par défaut
    Je ne sais pas si c'est la meilleure solution mais elle fonctionne sous Access 2002

    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
     
    Function ClasseurOuvert(fichier As String) As Boolean
     On Error GoTo erreur
     Dim o As Object
     Set o = GetObject(fichier)
     ClasseurOuvert = True
     Exit Function
    erreur:
     ClasseurOuvert = False
    End Function
     
    Sub test()
     Dim xlw As Object, fichier As String
     fichier = "f:\excel\test.xls"
     If ClasseurOuvert(fichier) Then
      Set xlw = GetObject(fichier)
      xlw.Sheets("Feuil1").Range("C1") = 10
     End If
     
    End Sub

  3. #3
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 348
    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 348
    Points : 19 600
    Points
    19 600
    Billets dans le blog
    65
    Par défaut
    Salut moilou2 et helas,

    Sinon une autre solution,

    tu déclare tes variables publiques dans un module indépendant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Option Compare Database
     
    Public xlApp As Excel.Application
    Public xlBook As Excel.Workbook

    Puis ton code pour ouvrir ton fichier Excel:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    On Error Resume Next
     
       If xlApp Is Nothing Then
          Set xlApp = CreateObject("Excel.Application")
       End If
     
       xlApp.Visible = True
       xlApp.WindowState = xlMaximized
     
       Set xlBook = xlApp.Workbooks.Open(AdresseGmao + "Matériel à commander\Commandes\Commande Vierge.xls")
       Set xlSheet = xlApp.Worksheets("Commande")
     
    ...
    De cette façon tu n'ouvre pas plusieurs applications Excel.

    Et tu libère tes variables globales par exemple à la fermeture de ta base:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    set xlBook = Nothing
    set xlApp = Nothing
    A+

  4. #4
    Débutant
    Inscrit en
    Décembre 2007
    Messages
    1 235
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 1 235
    Points : 269
    Points
    269
    Par défaut
    Re, ça fonctionne, mais peut on enlever le message (voir pièce jointe) et répondre non par défaut?
    Images attachées Images attachées  

  5. #5
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 348
    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 348
    Points : 19 600
    Points
    19 600
    Billets dans le blog
    65
    Par défaut
    Salut,

    Une solution basique:
    Sur erreur quand tu tentes d'activer le classeur (si classeur fermé), tu récupère l'erreur et ouvre le classeur...

    A toi d'affiner la gestion d'erreuren testant le numéro de l'erreur si besoin)

    Voici le code:

    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
     
    On Error GoTo err_book
     
       If xlApp Is Nothing Then
          Set xlApp = CreateObject("Excel.Application")
       End If
     
       xlApp.Visible = True
       xlApp.WindowState = xlMaximized
     
       xlBook.Activate ' active ou teste si le classeur est ouvert
     
       Set xlSheet = xlApp.Worksheets("Commande")
     
    ...
     
    Exit Sub
     
    err_book: ' si classeur fermé
    Set xlBook = xlApp.Workbooks.Open(AdresseGmao + "Matériel à commander\Commandes\Commande Vierge.xls")
     
    Resume ' Retour à la suite de l'erreur.
     
    end sub
    A+

  6. #6
    Débutant
    Inscrit en
    Décembre 2007
    Messages
    1 235
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 1 235
    Points : 269
    Points
    269
    Par défaut
    Merci beaucoup

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

Discussions similaires

  1. Tester si un fichier excel est ouvert
    Par h2qutc dans le forum Général Python
    Réponses: 1
    Dernier message: 10/12/2013, 11h52
  2. [XL-2003] Code pour tester l'existence du meme nom du classeur
    Par Adilleroy dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 22/07/2010, 16h32
  3. [Toutes versions] Tester si un fichier excel est ouvert
    Par vivi4561 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 13/08/2009, 14h36
  4. Réponses: 1
    Dernier message: 13/08/2007, 12h47
  5. [VB6] (Pilote Isam) Tester si un fichier excel est ouvert
    Par Requin15 dans le forum VB 6 et antérieur
    Réponses: 30
    Dernier message: 20/03/2006, 17h57

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