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-E]Fermer classeur EXCEL parmi plusieurs


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Avril 2006
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 25
    Par défaut [VBA-E]Fermer classeur EXCEL parmi plusieurs
    Bonjour,

    J'utilise trois classeur A, B et C. les macros de A utilisent B et C. A un moment donné j'aimerais fermer B et C pour ouvrir un autre couple D et E et ainsi de suite...

    J'ai vu que je ne peux que fermer TOUS les classeurs via la commande:
    workbooks.close.

    J'ai essayé : workbooks(nomfichier).close mais j'ai une erreur de syntaxe.

    Quelq'un sait comment resoudre ce probleme resumé ainsi : comment fermer un classeur excel parmi plusieurs ?

    Merci d'avance

  2. #2
    Membre émérite
    Inscrit en
    Septembre 2005
    Messages
    617
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 617
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sub CloseWorbook(WordbookName As String)
    Dim Wbk As Excel.Workbook
    For Each Wbk In Excel.Workbooks
        If Wbk.Name = WordbookName Then
            Wbk.Close
        End If
    Next
    End Sub

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    932
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 932
    Par défaut
    Pas mieux !

    Juste si tu veux fermer plusieurs document je pense qu'il te faut faire un tableau avec tab(1)=nom1, tab(2)=nom2...

    En reprenant le code de Vesta

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     Sub CloseWorbook(WordbookName As String)
    Dim Wbk As Excel.Workbook
    for i = 1 to Nombredefichier
        For Each Wbk In Excel.Workbooks
            If Wbk.Name = tab(i) Then
                Wbk.Close
            End If
        Next
    next
    End Sub
    Ps :Grr 3eme fois que je suis obligé d'edit un de mes post à cause de balises LEFT qui se mettent

  4. #4
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    Citation Envoyé par Elstak
    Pas mieux !

    Juste si tu veux fermer plusieurs document je pense qu'il te faut faire un tableau avec tab(1)=nom1, tab(2)=nom2...

    En reprenant le code de Vesta

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     Sub CloseWorbook(WordbookName As String)
    Dim Wbk As Excel.Workbook
    for i = 1 to Nombredefichier
        For Each Wbk In Excel.Workbooks
            If Wbk.Name = tab(i) Then
                Wbk.Close
            End If
        Next
    next
    End Sub
    Ps :Grr 3eme fois que je suis obligé d'edit un de mes post à cause de balises LEFT qui se mettent
    Elstak si tu reprends un code ... reprend le entiérement ... le précédant code avait une variable chaine comme paramétre .. le tiens aussi mais il n'utilise plus le paramétre et un tableau fantome Tab(..) surgit de la nuit


    Sinon :
    Citation Envoyé par flyfrog
    Merci de vos reponses,

    J'avais posté une reponse mais elle n'est pas ici je ne comprend pas pourquoi.

    le .close ne fonctionne pas si je donne le chemin complet du classeur. Je fais un chdir pour fermer le classeur et ça marche.

    Merci
    c'est résolu alors ? ( même si je comprends pas cette hhistoire de chdir ) ?

  5. #5
    Membre averti
    Inscrit en
    Avril 2006
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 25
    Par défaut
    J'ai testé sur mon code. Quand je donne le chemin complet, ça ne marche pas, avec le nom reduit du classeur, ça marche.

    Se peut que ça cloche qlq part dans mon code.

    Merci de vos reponses

  6. #6
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    oui la commande workbooks(Nom).close réclame le nom "réduit" du classeur .. tu peu adapter le code vu plus haut pour qu'il fonctionne avec nom complet..

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Sub CloseWorbook(WordbookName As String)
    Dim Wbk As Excel.Workbook
    For Each Wbk In Excel.Workbooks
        If UCase(Wbk.Path & "\" & Wbk.Name) = UCase(WordbookName) Then
            Wbk.Close
        End If
    Next
    End Sub
    ensuite
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CloseWorbook("c:\tmp\monclasseur.xls")

    Mais Sinon
    il faudrai peu-être réorganiser ton code .. pour qe tu n'est plus à jouer avec ces noms....comment ouvre tu ces classeurs et comment accéede tu à leur donnée ... essai de faire quelque chose du genre :

    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
     
    Sub test()
     Dim Wk1 As Workbook
     Set Wk1 = Workbooks.Open("c:\tmp\monclasseur.xls")
     If Wk1 Is Nothing Then
       MsgBox "erreur ouverture classeur......"
       Exit Sub
     End If
     'Ici tu accéde au classeur
     Wk1.Sheets(1).Range("A1") = "Modif feuille"
     '....
     '...
     'Et quand tu as fini tu ferme le classeur en sauvant (avant d'en ouvrir un autre)
     Wk1.Close True
     End Sub

  7. #7
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    N'oublie pas de mettre l'extension .xls dans le paramètre de Close
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    workbooks("prestations.xls").close
    fonctionne de façon correcte

    Ok?
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  8. #8
    Membre averti
    Inscrit en
    Avril 2006
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 25
    Par défaut
    Merci de vos reponses,

    J'avais posté une reponse mais elle n'est pas ici je ne comprend pas pourquoi.

    le .close ne fonctionne pas si je donne le chemin complet du classeur. Je fais un chdir pour fermer le classeur et ça marche.

    Merci

  9. #9
    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
    Par défaut
    Citation Envoyé par flyfrog
    J'avais posté une reponse mais elle n'est pas ici je ne comprend pas pourquoi.
    Sélectionne ton nom et regarde toutes tes réponses... Ta réponse perdue est peut-être là...
    Et arrête de perdre tes affaires
    Bonne chasse !
    A+

  10. #10
    Membre émérite
    Inscrit en
    Septembre 2005
    Messages
    617
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 617
    Par défaut
    La fonction que je t'ai donnée fonctionne tr_s bien, il faut juste lui donner comme parametre le nom du classeur

Discussions similaires

  1. VBA - agregger 1 classeur excel par ligne
    Par cassedu dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 23/10/2009, 11h48
  2. relier une interface programmée sous VBA avec un classeur excel
    Par lio911_lio dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 27/08/2008, 14h18
  3. [VBA-E]Fermer completement Excel
    Par Elstak dans le forum Macros et VBA Excel
    Réponses: 25
    Dernier message: 19/05/2006, 10h24
  4. [VBA] supprimer un Classeur Excel
    Par beurnoir dans le forum Access
    Réponses: 26
    Dernier message: 14/11/2005, 14h05
  5. [excel vba]case à cocher dans excel pour plusieurs lignes
    Par fcoisb dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 02/03/2005, 11h23

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