Microsoft 365 Macro "suicide" bloque et ne quitte pas Excel

raf26

XLDnaute Occasionnel
Bonjour,

J'ai un souci avec ma macro qui doit "suicider" le fichier ouvert et quitter Excel.

J'utilise ce même code sur un autre fichier, tout fonctionne bien.

J'ai voulu le copier pour l'adapter à un autre fichier mais cela ne fonctionne pas.

Quand je fais le pas à pas,
arrivé à :

Next Ndx , cela boucle sur
If Application.RecentFiles(Ndx).Path = .FullName Then


VB:
Sub suicide()
    
  
    Dim Ndx         As Integer
    


    
    With ThisWorkbook
        
        Application.DisplayAlerts = False
        
        ActiveWorkbook.SaveAs Filename:="C:\Users\icimonnom\Desktop\blablabla.xlsm", _
                              FileFormat:=xlOpenXMLWorkbookMacroEnabled, CreateBackup:=False
        
        Application.DisplayAlerts = False
        
        For Ndx = 1 To Application.RecentFiles.Count
            If Application.RecentFiles(Ndx).Path = .FullName Then
                Application.RecentFiles(Ndx).Delete
                Exit For
            End If
        Next Ndx
        .ChangeFileAccess Mode:=xlReadOnly
        Kill .FullName
        .Close savechanges:=False
    End With
    
    Application.ScreenUpdating = True
    Application.DisplayFullScreen = False
    
    Application.Cursor = xlDefault
    
    Application.Quit
    
End Sub


Je vous joint un fichier test (attention mon nom est remplacé par icimonnom dans le chemin du fichier).

Merci d'avance pour votre aide.

Cordialement
 

Pièces jointes

  • Classeur1.xlsm
    12.7 KB · Affichages: 6
  • Classeur1.xlsm
    12.7 KB · Affichages: 2
Solution
Bonjour.
Moi c'est le ActiveWorkbook.SaveAs qui me paraît étrange. Qu'est ce que le classeur actif vient faire là dedans si jamais ce n'est pas celui qui porte la macro ?
Et d'ailleurs si le classeur portant la macro est aussi le classeur actif, à quoi rime ces références à ThisWorkbook.FullName ? C'est partout, me semble-t-il, justement celui qui a été spécifié à ce SaveAs. Si on veut parler de celui qu'il y avait avant de le faire, il faudrait plutôt prendre celui noté auparavant dans une variable String.
Je ne vois pas comment ça pourrait boucler indéfiniment. Je suppose que la collection RecentFiles comporte beaucoup de membres …

Dranreb

XLDnaute Barbatruc
Bonjour.
Moi c'est le ActiveWorkbook.SaveAs qui me paraît étrange. Qu'est ce que le classeur actif vient faire là dedans si jamais ce n'est pas celui qui porte la macro ?
Et d'ailleurs si le classeur portant la macro est aussi le classeur actif, à quoi rime ces références à ThisWorkbook.FullName ? C'est partout, me semble-t-il, justement celui qui a été spécifié à ce SaveAs. Si on veut parler de celui qu'il y avait avant de le faire, il faudrait plutôt prendre celui noté auparavant dans une variable String.
Je ne vois pas comment ça pourrait boucler indéfiniment. Je suppose que la collection RecentFiles comporte beaucoup de membres …
 
Dernière édition:

Hasco

XLDnaute Barbatruc
Repose en paix
Bonjour,

Pour information seulement : hier j'ai fait une macro avec le même genre de boucle
For i = 1 To Application.RecentFiles.Count

et malgré le "Application.RecentFiles(i).Delete" à l'intérieur de la boucle, un espion sur "Application.RecentFiles.Count" m'indiquait toujours 25.
J'avais fait auparavant une boucle Do While, qui n'en finissait jamais pour la même raison.

J'ai excel 2019 et ce genre de boucle m'était familier et ne posait aucun problème dans mes versions précédentes d'excel.

Cordialement
 

raf26

XLDnaute Occasionnel
Bonjour

Cette macro me sert à copier/coller une partie des données sur un fichier vierge identique et à supprimer le fichier que j'appellerais "temporaire" qui me sert à la copie.

Ce qui est bizarre c'est que la macro fonctionne nickel sur un autre fichier de structure similaire.

J'ai juste copié / collé la macro dans un module de mon nouveau fichier et là ça bug à la fin de ma macro pour supprimer le fichier actif...

i20100_
salut raf26,
si cette macro est intégré au fichier à supprimer, il n'y a rien a ajouter après
VB:Copier dans le presse-papier
Kill ThisWorkbook.FullName

Pas mieux avec juste ça

Dranreb
Moi c'est le ActiveWorkbook.SaveAs qui me paraît étrange.

J'ai supprimé ces lignes et effectivement cela fonctionne !

Bizarre que sur un fichier, c'est ok et sur un autre non. Mais bon, la macro me supprime bien ce fichier et c'est là le principal

Merci à vous pour vos contributions.
 

Discussions similaires

Réponses
16
Affichages
2 K