Erreur d'exécution '1004': la méthode 'Range' de l'objet'_Gl

Résolu

Bonjour,

J'ai ce code qui fonctionne très bien dans un autre fichier Excel pour transformer les données en CSV. Mais en copiant cette macro dans un nouveau fichier Excel, cela me donne cette erreur ; 

Erreur d'exécution '1004': la méthode 'Range' de l'objet'_Global' à échoué

et voici mon code ; 

Sub Export_csv()
Application.ScreenUpdating = False
Nom = Workbooks(ActiveWorkbook.Name).FullName
Nom = Left(Nom, Len(Nom) - 5) & "_" & Year(Date) & Month(Date) & Day(Date)
ActiveWorkbook.Unprotect Password:="sprs-al8"
Worksheets("Données").Visible = xlSheetVisible
Sheets("Données").Select
ActiveSheet.Unprotect Password:="sprs-al8"
Range("Données").Select <-- le débogueur pointe sur cette ligne
Selection.Copy

Workbooks.Add
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Application.CutCopyMode = False
    Application.DisplayAlerts = False
    ActiveWorkbook.SaveAs Filename:=(Nom & ".csv"), FileFormat:=xlCSV, CreateBackup:=False
    ActiveWindow.Close
    Application.DisplayAlerts = True

Sheets("CSV").Select
Worksheets("Données").Visible = xlSheetHidden
ActiveWorkbook.Protect Password:="sprs-al8"

MsgBox ("Le fichier au format .csv a été enregisté sous : " & Workbooks(ActiveWorkbook.Name).Path)

End Sub


Windows / Chrome 103.0.0.0

4 réponses

  1. Contributeur

    bonjour,

    il manque probablement une zone nommée "Données" dans le nouveau classeur.

    1. Bonjour, 

      Merci pour votre réponse. Mais j'ai une feuille nommé "Données" parmi d'autres feuilles 

      d'où ma confusion. 

      De plus, je ne suis pas très à l'aise avec le code VBA..

    2. Bonjour Barbo_14

      Voici le code optimisé tel que je l'ai compris

      Sub Export_csv()
        Dim Wbk As Workbook
        Dim Nom As String
        ' Désactiver le rafraichissement
        Application.ScreenUpdating = False
        ' Nom du futur classeur csv
        Nom = Workbooks(ActiveWorkbook.Name).FullName
        Nom = Left(Nom, Len(Nom) - 5) & "_" & Year(Date) & Month(Date) & Day(Date)
        ' Définir ce classeur
        St Wbk = ActiveWorkbook
        ' Déprotéger le classeur
        Wbk.Unprotect Password:="sprs-al8"
        ' Avec la feuille "Données"
        With Wbk.Worksheets("Données")
          ' La rendre visible
          .Visible = xlSheetVisible
          ' La déprotégée
          .Unprotect Password:="sprs-al8"
          ' Copier la feuille dans un nouveau classeur
          .Copy
        End With
        ' Avec le nouveau classeur
        With ActiveWorkbook
          ' Sauvegarder sou le nom définit
          .SaveAs Filename:=Nom & ".csv", FileFormat:=xlCSV, CreateBackup:=False
          ' Le fermer
          .Close SaveChanges:=False
        End With
        ' Avec la feuille "Données"
        With Wbk.Worksheets("Données")
          ' Protéger la feuille
          .Protect Password:="sprs-al8"
          ' La rendre invisible
          .Visible = xlSheetHidden
        End With
        ' Protéger le classeur
        Wbk.Protect Password:="sprs-al8"
        Set Wbk = Nothing
        ' Petit message
        MsgBox ("Le fichier au format .csv a été enregisté sous : " & Workbooks(ActiveWorkbook.Name).Path)
        ' réactiver le rafraichissement
        Application.ScreenUpdating = True
      End Sub
      
      

      A+

      1. Merci beaucoup ! 

        Ton code fonctionne parfaitement, j'ai juste dû supprimer la Dim Wbk As Workbook et dans le code la remplacer par ActiveWorkbook, car il me donnait des erreurs de compilation. 

        Mais encore merci, tu me sauves