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 :

Fermer un classeur à nom variable


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2012
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 31
    Points : 21
    Points
    21
    Par défaut Fermer un classeur à nom variable
    Bonjour,

    Je cherche une macro pour fermer un classeur ouvert. Seulement le nom du fichier peut varier, en revanche le fichier concerné sera toujours en .DAT . Je cherche donc à fermer un classeur en fonction de son extension ".DAT".

    J'ai un code simple qui fonctionne bien avec le nom exact du fichier mais je n'arrive pas à l'adapter à ce que je souhaite :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Sub Fermeture_classeur()
     
    Workbooks("Mon fichier.DAT").Close
     
    End Sub
    Je pensais partir sur quelque chose comme ça, mais ça ne fonctionne pas

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Sub Fermeture_classeur()
     
    Workbooks("*.DAT").Close
     
    End Sub
    Quelqu'un aurait une solution s'il vous plait ?

    Cyril

  2. #2
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 876
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 876
    Points : 28 821
    Points
    28 821
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Plusieurs solutions dont
    • On assigne le nom du classeur à une variable de type String.
    • On assigne le classeur lui même à une variable objet de type Workbook


    Exemple avec variable String
    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
    Sub T1()
      ' Déclaration
      Dim wkbName As String
      Dim Folder As String
      Dim FullName As String
      ' Assignation
      Folder = ThisWorkbook.Path
      wkbName = "SpecialCells.xls"
      FullName = Folder & "\" & wkbName
      Workbooks.Open Filename:=FullName
      ' Traitement
      ' ........... Code ......
      ' Fin de traitement
      ' Fermeture du classeur
      Workbooks(wkbName).Close
    End Sub
    Exemple avec variable Objet
    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
    Sub T2()
      ' Déclaration
      Dim wkb As Workbook
      Dim wkbName As String
      Dim Folder As String
      Dim FullName As String
      ' Assignation
      Folder = ThisWorkbook.Path
      wkbName = "SpecialCells.xls"
      FullName = Folder & "\" & wkbName
      Set wkb = Workbooks.Open(Filename:=FullName)
      ' Traitement
      ' ........... Code ......
      ' Fin de traitement
      ' Fermeture du classeur
      wkb.Close
      Set wkb = Nothing
    End Sub
    Après cela, toutes les combinaisons sont possibles.
    On peut assigner à la variable objet, le classeur actif comme par exemple un nouveau classeur, un classeur que l'on ouvre après avoir fait une recherche avec la fonction Dir, etc.
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2012
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 31
    Points : 21
    Points
    21
    Par défaut
    Bonjour,

    Merci pour ton retour cela fonctionne très bien depuis un classeur ouvert, je conserve tes idée.

    Désolé mais j'ai mal décrit ma situation. Je souhaite fermer un classeur en .DAT qui a un nom que je ne peux pas connaitre à l'avance, depuis un autre classeur.

    Dans ma logique je souhaite chercher un classeur ouvert contenant .DAT dans son nom et le fermer.

    Une idée ? Merci

  4. #4
    Membre actif
    Homme Profil pro
    chef de projet transverse MOE
    Inscrit en
    Janvier 2015
    Messages
    121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : chef de projet transverse MOE
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2015
    Messages : 121
    Points : 229
    Points
    229
    Par défaut
    Je pense qu'il est possible de parcourir la liste des classeurs ouvert (Workbooks). Il doit probablement y avoir une propriété name dans laquelle tu pourras rechercher le .dat.

    Un truc du genre (non testé):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    for each workbook in workbooks
        if ucase(right(workbook.name, 4)) = ".DAT" then
            workbook.close
            exit for
        end if
    next statement

  5. #5
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 876
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 876
    Points : 28 821
    Points
    28 821
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Désolé mais j'ai mal décrit ma situation..
    Sans doute

    Je souhaite fermer un classeur en .DAT
    Pour sauver un classeur sous un autre type, il faut utiliser la méthode SaveAs de l'objet Workbook mais personnellement je ne connais pas ce type DAT. Est-ce un fichier texte ?

    qui a un nom que je ne peux pas connaitre à l'avance, depuis un autre classeur
    Il faudra bien un moment que tu saches comment il se nomme sinon jamais cela ne fonctionnera.
    Ce nom proviendra certainement d'un ou plusieurs paramètres que tu dois connaître

    Poses toi tout simplement la question de savoir comment tu le ferais manuellement et il suffira alors de le traduite en code VBA
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2012
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 31
    Points : 21
    Points
    21
    Par défaut
    Le .DAT est une extension Excel, un peu bâtard, extrait de SAP.

    Comme le code ci-dessous ferme "Mon fichier.DAT" depuis n'importe quel classeur, je dois donc récupérer le nom du fichier .DAT dans une variable.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Sub Fermeture_classeur()
     
    Workbooks("Mon fichier.DAT").Close
     
    End Sub
    Pour se faire je cherche le nom d'un classeur ouvert comportant .DAT en nom, ou bien je bascule sur le fichier .DAT en cours pour trouver son répertoire et récupérer son nom dans une variable, c'est cette partie sur laquelle je bloque.

    Ensuite je récupère la variable et je ferme mon fichier.

    Je vais chercher dans ce sens et faire une proposition.

  7. #7
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 876
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 876
    Points : 28 821
    Points
    28 821
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Pour se faire je cherche le nom d'un classeur ouvert comportant .DAT en nom, ou bien je bascule sur le fichier .DAT en cours pour trouver son répertoire et récupérer son nom dans une variable, c'est cette partie sur laquelle je bloque.
    Ta question est déjà plus claire.

    Pour trouver le nom d'un fichier dans un répertoire, il y a la fonction Dir (voir exemple plus bas) mais si tu ne connais pas non plus son répertoire, je te conseille de lire cette discussion nommée Lister les fichiers d'un répertoire dans une feuille Excel

    Exemple d'une fonction qui renvoie une table avec le nom des fichiers trouvés en fonction du paramètre LookUpFullName
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Function FileList(ByVal LookUpFullName As String) As Variant
      ' Renvoie une liste avec les fichiers présents dans le répertoire défini pas l'argument LookUpFullName
      ' Author  : Philippe Tulliez http://www.magicoffice.be
      ' version : 1.2
      ' Argument
      '   LookUpFullName (String) Répertoire + nom du fichier + extension
      Dim File As String, Counter As Integer, List()
      File = Dir(LookUpFullName)
      Do
        ReDim Preserve List(Counter): List(Counter) = File: Counter = Counter + 1
        If Len(File) Then File = Dir
      Loop While Len(File)
      FileList = List
    End Function
    Exemple d'une procédure qui invoque la fonction FileList
    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
    Sub TestFileList()
       ' Déclaration
       Dim Folder As String
       Dim tblFile()
       Dim SubFolder As String
       Dim Elem As Byte
       Dim msg As String
       '
       Folder = ThisWorkbook.Path
       'SubFolder = "\Folder Empty\"
       'SubFolder = "\data\"
       If Len(SubFolder) = 0 Then SubFolder = "\"
       tblFile = FileList(Folder & SubFolder & "*.xls*")
       If Len(tblFile(0)) Then
          For Elem = 0 To UBound(tblFile)
            msg = msg & vbCrLf & tblFile(Elem)
          Next
        Else
          msg = "Aucun fichier trouvé"
       End If
       MsgBox msg
    End Sub
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  8. #8
    Membre actif
    Homme Profil pro
    chef de projet transverse MOE
    Inscrit en
    Janvier 2015
    Messages
    121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : chef de projet transverse MOE
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2015
    Messages : 121
    Points : 229
    Points
    229
    Par défaut
    hum... et ce que je propose? parcourir la liste des classeurs ouverts et rechercher les classeurs dont le nom se termine par .dat... c'est une connerie ou une bonne idée?

  9. #9
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 876
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 876
    Points : 28 821
    Points
    28 821
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    hum... et ce que je propose? parcourir la liste des classeurs ouverts et rechercher les classeurs dont le nom se termine par .dat... c'est une connerie ou une bonne idée?
    Non, c'est une excellente idée.
    Etant en train de programmer une nouvelle procédure, j'ai mal lu la dernière question du demandeur qui évoquait les fichiers ouverts.
    Je bats ma coulpe
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2012
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 31
    Points : 21
    Points
    21
    Par défaut
    Désolé Tylert j'ai loupé ton message
    hum... et ce que je propose? parcourir la liste des classeurs ouverts et rechercher les classeurs dont le nom se termine par .dat... c'est une connerie ou une bonne idée?
    Je te confirme que ton code fonctionne à merveille ! Il y a un petit soucis avec Statement mais pour ma part je l'ai supprimé et cela fonctionne comme je souhaite Merci !! Je te met quand même le message d’erreur que cela me met :
    Nom : Capture.JPG
Affichages : 1469
Taille : 32,6 Ko

    Merci Philippe Tulliez, effectivement je ne connais pas le répertoire du fichier mais je vais regarder la fonction Dir et le lien que tu m'as envoyé de plus prêt pour mes connaissances persos.
    Pour trouver le nom d'un fichier dans un répertoire, il y a la fonction Dir (voir exemple plus bas) mais si tu ne connais pas non plus son répertoire, je te conseille de lire cette discussion nommée Lister les fichiers d'un répertoire dans une feuille Excel

  11. #11
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 876
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 876
    Points : 28 821
    Points
    28 821
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    L'erreur vient du fait que le Next renvoie à une variable qui n'est pas celle de la boucle et j'en profite pour signaler que cela m'étonne que le VBA n'ait pas signalé une erreur avec Workbook comme variable de la boucle For Each...In...Next

    Il faut utiliser une variable objet de type Workbook mais pas le mot clé Workbook

    Exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Sub t()
      Dim wkb As Workbook
      For Each wkb In Workbooks
        Debug.Print wkb.Name
      Next wkb
      Set wkb = Nothing
    End Sub
    La fin de boucle peut être Next Wkb ou Next
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  12. #12
    Membre actif
    Homme Profil pro
    chef de projet transverse MOE
    Inscrit en
    Janvier 2015
    Messages
    121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : chef de projet transverse MOE
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2015
    Messages : 121
    Points : 229
    Points
    229
    Par défaut
    Effectivement, merci Philippe.
    Je m'étais concentré sur le fond de la solution et pas la forme

    A noter que mon code ferme le premier classeur .dat trouvé puis s'arrette. Si tu en as plusieurs et que tu veux tous les fermer, il faut enlever le exit for.

Discussions similaires

  1. Utiliser les cellules d'un classeur à nom variable
    Par Xenthys dans le forum Excel
    Réponses: 24
    Dernier message: 08/09/2014, 13h12
  2. Réponses: 4
    Dernier message: 23/10/2013, 16h28
  3. Utilisation d'un nom de classeur en variable
    Par willyol3 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 10/08/2009, 18h01
  4. [XL-2003] classeur fermé avec nom variable
    Par wafdou dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 06/05/2009, 22h49
  5. ouvrir un classeur excel à partir d'un nom variable
    Par abu143 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 30/10/2006, 21h53

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