Erreur d’exécution '1004' - Problème d'extension

Bonjour à tous,

Je dois d'abord préciser que je suis débutant en VB. Je fais mes macros avec la fonction d'enregistrement automatique et en récupérant des morceaux de code par-ci, par-là.

Je travail sur un formulaire à faire remplir par des sous-traitants. Une fois le formulaire complété, la personne doit cliquer sur un bouton "Valider permis". Si certaines conditions ne sont pas remplies (ex: cellule devant être obligatoirement renseignées), un message s'affiche pour qu'il puisse finir de compléter le formulaire (cette partie fonctionne). Si toutes les conditions sont remplies, ça ouvre la fenêtre "save as" en préparant le nom de fichier et son extension. L'utilisateur choisi le dossier de sauvegarde et le tour doit être joué... Malheureusement, au moment de cliquer sur enregistrer, j'ai une "Erreur d'exécution '1004': Impossible d'utiliser cette extension avec le type de fichier sélectionné. Modifiez l'extension du fichier dans la zone de texte Nom du fichier ou sélectionnez un autre type de fichier dans la zone Type de fichier."

L'extension de mon formulaire est .xlsm et, suivant le code ci-dessous, je demande à enregistrer en .xlsm également.

Sub Validation()
    Application.DisplayAlerts = False
    If ThisWorkbook.Sheets("Feuil1").Range("CO10") <> "2" Then 'si elle est différente de 2 alors
        'message à l'utilisateur
        UserForm3.Show
        'sortie de la procédure

    ElseIf ThisWorkbook.Sheets("Feuil1").Range("CO10") = "2" Then
    Application.DisplayAlerts = False
    Dim Fichier As String
    Dim f As String

    Fichier = "PTW - " & ActiveSheet.Range("g12") & " - " & ActiveSheet.Range("G9") & " - " & ActiveSheet.Range("C24") 'Défini nom pour enregistrement
    ThisWorkbook.Sheets("feuil1").Copy
    f = Application.GetSaveAsFilename(Fichier, filefilter:="Microsoft Excel (*.xlsm),*.xlsm*") 'Nom de fichier préparé
    ActiveWorkbook.SaveAs Filename:=f

End If

End Sub

Je ne comprends pas d'où vient le problème.

Je joins une partie du fichier concerné mais je ne sais pas si les macros vont fonctionner : en essayant sur d'autre ordinateur, j'ai eu des messages d'erreur...

Sauriez-vous m'aider à résoudre ce problème?

D'avance merci pour votre aide.

Bien cordialement.

Seb

Bonjour SebTriton et

Une petite présentation ICI serait la bienvenue

Si vous ne l'avez pas encore fait, je vous invite à lire la charte du forum [A LIRE AVANT DE POSTER]
qui vous aidera dans vos demandes et réponses sur ce forum.

Concernant votre problème, je pense que cela vient de la définition du nom du fichier qui n'est pas complète,
il manque l'extension

 Fichier = "PTW - " & ActiveSheet.Range("g12") & " - " & ActiveSheet.Range("G9") & " - " & ActiveSheet.Range("C24")  & ".xlsm"

Merci de votre participation

Cordialement

Bonjour BrunoM45 et merci pour votre réponse rapide!

J'ai essayer de rajouter l'extension dans la définition et malheureusement, il me renvoie cette erreur 1004.

En faisant le débogage, il me surligne "ActiveWorkbook.SaveAs Filename :=f"

Je ne sais pas si le problème peut venir de là mais entre le moment où je clique sur le bouton "Valider permis" et l'ouverture de la fenêtre "Enregistrer sous", une copie du classeur apparaît avec comme nom "Classeur#" (avec #, le n° qui s'incrémente à chaque tentative). Si je clique sur "Annuler" dans la fenêtre "enregistrer sous", il me nomme le fichier "Faux.xlsx". Je ne comprends pas de où ce ".xlsx" vient.

Bien cordialement.

Bonjour,

Après avoir fait un test, il faut impérativement définir le format d'enregistrement

Sub Validation()
  Dim Fichier As String, sPathFic As String
  Application.DisplayAlerts = False
  If ThisWorkbook.Sheets("Feuil1").Range("CO10") <> "2" Then 'si elle est différente de 2 alors
    'message à l'utilisateur
    UserForm3.Show
    'sortie de la procédure
  ElseIf ThisWorkbook.Sheets("Feuil1").Range("CO10") = "2" Then
    Application.DisplayAlerts = False
    Fichier = "PTW - " & ActiveSheet.Range("g12") & " - " & ActiveSheet.Range("G9") & " - " & ActiveSheet.Range("C24") 'Défini nom pour enregistrement
    ThisWorkbook.Sheets("feuil1").Copy
    sPathFic = Application.GetSaveAsFilename(Fichier, filefilter:="Microsoft Excel (*.xlsm),*.xlsm*") 'Nom de fichier préparé
    ActiveWorkbook.SaveAs Filename:=sPathFic, FileFormat:=xlOpenXMLWorkbookMacroEnabled
  End If
End Sub

A+

Bonjour,

C'est parfait, ça fonctionne.

Il m'a quand même sorti une erreur 1004 différente qui s'est résolue en remplaçant la ligne:

ActiveWorkbook.SaveAs Filename:=sPathFic, FileFormat:=xlOpenXMLWorkbookMacroEnabled

par

Call ActiveWorkbook.SaveAs(Filename:=sPathFic, FileFormat:=xlOpenXMLWorkbookMacroEnabled)

trouvé ailleurs sur le forum.

Je ne sais pas quelle différence cela fait mais ça fonctionne.

En tout cas merci beaucoup pour votre aide. Ça faisait un moment que je me cassais les dents sur ce problème.

Bonne continuation!

Rechercher des sujets similaires à "erreur execution 1004 probleme extension"