Enregistrer sous un fichier fermé

Roland Miller 20 Points de réputation
2025-09-29T22:38:14.8033333+00:00

Si je pouvais effectuer un enregistrer sous d'un fichier Excel mais qui est fermé cela me serait bien utile.

Mon besoin est de convertir un fichier en format .xlsm en format .xlsx pour empêcher les macros de s'exécuter à l'ouverture.

C'est que j'ai des fichiers avec du code pour API compatible qu'avec Office 32 bits. Si je suis avec Office 64 bits ... je ne peux les ouvrir sans obtenir un message d'erreur de compilation.

Est-il possible de faire ceci?

Ou auriez-vous une autre solution?

Merci à l'avance.

Microsoft 365 et Office | Excel | Pour le business | Autres
0 commentaires Aucun commentaire

7 réponses

Trier par : Plus récent
  1. Vivian-HT 17,900 Points de réputation Personnel externe de Microsoft Corporation Modérateur
    2025-10-01T05:31:39.83+00:00

    Cette réponse a été traduite automatiquement. Par conséquent, elle peut contenir des erreurs grammaticales ou des mots étranges.

    Bonjour @Roland Miller,

    J'apprécie sincèrement votre remarque importante concernant la conversion de fichiers XLSM en XLSX pour éviter les macros, et je comprends parfaitement la gêne occasionnée par une telle limitation.

    Je souhaite donc résumer brièvement ce message afin que les autres membres du forum puissent facilement y trouver des informations utiles :

    Description du problème

    • Problème : Des milliers de classeurs Excel (.xlsm) contiennent du code VBA qui appelle des API Windows 32 bits. Sur Office 64 bits, ces déclarations échouent à la compilation à l'ouverture, ce qui bloque l'utilisation et l'automatisation en aval.
    • Contraintes opérationnelles :
      • La conversion manuelle n'est pas réalisable (volume et nombreux utilisateurs finaux).
      • L'option Enregistrer sous de certains fichiers est bloquée par le code/l'interface utilisateur du classeur.
      • Une partie des fichiers se trouve sur OneDrive, où les verrous de co-création/synchronisation provoquent des erreurs d'enregistrement/enregistrement sous.
      • Bien que le mot de passe du projet VBA soit connu, la suppression programmatique de la protection d'un autre classeur n'est pas prise en charge par le modèle objet Excel/VBE.
      • Aucun commutateur de registre n'est pris en charge pour permettre la compilation du code API 32 bits sous Office 64 bits ou pour contourner la protection VBE.

    Solution terminée (lors du dépannage)

    • L'étape de fermeture et de réouverture a été confirmée et validée : après avoir enregistré le fichier au format .xlsx, le classeur doit être fermé et la copie neutralisée rouverte avant de poursuivre, afin d'éviter tout événement ou contexte de code persistant.

    Exemples renforcés fournis pour VBA et PowerShell + Excel COM : désactivation forcée des macros (AutomationSecurity = ForceDisable),

    ouverture en lecture seule sans mise à jour des liens,

    enregistrement au format .xlsx (standard ou strict),

    fermeture du classeur avant toute action ultérieure,

    gestion sécurisée de OneDrive : sauvegarde locale, puis copie dans OneDrive après fermeture (avec un bref délai d'attente avant nouvelle tentative pour les verrous de fichiers).

    Solution actuelle :

    • Fermer le classeur

    Ouvrir la copie neutralisée au format .xlsx.

    Vous pouvez toujours le faire dans la même macro en ajoutant des instructions pour la fermer.

    Ensuite, ouvrir l'autre.

    Par exemple :

    Sub OpeningWorkbook()
    
    Application.EnableEvents = False
    
    Workbooks.Open FileName:="C:\Users\aliboron\Desktop" & "Workbook2.xlsm"
    
    Application.EnableEvents = True
    
    Application.DisplayAlerts = False
    
    ActiveWorkbook.SaveAs FileName:="Classeur2.xlsx", FileFormat:=xlOpenXMLStrictWorkbook
    
    ActiveWorkbook.Close
    
    Workbooks.Open FileName:="C:\Users\aliboron\Desktop" & "Classeur2.xlsx"
    
    Application.DisplayAlerts = True
    
    End Sub
    
    

    Mise à jour actuelle :

    Bien que nous n’ayons pas encore de calendrier précis pour une correction ou une amélioration, ce problème a été signalé par plusieurs utilisateurs. Si possible, plus l’équipe recevra de commentaires et de préoccupations, plus il sera visible dans une future mise à jour.

    Si des mises à jour ou des annonces sont publiées concernant cette fonctionnalité, je ne manquerai pas de vous les communiquer dès que possible.

    Remarque : Soyez assuré que vous n’êtes pas seul. Je continuerai de suivre ce problème et vous informerai de toute nouvelle mise à jour dès que possible.

    Je vous remercie sincèrement de votre patience et de votre compréhension. Veuillez noter qu’en tant que modérateurs du forum, nous ne participons pas aux décisions de conception du produit et n’avons pas directement accès à la feuille de route de développement.

    En attendant, si vous constatez que mes réponses apportent des informations utiles, veuillez les accepter comme réponse et voter pour elles via le compte qui a posé cette question. Une fois marquée, la réponse sera automatiquement épinglée en haut de la page. Comme d'autres utilisateurs recherchent également des informations dans cette communauté, votre précieux vote aidera certainement les autres utilisateurs ayant des requêtes similaires à trouver plus rapidement la chaîne appropriée et des informations utiles.

    Si vous avez d'autres questions ou besoin de précisions, n'hésitez pas à me contacter. Je suis à votre écoute.


    Si ma réponse vous est utile, veuillez cliquer sur « Accepter la réponse » et voter pour elle. Si vous avez d'autres questions concernant cette réponse, cliquez sur « Commenter ».

    Remarque : Veuillez suivre les étapes décrites dans notre documentation pour activer les notifications par e-mail afin de recevoir la notification associée à ce fil de discussion.

    Accepter la réponse01 réponse

    Cette réponse vous a-t-elle été utile?

    0 commentaires Aucun commentaire

  2. Roland Miller 20 Points de réputation
    2025-09-30T22:26:09.42+00:00

    Oui je crois que je vais y aller comme ceci.

    Je vous remercie grandement.

    Cette réponse vous a-t-elle été utile?

    0 commentaires Aucun commentaire

  3. Aliboron - (MVP Office Mac '03-'19) 13,110 Points de réputation Modérateur bénévole
    2025-09-30T22:20:23.6+00:00

    Oui, il faut fermer le classeur et ouvrir la copie neutralisée en .xlsx. Ce qui peut se faire toujours dans la même macro en ajoutant des instructions pour le fermer puis ouvrir l'autre. Quelque chose comme :


    Sub OuvertureClasseur()

    Application.EnableEvents = False

    Workbooks.Open FileName:="C:\Users\aliboron\Desktop" & "Classeur2.xlsm"

    Application.EnableEvents = True

    Application.DisplayAlerts = False

    ActiveWorkbook.SaveAs FileName:="Classeur2.xlsx", FileFormat:=xlOpenXMLStrictWorkbook

    ActiveWorkbook.Close

    Workbooks.Open FileName:="C:\Users\aliboron\Desktop" & "Classeur2.xlsx"

    Application.DisplayAlerts = True

    End Sub


    Pour OneDrive, je n'ai rien à proposer. Je n'utilise pas les services en ligne, c'est bien trop aléatoire à mon goût. Un peu comme avec les clés USB, je peux y stocker les fichiers une fois tout terminé, mais je travaille toujours en local.

    Cette réponse vous a-t-elle été utile?

    0 commentaires Aucun commentaire

  4. Roland Miller 20 Points de réputation
    2025-09-30T17:36:43.8133333+00:00

    Vraiment encore merci.

    Mon objectif est de convertir (mise à jour) par macros des fichiers contenant du code API compatible qu'avec Office 32 bits version compatible en 32 et 64 bit ... en étant sur un ordi avec Office 64 bits. Je sais que vous avez bien compris ceci.

    Ce code ci-dessous ... je l'ai essayé. De même que le Application.enable events = false évidemment..

    Mais ... une fois que le fichier a été "SaveAs avec le FileFormat = XLOpenXMLStrictWorkbook ... il est alors demeuré ouvert. Il est bien en .xlsx. J'ai vérifié. Mais vu qu'il est demeuré ouvert ... les actions que je lance alors ... ne fonctionne toujours pas. Ça bug. IL faudrait que je le ferme et que je refasse la procédure mais à partir du fichier .xlsx qui a été fermé. Je crois comprendre qu'il faut que le fichier ait été fermé puis réouvert afin que les macros de ce fichier ne soient pas prises en charge.

    Lorsque je fais les conversions par mise à jour (ce que je souhaite) il y a 4 fichiers un à la suite de l'autre dont je fais cette mises à jour.

    Donc il faudrait que d'abord je convertisse les fichiers et qu'ensuite je procède. Ce n'est pas non faisable mais c'est embêtant.

    De plus ... lorsque ces fichiers sont sur OneDrive ... si ... la synchro n'est pas interrompue ... le enregistrer sous plante! À moins que vous ayez une solution à proposer pour ceci aussi. J'utilisais auparavant la Collaboration des fichiers désactivée mais depuis mai dernier cette possibilité a été enlevée totalement. À moins qu'il existe une autre façon de faire pour ceci?

    C'est pourquoi s'il avait été possible de déprotéger le projet VBA par mot de passe par VBA cela aurait été très utile.

    Merci à l'avance.

    Application.DisplayAlerts = False

    ActiveWorkbook.SaveAs FileName:="chemin d'accès" & "Classeur.xlsx", FileFormat:=xlOpenXMLStrictWorkbook

    Application.DisplayAlerts = True

    Cette réponse vous a-t-elle été utile?

    0 commentaires Aucun commentaire

  5. Aliboron - (MVP Office Mac '03-'19) 13,110 Points de réputation Modérateur bénévole
    2025-09-30T15:50:15.5266667+00:00

    Si tu cherches à ouvrir un classeur sans que des macros Workbook_Open s'exécutent, tu peux encadrer la commande par des commandes Application.EnableEvents. En gros, ça peut donner ça :


    Sub OuvertureClasseur()

    Application.EnableEvents = False

    Workbooks.Open FileName:="chemin d'accès" & "Classeur.xlsm"

    Application.EnableEvents = True

    End Sub

    Tu peux ensuite l'enregistrer en .xlsx pour supprimer toutes les macros avec :

    Application.DisplayAlerts = False

    ActiveWorkbook.SaveAs FileName:="chemin d'accès" & "Classeur.xlsx", FileFormat:=xlOpenXMLStrictWorkbook

    Application.DisplayAlerts = True


    Je ne sais pas si ça peut suffire à répondre à ta demande, je ne suis pas sûr d'avoir bien compris ce que tu veux faire au final...

    Cette réponse vous a-t-elle été utile?

    0 commentaires Aucun commentaire

Votre réponse

Les réponses peuvent être marquées comme « Acceptées » par l’auteur(e) de la question et « Recommandées » par les modérateurs, ce qui aide les utilisateurs à savoir que la réponse a résolu le problème de l’auteur(e).