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

  1. Aliboron - (MVP Office Mac '03-'19) 12,355 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 a-t-elle été utile ?

    0 commentaires Aucun commentaire

  2. 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 a-t-elle été utile ?

    0 commentaires Aucun commentaire

  3. Aliboron - (MVP Office Mac '03-'19) 12,355 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 a-t-elle été utile ?

    0 commentaires Aucun commentaire

  4. Roland Miller 20 Points de réputation
    2025-09-30T11:14:58.38+00:00

    Bonjour et merci pour votre réponse rapide et très claire.

    Mais je connaissais ces infos. Il y a des milliers de fichiers à convertir. Je cherche une façon de faire par VBA. On ne peut faire ceci manuellement. Ceci implique aussi plusieurs usagers qui n'ont pas la facilité d'intervenir. De plus la fonction Enregistrer sous est bloquée pour ces fichiers.

    Je connais évidemment le mot de passe du projet VBA. Ce qui est triste est de ne pas pouvoir ôter la protection du projet VBA d'un autre fichier par VBA. Cela permettrait de supprimer les modules du projet afin de mettre à jour le fichier et d'ensuite effectuer le Enregistrer sous ce qui laisserait le fichier d'origine intacte aussi. Car nous gérons des mises à jour des fichiers.

    N'y aurait-il pas un moyen comme de modifier une clé du registre ou quelque chose du genre ... pa VBA?

    J'ai vu suite à des recherches que d'autres ont aussi eu cette problématique. Cela ne facilite pas le passage du 32 bits au 64 bits.

    Merci à l'avance.

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

    0 commentaires Aucun commentaire

  5. Vivian-HT 17,895 Points de réputation Personnel externe Microsoft Modérateur
    2025-09-30T00:11:51.7233333+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,

    Merci d'avoir posé votre question sur le forum de questions-réponses Microsoft.

    Le problème que vous rencontrez est dû au fait que le code VBA de vos fichiers .xlsm utilise des déclarations API 32 bits, incompatibles avec Office 64 bits. À l'ouverture du fichier, Excel tente de compiler le code et rencontre des erreurs.

    Si vous n'avez pas besoin de macros :

    1/ Ouvrez le fichier en désactivant les macros (cliquez sur « Désactiver les macros » lorsque vous y êtes invité).

    2/ Enregistrez le fichier au format Classeur Excel (.xlsx) via Fichier > Enregistrer sous.

    3/ Cette opération supprime toutes les macros et empêche leur exécution.

    Si vous avez besoin de macros :

    1/ Mettez à jour le code VBA pour la compatibilité 64 bits en :

    2/ Ajoutant le mot-clé PtrSafe aux déclarations API.

    3/ Remplacez Long par LongPtr pour les arguments pointeurs.

    Pour plus d'informations, veuillez consulter le document officiel de Microsoft ici :Instruction declare

    Exemple:

    #If VBA7 Then
        Declare PtrSafe Function ...
    #Else
        Declare Function ...
    #End If
    

    Nous espérons que ces informations vous ont été utiles. Si vous avez essayé ces méthodes et que le problème persiste, ou si les étapes ci-dessus ne le résolvent pas, n'hésitez pas à nous contacter. Nous examinerons le problème ensemble.

    Veuillez comprendre que notre première réponse ne résout pas toujours le problème immédiatement. Cependant, avec votre aide et des informations plus détaillées, nous pourrons trouver une solution ensemble.

    Si j'ai mal compris une partie de votre demande, n'hésitez pas à me recontacter afin que nous puissions clarifier et vous aider davantage.

    J'attends votre réponse avec impatience.


    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 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 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.