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

Access Discussion :

[Excel] comment savoir si une feuille est ouverte ?


Sujet :

Access

  1. #1
    Membre habitué Avatar de scully2501
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    184
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 184
    Points : 148
    Points
    148
    Par défaut [Excel] comment savoir si une feuille est ouverte ?
    bonsoir,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set docexcel = CreateObject("EXCEL.Application")
    je sais qu'il faut utiliser ce code pour faire fonctionner ce que je demande mais rien à faire.

    j'explique:

    en exportant des données access vers excel, je demande à l'utilisateur d'enregistrer par sous exemple "feuille.xls".
    Mais si feuille.xls existe déja et est ouvert cela plante.
    j'aimerai savoir quels code utiliser pour vérifier si cette feuille est ouverte.

    j'ai essayer ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if docexcel.sheets("feuille.xls").Workbooks.Open = true then
    end if
    mais bien sur ca ne marche pas.
    C'est tout un art de savoir programmer. Passant des heures à chercher une solution avec plaisir et joie.

  2. #2
    Membre régulier

    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 80
    Points : 111
    Points
    111
    Par défaut
    Je peux pas répondre à ta question mais voila une petite chose qui pourra peut etre t'avancer :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Set fs = CreateObject("Scripting.FileSystemObject")
    If fs.FileExists("c:\tondoc.xls") Then
        msgbox "le fichier existe"
    else
       msgbox "le fichier n'existe pas"
    end if
    Set fs=nothing
    Ca sert à verifier si un fichier existe déja par exemple...

  3. #3
    Membre habitué Avatar de scully2501
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    184
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 184
    Points : 148
    Points
    148
    Par défaut
    ok merci cela est très interessant je vais le testé
    C'est tout un art de savoir programmer. Passant des heures à chercher une solution avec plaisir et joie.

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France, Calvados (Basse Normandie)

    Informations forums :
    Inscription : Septembre 2004
    Messages : 147
    Points : 172
    Points
    172
    Par défaut
    Bonjour,
    utilise la fonction getattr (qui permet notement de supprimer l'option lecture seulle d'un fichier).
    cette fonction renvoie une erreur si le fichier est ouvert. Tu peux intercepter cette erreur.
    Bien entendu pour les paramètres je te renvoie à l'aide ms
    A+

  5. #5
    Membre habitué Avatar de scully2501
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    184
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 184
    Points : 148
    Points
    148
    Par défaut
    merci pour ta reponse mais je n'ai pas encore trouver le bon attribut pour sa voir si le fichier est ouvert.
    quand je test les chiffres ne change pas.
    C'est tout un art de savoir programmer. Passant des heures à chercher une solution avec plaisir et joie.

  6. #6
    Membre expérimenté
    Avatar de Frank
    Homme Profil pro
    Chef de projet Informatique
    Inscrit en
    Avril 2002
    Messages
    1 095
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Chef de projet Informatique
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Avril 2002
    Messages : 1 095
    Points : 1 392
    Points
    1 392
    Par défaut
    La fonction GetObject() peut t'aider.

    Fais une recherche dans Access, tu as un exemple tout prêt pour toi.

  7. #7
    Membre habitué Avatar de scully2501
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    184
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 184
    Points : 148
    Points
    148
    Par défaut
    ok merci cela m'aide le seul hic est que tant excel n'est pas ouvert il envoie un message vu qu'il n'y à pas de feuille active!!
    C'est tout un art de savoir programmer. Passant des heures à chercher une solution avec plaisir et joie.

  8. #8
    Membre expérimenté
    Avatar de Frank
    Homme Profil pro
    Chef de projet Informatique
    Inscrit en
    Avril 2002
    Messages
    1 095
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Chef de projet Informatique
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Avril 2002
    Messages : 1 095
    Points : 1 392
    Points
    1 392
    Par défaut
    Citation Envoyé par scully2501
    ok merci cela m'aide le seul hic est que tant excel n'est pas ouvert il envoie un message vu qu'il n'y à pas de feuille active!!
    Normal, non ?
    A toi de gérer l'exception.

  9. #9
    Membre expérimenté
    Avatar de Frank
    Homme Profil pro
    Chef de projet Informatique
    Inscrit en
    Avril 2002
    Messages
    1 095
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Chef de projet Informatique
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Avril 2002
    Messages : 1 095
    Points : 1 392
    Points
    1 392
    Par défaut
    voilà comment j'exploite la fonction que j'ai trouvé dans l'aide Access.

    Et je n'ai aucun problème avec:

    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
    Public Sub VerifSiInstance()
    Dim MonOBjExcel As Excel.Application
     
     'Procedure dectects a running Excel and registers it.
        Const WM_USER = 1024
        Dim hWnd As Long
    ' If Excel is running this API call returns its handle.
        hWnd = FindWindow("XLMAIN", 0)
        If hWnd = 0 Then    ' 0 means Excel not running.
            Exit Sub
        Else
        ' Excel is running so use the SendMessage API
        ' function to enter it in the Running Object Table.
            'SendMessage hWnd, WM_USER + 18, 0, 0
            Set MonOBjExcel = GetObject(, "Excel.application")
            'MsgBox "Il reste un instance Excel ouverte !", vbExclamation
            MonOBjExcel.Quit
            Set MonOBjExcel = Nothing
        End If
     
    End Sub
    Ne pas oublier de déclarer les apis en début de module:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    ' Declare necessary API routines:
    Declare Function FindWindow Lib "user32" Alias _
    "FindWindowA" (ByVal lpClassName As String, _
                        ByVal lpWindowName As Long) As Long
     
    Declare Function SendMessage Lib "user32" Alias _
    "SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, _
                        ByVal wParam As Long, _
                        ByVal lParam As Long) As Long

  10. #10
    Membre habitué Avatar de scully2501
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    184
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 184
    Points : 148
    Points
    148
    Par défaut
    ok merci je vais me debrouiller.

    j'ai un autre probleme concernant la sauvegarde.

    Quand j'exporte les données access sur excel, à la fin de l'exportation
    j'ai mis un code qui permet de fermer excel,fermer le processus et sauvegarder.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    ActiveWorkbook.Save
    docexcel.Application.Quit
    Set docexcel = Nothing ' fermeture du processus excel
    la sauvegarde automatique marche impec si j'exporte les données dans un nouveau classeur excel mais si je reprend le meme classeur la sauvegarde ne fonctionne pas:
    j'ai le message d'erreur suivant:

    "variable objet ou variable de bloc with non definie"
    je doute que l'erreur n'avance à rien mais je ne comprend pas pourquoi quand je veux resauvegarder dans le meme classeur ca bug.
    C'est tout un art de savoir programmer. Passant des heures à chercher une solution avec plaisir et joie.

  11. #11
    Membre habitué Avatar de scully2501
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    184
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 184
    Points : 148
    Points
    148
    Par défaut
    Citation Envoyé par Frank
    voilà comment j'exploite la fonction que j'ai trouvé dans l'aide Access.

    Et je n'ai aucun problème avec:

    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
    Public Sub VerifSiInstance()
    Dim MonOBjExcel As Excel.Application
     
     'Procedure dectects a running Excel and registers it.
        Const WM_USER = 1024
        Dim hWnd As Long
    ' If Excel is running this API call returns its handle.
        hWnd = FindWindow("XLMAIN", 0)
        If hWnd = 0 Then    ' 0 means Excel not running.
            Exit Sub
        Else
        ' Excel is running so use the SendMessage API
        ' function to enter it in the Running Object Table.
            'SendMessage hWnd, WM_USER + 18, 0, 0
            Set MonOBjExcel = GetObject(, "Excel.application")
            'MsgBox "Il reste un instance Excel ouverte !", vbExclamation
            MonOBjExcel.Quit
            Set MonOBjExcel = Nothing
        End If
     
    End Sub
    Ne pas oublier de déclarer les apis en début de module:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    ' Declare necessary API routines:
    Declare Function FindWindow Lib "user32" Alias _
    "FindWindowA" (ByVal lpClassName As String, _
                        ByVal lpWindowName As Long) As Long
     
    Declare Function SendMessage Lib "user32" Alias _
    "SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, _
                        ByVal wParam As Long, _
                        ByVal lParam As Long) As Long
    Cela marche merci pour ce code.
    Si excel est ouvert ca le ferme et je peux continuer la manipulation.

    Mais je n'ai toujours pas trouvé de solution pour le probleme de sauvegarde pourtant je cherche je cherche
    C'est tout un art de savoir programmer. Passant des heures à chercher une solution avec plaisir et joie.

  12. #12
    Membre habitué Avatar de scully2501
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    184
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 184
    Points : 148
    Points
    148
    Par défaut
    J'ai enfin trouvé un post qui régle mon probleme de sauvegarde.
    http://www.developpez.net/forums/vie...ght=resume+xlw

    il faut creer deux set un pour ouvrir l'application l'autre pour ouvrir le classeur excel.

    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
     
    Dim docexcel As Excel.Application
     
    Set docexcel = CreateObject("EXCEL.Application")
     
    Set myworkbook = docexcel.Workbooks.Open(filename:=chemin)  'ouverture du classeur excel
     
    docexcel.Application.Visible = false ' l'application excel est invisible
     
    myworkbook.Save
     
    myworkbook.Close
     
    docexcel.Application.Quit
     
    Set myworkbook = Nothing
     
    Set docexcel = Nothing ' fermeture du processus excel
    encore merci pour vos aides precieuses.
    C'est tout un art de savoir programmer. Passant des heures à chercher une solution avec plaisir et joie.

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

Discussions similaires

  1. Comment savoir si une fenêtre est ouverte ?
    Par darksteph dans le forum Qt
    Réponses: 5
    Dernier message: 03/05/2010, 10h52
  2. [vb2003] Comment savoir si une form est ouvert
    Par Herlece dans le forum Windows Forms
    Réponses: 15
    Dernier message: 08/11/2006, 00h43
  3. Comment savoir si une form est ouverte (créé)?
    Par UnSofteuxAmateur dans le forum Delphi
    Réponses: 1
    Dernier message: 30/09/2006, 11h24
  4. [VBA] Comment savoir si une feuille est protégée avec mdp ?
    Par JulienCEA dans le forum Macros et VBA Excel
    Réponses: 23
    Dernier message: 06/04/2006, 16h34
  5. [Swing] comment savoir si une fenetre est ouverte ?
    Par uraxyd dans le forum AWT/Swing
    Réponses: 3
    Dernier message: 31/12/2005, 11h55

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