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 :

fermer un fichier excel sans sauvegarder


Sujet :

VBA Access

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    153
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 153
    Points : 86
    Points
    86
    Par défaut fermer un fichier excel sans sauvegarder
    bonjour

    J'ai une petite base de données Access.
    Dans celle ci j'ai définie avec un peu de code en vba un petit programme qui me permet de parcourir tous les fichiers excels d'un repertoire et d'en imprimer le contenu selon un critere.

    Le problème c'est que je n'arrive pas a fermer ces fichiers une fois leurs contenus imprimés.
    du cou pour chacun des fichier a imprimer j'ai une invite de commande qui me demande si je veu sauvegarder.

    J'ai essayé avec d'autres syntaxes mais j'ai des messages d'erreurs.
    voici mon code, si quelqu'un peut me donner un cou de pouce.

    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
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
     
    Private Sub Commande20_Click()
    'imprimer toutes les factures d'un meme repertoire suivant certains criteres
     
    Dim repertoire As String
    Dim fichier As String
    Dim extension As String
    Dim animal As String
    Dim année As Integer
    Dim semaine As String
    'Dim xlfichier As Excel.Workbook
    Dim i As Integer
     
     i = 0 'initialisation du compteur
     extension = "*.xls" 'selection de l'extension à rechercher dans le repertoire
     animal = InputBox("type d'animal desiré?") 'selection du type de facture à editer
     année = InputBox("quelle année?") 'choix de l'année des factures
     semaine = InputBox("entrez le numero de semaine desirée")
     If animal = "agneaux" Then
        repertoire = ("N:\cuma\3ieme version\CUMAFACTURE\agneaux\" & année & "\") 'definition du chemin corespondant"
        ElseIf animal = "bovins" Then
        repertoire = ("N:\cuma\3ieme version\CUMAFACTURE\GROSBOVIN\" & année & "\")
            ElseIf animal = "porcs" Then
            repertoire = ("N:\cuma\3ieme version\CUMAFACTURE\Porcs\" & année & "\")
                ElseIf animal = "veaux" Then
                repertoire = ("N:\cuma\3ieme version\CUMAFACTURE\Veaux\" & année & "\")
      End If
     
     'MsgBox (repertoire)
     fichier = Dir(repertoire & extension) 'association du repertoire et l'extension
     'MsgBox (fichier)
         Do Until fichier = ""  'jusqu'a qu'il n'y ai plus de fichier excel
            If InStr(1, fichier, "D" & semaine, vbTextCompare) <> 0 Then  'recherche du numero de semaine non de fichier excel
            Excel.Application.AskToUpdateLinks = False 'permet de ne pas afficher la demande de mise a jour des liaisons
            Excel.Workbooks.Open(repertoire & fichier).PrintOut 1, 1  'ouverture et impression des fichiers
            fichier = Dir
            i = i + 1 'incrementation du compteur
            Else
            fichier = Dir
            End If
            Excel.Workbooks.Close
        Loop
     
      MsgBox ("nombre de factures editées: " & i)
      Excel.Application.Quit 'fermeture d'excel
      End Sub
    voila merci d'avance.

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    427
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 427
    Points : 520
    Points
    520
    Par défaut
    Bonjour,
    tu peux essayer d'utiliser cette constante (2)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Excel.Workbooks.Close xlDoNotSaveChanges
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Excel.Workbooks.Close 2
    Par défaut tu dois être sur une constante du style xlSavePromt

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    153
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 153
    Points : 86
    Points
    86
    Par défaut
    Merci d'avoir pris le temps de me répondre.
    J'ai essayé ce que tu me proposais Oleff mais malheureusement ça ne marche pas.
    Avec ta syntaxe j'ai le message d'erreur suivant: "nombre d'arguments incorrects ou affectation de propriétés incorrects".

  4. #4
    Membre habitué
    Inscrit en
    Mars 2007
    Messages
    337
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 337
    Points : 188
    Points
    188
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    oClasseur.Close: Save = False
    où oClasseur est ton objet classeur

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    153
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 153
    Points : 86
    Points
    86
    Par défaut
    Désoler mais cette solution ne fonctionne pas non plus
    message d'erreur: "objet requis".

    Merci

  6. #6
    Membre habitué
    Inscrit en
    Mars 2007
    Messages
    337
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 337
    Points : 188
    Points
    188
    Par défaut
    même comme ça ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Excel.Workbooks.Close : save = false

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    153
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 153
    Points : 86
    Points
    86
    Par défaut
    Et oui même comme ça ne fonctionne pas.
    C'est quand même bête de buter sur un truc qui doit être tout con.
    Je continue a chercher, je vous tiendrai informer si j'arrive a m'en sortir

  8. #8
    Membre habitué
    Inscrit en
    Mars 2007
    Messages
    337
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 337
    Points : 188
    Points
    188
    Par défaut
    Je viens de relire ton code.

    Il y a une erreur évidente:

    Tu as un If machin.....

    Si certaines conditions sont vérifiées, tu ouvres ton classeur Excel.

    Après être sorti du If, tu fermes ton classeur Excel.

    Si tu ne rentres pas dans le If, ton classeur n'est pas ouvert, donc il est normal qu'au moment où tu cherches à le fermer, Access pousse des hurlements.

    Mets ton code de fermeture du classeur à l'ntérieur du If qui l'ouvre, tu auras déjà moins de chances que ça te fasse un bug.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
         Do Until fichier = ""  'jusqu'a qu'il n'y ai plus de fichier excel
            If InStr(1, fichier, "D" & semaine, vbTextCompare) <> 0 Then  'recherche du numero de semaine non de fichier excel
            Excel.Application.AskToUpdateLinks = False 'permet de ne pas afficher la demande de mise a jour des liaisons
            Excel.Workbooks.Open(repertoire & fichier).PrintOut 1, 1  'ouverture et impression des fichiers
            fichier = Dir
            i = i + 1 'incrementation du compteur
            ' Il vaut mieux que tu fermes ton classeur ici
            Else
            fichier = Dir
            End If
            ' Si ton classeur n'a pas été ouvert, Access va hurler.
            Excel.Workbooks.Close
        Loop

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    153
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 153
    Points : 86
    Points
    86
    Par défaut
    En effet "Moua" tu as raison, mon instruction de fermeture n'est pas au bon endroit.
    J'ai donc rectifié le tir.
    Mais je n'arrive toujours pas a mes fins même si logiquement mon programme est plus juste.

    j'ai essayé avec une autre syntaxe que voici et qui me renvoi l'erreur: " l'indice n'appartient pas a la sélection"

    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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
     
    Private Sub Commande20_Click()
    'imprimer toutes les factures d'un meme repertoire suivant certains criteres
     
    Dim repertoire As String
    Dim xlfichier As String
    Dim fichier As String
    Dim extension As String
    Dim animal As String
    Dim année As Integer
    Dim semaine As String
    'Dim xlfichier As Excel.Workbook
    Dim i As Integer
     
     i = 0 'initialisation du compteur
     extension = "*.xls" 'selection de l'extension à rechercher dans le repertoire
     animal = InputBox("type d'animal desiré?") 'selection du type de facture à editer
     année = InputBox("quelle année?") 'choix de l'année des factures
     semaine = InputBox("entrez le numero de semaine desirée")
     If animal = "agneaux" Then
        repertoire = ("N:\cuma\3ieme version\CUMAFACTURE\agneaux\" & année & "\") 'definition du chemin corespondant"
        ElseIf animal = "bovins" Then
        repertoire = ("N:\cuma\3ieme version\CUMAFACTURE\GROSBOVIN\" & année & "\")
            ElseIf animal = "porcs" Then
            repertoire = ("N:\cuma\3ieme version\CUMAFACTURE\Porcs\" & année & "\")
                ElseIf animal = "veaux" Then
                repertoire = ("N:\cuma\3ieme version\CUMAFACTURE\Veaux\" & année & "\")
      End If
     
     'MsgBox (repertoire)
      xlfichier = Dir(repertoire & extension) 'association du repertoire et l'extension
      fichier = (repertoire & xlfichier) 'definiton des noms de fichiers
     'MsgBox (fichier)
         Do Until xlfichier = ""  'jusqu'a qu'il n'y ai plus de fichier excel
            If InStr(1, xlfichier, "D" & semaine, vbTextCompare) <> 0 Then  'recherche du numero de semaine non de fichier excel
            excel.Application.AskToUpdateLinks = False 'permet de ne pas afficher la demande de mise a jour des liaisons
            excel.Workbooks.Open(fichier).PrintOut 1, 1  'ouverture et impression des fichiers
            i = i + 1 'incrementation du compteur
            excel.Workbooks(xlfichier).Close False
            xlfichier = Dir
            Else
            xlfichier = Dir
            End If
         Loop
     
      MsgBox ("nombre de factures editées: " & i)
      excel.Application.Quit 'fermeture d'excel
      End Sub
    voila merci encore de votre aide, je sent que ça avance un peu quand même.

  10. #10
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    153
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 153
    Points : 86
    Points
    86
    Par défaut
    J'ai fait quelques recherches et en fait ce message d'erreur est du au fait que le programme n'arrive pas a faire le lien avec le fichier a fermer.
    En fait il faut qu'en parametre dans excel.workbooks(parametre).close il n'y ai que le nom de fichier.

    C'est ce que j'ai fait en passant par la variable xlfichier, mais çà ne change rien.

  11. #11
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    153
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 153
    Points : 86
    Points
    86
    Par défaut
    Bon j'ai fini par trouver la solution.
    Et comme je le pensais c'était vraiment tout bête.
    Encore une histoire de syntaxe. Comme quoi vba n'est pas un langage très simple a manipuler.

    Bref voici la solution pour ceux que çà intéresse.
    J'ai placer la clause "activeworkbook.close false" dans ma boucle if .

    voici le code complet
    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
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
     
    Private Sub Commande20_Click()
    'imprimer toutes les factures d'un même repertoire suivant certains critères
     
    Dim repertoire As String
    Dim fichier As String
    Dim extension As String
    Dim animal As String
    Dim année As Integer
    Dim semaine As String
    Dim i As Integer
     
     i = 0 'initialisation du compteur
     extension = "*.xls" 'selection de l'extension à rechercher dans le repertoire
     animal = InputBox("type d'animal desiré?") 'sélection du type de facture à éditer
     année = InputBox("quelle année?") 'choix de l'année des factures
     semaine = InputBox("entrez le numero de semaine desirée")
     If animal = "agneaux" Then
        repertoire = ("N:\cuma\3ieme version\CUMAFACTURE\agneaux\" & année & "\") 'definition du repertoire de recherche
        ElseIf animal = "bovins" Then
        repertoire = ("N:\cuma\3ieme version\CUMAFACTURE\GROSBOVIN\" & année & "\")
            ElseIf animal = "porcs" Then
            repertoire = ("N:\cuma\3ieme version\CUMAFACTURE\Porcs\" & année & "\")
                ElseIf animal = "veaux" Then
                repertoire = ("N:\cuma\3ieme version\CUMAFACTURE\Veaux\" & année & "\")
      End If
     
     'MsgBox (repertoire)
      fichier = Dir(repertoire & extension) 'association du repertoire et l'extension pour obtenir uniquement le nom du fichier
     MsgBox (fichier)
     'MsgBox (xlfichier)
         Do Until fichier = ""  'jusqu'a qu'il n'y ai plus de fichier excel
            If InStr(1, fichier, "D" & semaine, vbTextCompare) <> 0 Then  'recherche du numero de semaine dans le nom de fichier excel
            excel.Application.AskToUpdateLinks = False 'permet de ne pas afficher la demande de mise a jour des liaisons
            excel.Workbooks.Open(repertoire & fichier).PrintOut 1, 1  'ouverture et impression des fichiers
            i = i + 1 'incrementation du compteur
            ActiveWorkbook.Close False 'fermeture du classeur sans sauvegarder
            fichier = Dir
            Else
            fichier = Dir
            End If
         Loop
     
      MsgBox ("nombre de factures editées: " & i)
      excel.Application.Quit 'fermeture d'excel
      End Sub
    voila encore merci a tous d'avoir prit le temps de m'aider dans mes recherches.

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

Discussions similaires

  1. ouvrir et fermer un fichier excel en sauvegardant les modifications.
    Par decoalaa dans le forum Macros et VBA Excel
    Réponses: 16
    Dernier message: 17/10/2008, 15h37
  2. Fermer un fichier Excel sans sauvegarde
    Par Toad08 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 27/03/2008, 21h03
  3. instruction: fermer fichier excel sans sauvegarder
    Par nynho dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 31/01/2008, 14h59
  4. fermer ma fenetre excel sans demander de sauvegarde
    Par darkspoilt dans le forum VBA Access
    Réponses: 6
    Dernier message: 15/11/2007, 11h28
  5. Fermer Excel sans sauvegarder le classeur
    Par GonAl dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 30/08/2006, 12h32

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