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 :

[VBA] supprimer un Classeur Excel


Sujet :

Access

  1. #1
    Provisoirement toléré
    Inscrit en
    Septembre 2005
    Messages
    147
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 147
    Points : 62
    Points
    62
    Par défaut [VBA] supprimer un Classeur Excel
    Bjr,

    J'ai le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Function macro_suppr_IMP()
     
    Set fso = CreateObject("Scripting.FileSystemObject")
     
    fso.deletefile "C:\Documents and Settings\pommbe01\Bureau\IMP.xls"
     
    End Function
    Ce dernier me permet de supprimer un classeur Excel IMP.xls.

    Tout fonctionnait bien jusqu'à aujourd'hui ou maintenant j'ai l'erreur d'execution suivante : Permission Refusée.

    Comment faire pour avoir cette permission???

    Merci à tous.

  2. #2
    Expert éminent
    Avatar de cafeine
    Inscrit en
    Juin 2002
    Messages
    3 904
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 3 904
    Points : 6 781
    Points
    6 781
    Par défaut
    Sinon tu as la fonction Kill()

    évidemment tu ne pourras supprimer un fichier que si personne ne l'a ouvert ...
    il faut tester avant si tu as un accès en écriture ...

    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 IsFileOpen(ByVal strFic As String) As Boolean
        Dim fic As Integer
        On Error Resume Next
     
        fic = FreeFile()
        Open strFic For Input Access Read Lock Read Write As fic
     
        If Err.Number = 0 Then
            IsFileOpen = False
            Close fic
        Else
            IsFileOpen = True
        End If
    End Function
    Ne mettez pas "Problème" dans vos titres, par définition derrière toute question se cache un problème
    12 tutoriels Access



  3. #3
    Provisoirement toléré
    Inscrit en
    Septembre 2005
    Messages
    147
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 147
    Points : 62
    Points
    62
    Par défaut
    Meme probleme avec la fonction Kill.

    J'essaie de voir avec le test.

  4. #4
    Provisoirement toléré
    Inscrit en
    Septembre 2005
    Messages
    147
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 147
    Points : 62
    Points
    62
    Par défaut
    J'ai essayé ton test mais j'ai le message d'erreur suivant :

    Impossible pour Microsoft Office Access de trouver le nom "strFic" entré dans l'expression.

    Pourtant cette variable est bien déclarée???[/code]

  5. #5
    Provisoirement toléré
    Inscrit en
    Septembre 2005
    Messages
    147
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 147
    Points : 62
    Points
    62
    Par défaut
    J'ai vérifié le fichier Excel IMP n'est pas protégé en ecriture.

    J'ai passé toute l'après midi la dessus j'ai tout essayé et rien!!!

    Le sincerement je sais plus quoi faire.

  6. #6
    Expert éminent
    Avatar de cafeine
    Inscrit en
    Juin 2002
    Messages
    3 904
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 3 904
    Points : 6 781
    Points
    6 781
    Par défaut
    que renvoie IsFileOpen() sur ton fichier ?
    Ne mettez pas "Problème" dans vos titres, par définition derrière toute question se cache un problème
    12 tutoriels Access



  7. #7
    Provisoirement toléré
    Inscrit en
    Septembre 2005
    Messages
    147
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 147
    Points : 62
    Points
    62
    Par défaut
    Fichier en cours d'utilisation

    IMP.XLS est vérouillé pour modification.

  8. #8
    Expert éminent
    Avatar de cafeine
    Inscrit en
    Juin 2002
    Messages
    3 904
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 3 904
    Points : 6 781
    Points
    6 781
    Par défaut
    non, c'est un booléen soit True, soit False
    Ne mettez pas "Problème" dans vos titres, par définition derrière toute question se cache un problème
    12 tutoriels Access



  9. #9
    Provisoirement toléré
    Inscrit en
    Septembre 2005
    Messages
    147
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 147
    Points : 62
    Points
    62
    Par défaut
    Justement il me renvoit rien il bloque des la premier ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Function IsFileOpen(ByVal strFic As String) As Boolean
    Et j'ai alors le message suivant :

    Impossible pour Microsoft Office Access de trouver le nom "strFic" entré dans l'expression.

  10. #10
    Expert éminent
    Avatar de cafeine
    Inscrit en
    Juin 2002
    Messages
    3 904
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 3 904
    Points : 6 781
    Points
    6 781
    Par défaut
    Tu dois rentrer cette fonction dans un module ...

    je ne vois pas ce qui pourrait faire bloquer la compilation dans ce code
    Ne mettez pas "Problème" dans vos titres, par définition derrière toute question se cache un problème
    12 tutoriels Access



  11. #11
    Provisoirement toléré
    Inscrit en
    Septembre 2005
    Messages
    147
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 147
    Points : 62
    Points
    62
    Par défaut
    Oui elle est dans un module.

    Ensuite j'ai fait un executer code au niveau de ma macro et j'ai choisi ce module.

    Mais j'ai comme meme ce message d'erreur.

  12. #12
    Expert éminent
    Avatar de cafeine
    Inscrit en
    Juin 2002
    Messages
    3 904
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 3 904
    Points : 6 781
    Points
    6 781
    Par défaut
    Tu mets quoi dans ta macro ?
    Ne mettez pas "Problème" dans vos titres, par définition derrière toute question se cache un problème
    12 tutoriels Access



  13. #13
    Provisoirement toléré
    Inscrit en
    Septembre 2005
    Messages
    147
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 147
    Points : 62
    Points
    62
    Par défaut
    C'est une macro Autoexec.

    Je réalise d'abord une action Transférer Feuil Calcul grace à laquelle j'exporte le résultat d'une requete dans Excel.
    Ensuite j'execute un code qui est le suivant :
    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
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
     
    Function macro1()
    '
    ' Macro1 Macro
    ' Macro enregistrée le 20/10/2005 par pommbe01
    '
        Dim appXl As Excel.Application
        Set appXl = CreateObject("Excel.Application")
     
        'Pour ne pas avoir d'avertissement si le fichier est déjà créé
        appXl.DisplayAlerts = False
     
        'Affiche (True) ou pas (False) la fenêtre Excel
        appXl.Visible = False
     
        appXl.AskToUpdateLinks = False
        appXl.Workbooks.Open Filename:="C:\Documents and Settings\pommbe01\Bureau\IMP"
     
     
        Dim c As Variant, compte As Integer
     
        compte = 0
        '
        appXl.Range("A1:B1").Select
        appXl.Selection.Font.Bold = True
        appXl.Columns("A:A").EntireColumn.AutoFit
        appXl.Columns("B:B").EntireColumn.AutoFit
     
        appXl.Range("A2").CurrentRegion.Select
        appXl.Selection.Sort Key1:=Range("A2"), Order1:=xlAscending, Header:=xlGuess, _
                       OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
     
        For Each c In Range("A2", appXl.Range("A2").End(xlDown).Address)
            c.Select
     
            'faire le calcul
            If c.Offset(-1, 0) = c Then
                compte = c.Offset(-1, 1) + c.Offset(0, 1)
                c.Offset(0, 3) = compte
            Else
                c.Offset(0, 3) = c.Offset(0, 1)
                compte = 0
            End If
        Next
     
        'nettoyer les résultats superflus
        For Each c In Range("A2", Range("A2").End(xlDown).Address)
            If c.Offset(1, 0) = c Then
                c.Offset(0, 3) = ""
            End If
        Next
     
        'effacer les lignes
        appXl.Range("A2").End(xlDown).Select
    go:
        If appXl.Selection.Address <> "$A$2" Then
            If appXl.Selection.Offset(-1, 0) = appXl.Selection Then
                appXl.Selection.Offset(-1, 0).EntireRow.Delete
            End If
            appXl.Selection.Offset(-1, 0).Select
            GoTo go
        End If
     
        appXl.Range("B1").Select
        appXl.Selection.Copy
        appXl.Range("D1").Select
        appXl.ActiveSheet.Paste
        appXl.Columns("B:B").Select
        appXl.Application.CutCopyMode = False
        appXl.Selection.Delete Shift:=xlToLeft
        appXl.Columns("C:C").Select
        appXl.Selection.Cut
        appXl.Columns("B:B").Select
        appXl.ActiveSheet.Paste
     
        Set appXl = Nothing
     
    End Function
    Ce module me permet d'additionner les valeurs dans la colonne B lorsque leurs dates dans la colonne A sont identiques.

    Le fichier est lié à une table dans Access.

    Enfin je lance ce module qui me pause probleme.

    J'espere que ces informations vont permettre de trouver la solution.

    Merci de m'accorder ton aide.

  14. #14
    Expert éminent
    Avatar de cafeine
    Inscrit en
    Juin 2002
    Messages
    3 904
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 3 904
    Points : 6 781
    Points
    6 781
    Par défaut


    Manifestement, tu ne lis pas nos réponses, ton appli s'étale sur une demi douzaine de threads sur les forum Access et VB.

    Or, je ne vois pas dans ton code de fermeture de fichier, ni de fermeture d'Excel ... comment dès lors comptes-tu effacer un fichier encore ouvert ?

    Ce thread est là pour savoir comment effacer un fichier, nous y avons répondu.

    à toi de savoir refermer le fichier et Excel.
    Ne mettez pas "Problème" dans vos titres, par définition derrière toute question se cache un problème
    12 tutoriels Access



  15. #15
    Provisoirement toléré
    Inscrit en
    Septembre 2005
    Messages
    147
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 147
    Points : 62
    Points
    62
    Par défaut
    Je le ferme mais par un autre module.

    J'ai 6 module et au moins 20 Macros j'ai juste indique celle qui concerne directement le fichier IMP.

    En fait j'ai un autre module qui realise la chose suivante :
    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
     
    Function Fermer_test()
     
    Dim appXl As Excel.Application
    Dim oClasseur As Excel.Workbook
     
    Set appXl = CreateObject("Excel.Application")
     
    'Pour ne pas avoir d'avertissement si le fichier est déjà créé
        appXl.DisplayAlerts = False
     
        'Affiche (True) ou pas (False) la fenêtre Excel
        appXl.Visible = False
     
        appXl.AskToUpdateLinks = False
        Set oClasseur = appXl.Workbooks.Open("C:\Documents and Settings\pommbe01\Bureau\Copie de Test")
     
    appXl.ActiveWindow.Close SaveChanges:=False
     
    appXl.Quit
     
    Set appXl = Nothing
     
    Set oClasseur = Nothing
     
    End Function
    Je réalise donc les choses dans cet ordre : action Transférer Feuil Calcul grace à laquelle j'exporte le résultat d'une requete dans Excel puis j'execute le code de la macro1 ensuite le code cité juste avant (Fermer test) et enfin j'essai le test pour savoir si le fichier est ouvert.

    Dsl de pas avoir tout indique mais ma base est assez consequente donc je peux pas tout indiquer dans mes messages.

    Je lis tous vos post avec attention surtout qu'il me reste que ce probleme pour que ma base tourne correctement mais la sincerement j'ai beau tout essayer je galere pour savoir d'ou vient le probleme.

    J'ai parfaitement conscience que tu passes bcp de temps sur ces problemes et je t'en remercie.

  16. #16
    Expert éminent
    Avatar de cafeine
    Inscrit en
    Juin 2002
    Messages
    3 904
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 3 904
    Points : 6 781
    Points
    6 781
    Par défaut
    Tu ne peux pas fermer un fichier ouvert par une instance d'Excel avec une autre instance.
    Ton ouverture et ta fermeture doivent utiliser le meme objet Excel.

    Je ne passe pas trop de temps sur ces problèmes, je veux juste ne pas répéter 10 fois les même choses.

    Je vois plus les choses comme ça :

    1- une fonction d'export Excel (grâce à TransferSpreadsheet) [sans instancier Excel]
    2- une fonction d'automation Excel qui prend en charge le traitement de A à Z (avec ouverture puis fermeture) [avec instanciation Excel]
    3- une fonction d'effacement de fichier [sans instancier Excel]

    est-ce compatible ?
    Ne mettez pas "Problème" dans vos titres, par définition derrière toute question se cache un problème
    12 tutoriels Access



  17. #17
    Provisoirement toléré
    Inscrit en
    Septembre 2005
    Messages
    147
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 147
    Points : 62
    Points
    62
    Par défaut
    A priori oui je vais essayer de modifier tout ca pour voir si ca l'est.

    Merci

  18. #18
    Provisoirement toléré
    Inscrit en
    Septembre 2005
    Messages
    147
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 147
    Points : 62
    Points
    62
    Par défaut
    Petite derniere question instancier ca veut dire quoi exactement??

  19. #19
    Expert éminent
    Avatar de cafeine
    Inscrit en
    Juin 2002
    Messages
    3 904
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 3 904
    Points : 6 781
    Points
    6 781
    Par défaut
    c'est quand tu crées un objet Excel

    ex :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set appXl = CreateObject("Excel.Application")
    Ne mettez pas "Problème" dans vos titres, par définition derrière toute question se cache un problème
    12 tutoriels Access



  20. #20
    Provisoirement toléré
    Inscrit en
    Septembre 2005
    Messages
    147
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 147
    Points : 62
    Points
    62
    Par défaut
    Bjr,

    Alors j'ai suivi tes instructions.

    J'ai donc une action Transférer Feuil Calcul qui Exporte ma table vers Excel.
    Ensuite j'execute le code suivant :
    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
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
     
    Function macro1()
    '
    ' Macro1 Macro
    ' Macro enregistrée le 20/10/2005 par pommbe01
    '
        Dim appXl As Excel.Application
        Set appXl = CreateObject("Excel.Application")
     
        'Pour ne pas avoir d'avertissement si le fichier est déjà créé
        appXl.DisplayAlerts = False
     
        'Affiche (True) ou pas (False) la fenêtre Excel
        appXl.Visible = False
     
        appXl.AskToUpdateLinks = False
        appXl.Workbooks.Open Filename:="C:\Documents and Settings\pommbe01\Bureau\IMP"
     
     
        Dim c As Variant, compte As Integer
     
        compte = 0
        '
        appXl.Range("A1:B1").Select
        appXl.Selection.Font.Bold = True
        appXl.Columns("A:A").EntireColumn.AutoFit
        appXl.Columns("B:B").EntireColumn.AutoFit
     
        appXl.Range("A2").CurrentRegion.Select
        appXl.Selection.Sort Key1:=Range("A2"), Order1:=xlAscending, Header:=xlGuess, _
                       OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
     
        For Each c In Range("A2", appXl.Range("A2").End(xlDown).Address)
            c.Select
     
            'faire le calcul
            If c.Offset(-1, 0) = c Then
                compte = c.Offset(-1, 1) + c.Offset(0, 1)
                c.Offset(0, 3) = compte
            Else
                c.Offset(0, 3) = c.Offset(0, 1)
                compte = 0
            End If
        Next
     
        'nettoyer les résultats superflus
        For Each c In Range("A2", Range("A2").End(xlDown).Address)
            If c.Offset(1, 0) = c Then
                c.Offset(0, 3) = ""
            End If
        Next
     
        'effacer les lignes
        appXl.Range("A2").End(xlDown).Select
    go:
        If appXl.Selection.Address <> "$A$2" Then
            If appXl.Selection.Offset(-1, 0) = appXl.Selection Then
                appXl.Selection.Offset(-1, 0).EntireRow.Delete
            End If
            appXl.Selection.Offset(-1, 0).Select
            GoTo go
        End If
     
        appXl.Range("B1").Select
        appXl.Selection.Copy
        appXl.Range("D1").Select
        appXl.ActiveSheet.Paste
        appXl.Columns("B:B").Select
        appXl.Application.CutCopyMode = False
        appXl.Selection.Delete Shift:=xlToLeft
        appXl.Columns("C:C").Select
        appXl.Selection.Cut
        appXl.Columns("B:B").Select
        appXl.ActiveSheet.Paste
     
        Workbooks("IMP.XLS").Close SaveChanges:=False
     
        Set appXl = Nothing
     
    End Function
    Ce fichier "IMP.XLS" est lié à une table dans Access.
    J'execute alors à partir de cette table une requete.

    Enfin J'execute le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Function macro_suppr_IMP()
     
    Set fso = CreateObject("Scripting.FileSystemObject")
     
    fso.deletefile ("C:\Documents and Settings\pommbe01\Bureau\IMP.xls")
     
    End Function
    J'ai donc bien suivi le plan donné (en surveillant les instanciations):

    1 Export Excel
    2 Fonction Automation
    3 Fonction effacement fichier

    Mais j'ai toujours le message d'erreur suivant :
    Erreur d'execution 70 : Permission refusée.

    Je continue d'inspecter mes macros mais je vois pas ou est le problème.

    Merci

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Supprimer un classeur Excel avec VBA
    Par mariecaro dans le forum Macros et VBA Excel
    Réponses: 12
    Dernier message: 10/07/2013, 15h31
  2. VBA supprimer plusieur ligne excel
    Par morgan47 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 20/06/2006, 20h56
  3. [VBA] supprimer une ligne excel
    Par morgan47 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 20/06/2006, 14h11
  4. [VBA-E]Fermer classeur EXCEL parmi plusieurs
    Par flyfrog dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 30/04/2006, 11h54
  5. Supprimer des classeurs excel
    Par kernel57 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 15/12/2005, 15h04

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