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 :

VBA Excel: Nombre de fichiers Excel ouverts


Sujet :

Macros et VBA Excel

  1. #1
    Membre régulier
    Étudiant
    Inscrit en
    Mars 2007
    Messages
    163
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2007
    Messages : 163
    Points : 76
    Points
    76
    Par défaut VBA Excel: Nombre de fichiers Excel ouverts
    Bonjour à tous,

    Je voudrais savoir combien de fichier Excel ouverts. Pour cela j'ai écris ces 3 lignes:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Dim excelApp As Excel.Application
     
    Set excelApp = CreateObject("Excel.Application")
    MsgBox (excelApp.Workbooks.count)
    Le problème c'est que j'ai ouvert 4 fichiers Excel. Mais le MsgBox me retourne 0. Je ne comprends pas du tout pourquoi.

    Croyant que l'origine du problème était la propriété "Count" de la collection WorkBooks, j'ai alors essayé d'accéder à un de mes fichiers ouverts, en écrivant cette ligne,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Dim excelApp As Excel.Application
    Dim excelBook As Excel.Workbook
     
    Set excelApp = CreateObject("Excel.Application")
    Set excelBook = excelApp.Workbooks( 1)
    Et là, j'ai une erreur. Donc, mes fichiers Excel Ouverts ne sont pas visibles?

    Merci de votre aide.

  2. #2
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MsgBox Application.Workbooks.Count
    Une explication : Quand tu mets
    Dim excelApp As Excel.Application
    Set excelApp = CreateObject("Excel.Application")
    tu crées une nouvelle instance d'Excel (vas dans le gestionnaire des tâches et tu verras qu'Excel est ouvert plusieurs fois) et dans cette instance, tu n'ouvres aucun fichier... Donc, tu as 0
    Inutile d'instancier Excel pour avoir le nombre de fichiers ouverts dans l'application active

  3. #3
    Membre régulier
    Étudiant
    Inscrit en
    Mars 2007
    Messages
    163
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2007
    Messages : 163
    Points : 76
    Points
    76
    Par défaut
    Merci pour ta réponse.
    J'ai compris... Mais comment puis-je alors récupérer l'instance courante?
    Ces lignes, ci-dessus, sont appelées depuis Access.
    Mon problème n’est donc toujours pas résolu.

  4. #4
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    Ok. Dans Access, tu ouvres une instance d'Excel puis les fichiers. Là tu peux compter le nombre des fichiers que tu as ouverts avec excelApp (avec ton code)
    Compter les fichiers ouverts dans une instance qui n'en contient pas, tu peux mettre 0 sans poser de question.
    Mais je crois comprendre que ce n'est pas là ton pb. Peux-tu préciser ?

  5. #5
    Membre régulier
    Étudiant
    Inscrit en
    Mars 2007
    Messages
    163
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2007
    Messages : 163
    Points : 76
    Points
    76
    Par défaut
    En fait, je veux ouvrir un fichier Excel. Or que celui-ci peut être ouvert par un utilisateur. Donc, avant l'ouverture, j'aimerais d'abord tester si le fichier est ouvert ou non (Si c'est oui, alors demander la réponse de l'utilisateur).

    Espérant que je suis plus explicite.

    merci pour tes réponse.

  6. #6
    Membre confirmé

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

    Informations forums :
    Inscription : Octobre 2004
    Messages : 453
    Points : 520
    Points
    520
    Par défaut
    juste un exemple de ce qui peut être fait:

    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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    Sub AccederAUnClasseur()
        Dim excelApp As Excel.Application
        Dim excelBook As Excel.Workbook
        Dim nomFichier As String
     
        nomFichier = "PatatiEtPatata.xls"
        On Error Resume Next
        Set excelApp = GetObject("Excel.Application")
        ' Aucune instance d'Excel ouverte?
        If Err.Number <> 0 Then
            Err.Clear
            ' Ouvrir une instance
            Set excelApp = CreateObject("Excel.Application")
        End If
        Set excelBook = excelApp.Workbooks(nomFichier)
        ' Aucun fichier de ce nom ouvert?
        If Err.Number <> 0 Then
            Err.Clear
            ' Ouvrir le fichier
            excelApp.Workbooks.Open nomFichier
            ' Erreur à l'ouverture?
            If Err.Number <> 0 Then
                Err.Clear
                MsgBox Prompt:="Le fichier " & nomFivhier & " ne peut pas être ouvert!", _
                        Buttons:=vbOKOnly + vbCritical, Title:="Erreur d'ouverture de fichier"
                ' Terminer le processus car le fichier ne peut pas être ouvert
                Exit Sub  ' ou Function ou For ou Do, dépendamment du contexte
            End If
            ' Prendre en note le dernier classeur ouvert
            Set excelBook = excelApp.Workbooks(excelApp.Workbooks.Count)
        End If
        On Error GoTo 0
    End Sub

  7. #7
    Membre régulier
    Étudiant
    Inscrit en
    Mars 2007
    Messages
    163
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2007
    Messages : 163
    Points : 76
    Points
    76
    Par défaut
    Pouquoi je fais cela?

    Le but est de créer un nouveau fichier Excel rempli automatiquement par un programme Access.

    Il y a un formulaire dans Access qui permet de choisir le répertoire de sauvegarde et, par une zone de saisie, d'entrer le nom du fichier à générer.

    Comme il est probable que l'utilisateur choisisse des noms semblables pour différents fichiers créés, j'avais peur qu'il y ait un beug (Excel ne permet pas d'ouvrir deux fichier Excel portant le même nom). C'est pour cette raison que je voulais d'abord parcourir la collection WorkBooks pour connaitre les noms des fichiers ouverts et tester avec le nom du fichier à créer.

    Mais, finalement, comme il s'agit d'une nouvelle instance, cela devient possible (2 fichiers portant un même nom, sont ouverts dans deux instances différentes).

    Le seul probème qui reste est dans le cas ou les deux fichiers ouverts ne sont que le même fichier. Mais j'interdirai ce cas en demandant à l'utilisateur si il veut remplacer le fichier.

    Merci pour ton précieuse aide.

    Bien cordialement.

  8. #8
    Membre régulier
    Étudiant
    Inscrit en
    Mars 2007
    Messages
    163
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2007
    Messages : 163
    Points : 76
    Points
    76
    Par défaut
    Citation Envoyé par Singular Voir le message
    juste un exemple de ce qui peut être fait:

    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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    Sub AccederAUnClasseur()
        Dim excelApp As Excel.Application
        Dim excelBook As Excel.Workbook
        Dim nomFichier As String
     
        nomFichier = "PatatiEtPatata.xls"
        On Error Resume Next
        Set excelApp = GetObject("Excel.Application")
        ' Aucune instance d'Excel ouverte?
        If Err.Number <> 0 Then
            Err.Clear
            ' Ouvrir une instance
            Set excelApp = CreateObject("Excel.Application")
        End If
        Set excelBook = excelApp.Workbooks(nomFichier)
        ' Aucun fichier de ce nom ouvert?
        If Err.Number <> 0 Then
            Err.Clear
            ' Ouvrir le fichier
            excelApp.Workbooks.Open nomFichier
            ' Erreur à l'ouverture?
            If Err.Number <> 0 Then
                Err.Clear
                MsgBox Prompt:="Le fichier " & nomFivhier & " ne peut pas être ouvert!", _
                        Buttons:=vbOKOnly + vbCritical, Title:="Erreur d'ouverture de fichier"
                ' Terminer le processus car le fichier ne peut pas être ouvert
                Exit Sub  ' ou Function ou For ou Do, dépendamment du contexte
            End If
            ' Prendre en note le dernier classeur ouvert
            Set excelBook = excelApp.Workbooks(excelApp.Workbooks.Count)
        End If
        On Error GoTo 0
    End Sub
    Merci pour ta solution. Je pense qu'elle me sera utile.
    Très bonne journée.

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

Discussions similaires

  1. [XL-2010] vbaexcel recherche et envoye des données de fichier excelà un autre fichier excel
    Par Marc31 dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 09/08/2011, 15h42
  2. [XL-2003] Afficher un hyperlien vers fichier Excel dans un fichier Excel
    Par belgudo dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 21/06/2011, 17h26
  3. [XL-2003] Compter le nombre de fichier excel ouvert provenant d'un répertoire spécifique
    Par JeanSairien dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 19/08/2010, 16h22
  4. [VBA-E]Afficher les fichiers excel ouvert et leur onglets dispo pour les ouvrir
    Par anubisigfrid dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 12/03/2007, 23h52
  5. [VBA-E]Déplacer/Renommer fichier excel
    Par wanou44 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 06/02/2006, 17h01

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