Bug dans macro copie feuille d'un classeur à un autre

  • Initiateur de la discussion Initiateur de la discussion libellule85
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

libellule85

XLDnaute Accro
Bonjour le forum,

J'ai une macro que j'utilise pour copie une feuille d'un classeur xls vers un autre classeur xls qui fonctionne très bien. Mais là ou cela se gâte c'est quand je veux copier une feuille d'un classeur xlsm vers un autre classeur xlsm !

Quand je veux ouvrir le classeur xlsm de la feuille à copier j'ai un message d'erreur qui apparaît :
Erreur Exécution 1004
La méthode Open de l'objet Wokbooks a échoué

Et quand je fait débogage voici ci-dessous ce qui est surligné :

Code:
Workbooks.Open (.SelectedItems(CLASSEUR_CHOISI))

Je vous met la macro entière :
Code:
Private Sub CommandButton1_Click() ' RECHERCHE DU CLASSEUR SOURCE

Dim CLASSEUR_CHOISI As Long
Dim CLASSEUR_DE_DESTINATION As String

Select Case UserForm1.CommandButton1.Caption

Case "Feuille à Copier"

    With Application.FileDialog(msoFileDialogOpen)
        .AllowMultiSelect = False
        .Show
               For CLASSEUR_CHOISI = 1 To .SelectedItems.Count
               Workbooks.Open (.SelectedItems(CLASSEUR_CHOISI))
               Next CLASSEUR_CHOISI
    End With
    
ActiveWorkbook.Saved = True ' Pour éviter le message de re-calcul des formules d'une version antérieure.

UserForm1.CommandButton1.Caption = "Copier cette Feuille"

' ICI L'ON PEUT CHOISIR LA FEUILLE A COPIER

Case "Copier cette Feuille"

ActiveWorkbook.ActiveSheet.Copy after:=ThisWorkbook.Worksheets(ThisWorkbook.Worksheets.Count)
 
UserForm1.CommandButton1.Caption = "Classeur de Destination"

Case "Classeur de Destination" ' RECHERCHE DU CLASSEUR DE DESTINATION

    With Application.FileDialog(msoFileDialogOpen)
        .AllowMultiSelect = False
        .Show
               For CLASSEUR_CHOISI = 1 To .SelectedItems.Count
               Workbooks.Open (.SelectedItems(CLASSEUR_CHOISI))
               CLASSEUR_DE_DESTINATION = ActiveWorkbook.FullName
               Next CLASSEUR_CHOISI
    End With

  ThisWorkbook.ActiveSheet.Copy after:=ActiveWorkbook.Worksheets(ActiveWorkbook.Worksheets.Count)

           ActiveWorkbook.Save
           ActiveWorkbook.Close
           
Application.DisplayAlerts = False
ThisWorkbook.ActiveSheet.Delete ' SUPPRESSION DE LA FEUILLE PROVISOIREMENT COPIEE DANS "COPIE_FEUILLE"
Application.DisplayAlerts = True
ThisWorkbook.Saved = True

UserForm1.CommandButton1.Caption = "Ok Copie Faite !"
UserForm1.CommandButton1.BackColor = &HFFFF00
Workbooks.Open CLASSEUR_DE_DESTINATION


End Select

End Sub

Quelqu'un aurait-il une idée pour faire fonctionner cette macro avec des fichiers xlsm ?

D'avance, je vous en remercie
 
Re : Bug dans macro copie feuille d'un classeur à un autre

Bonjour.

Il me semble que Application.FileDialog(msoFileDialogOpen) ouvre déjà le classeur choisi.
Pour récupérer juste la référence du fichier en vue de l'ouvrir éventuellement vous même c'est Application.OpenFileName qui la renvoie dans un variant de vbVarType = vbString à vérifier.

Remarque: Je vois que c'est dans un Userform. Vous pourriez lui donner plus de souplesse avec moins de code en mettant sa propriété ShowModal à False.
VB:
Option Explicit
Dim FSource As Worksheet

Private Sub CommandButton1_Click()
If FSource Is Nothing Then
   Set FSource = ActiveSheet
   CommandButton1.Caption = "Coller """ & FSource.Name & """ de """ & FSource.Parent.Name & """."
ElseIf ActiveWorkbook.Name <> FSource.Parent.Name Then
   FSource.Copy After:=ActiveWorkbook.Sheets(ActiveWorkbook.Sheets.Count)
   CommandButton1.Caption = "Copier cette Feuille."
   Set FSource = Nothing
Else
   MsgBox "Veuillez activer un autre classeur", vbCritical, Me.Caption
   End If
End Sub
Cela dit, même comme ça je ne vois pas trop ce que ça apporte par rapport aux manœuvres Excel prévues à cet effet.
 
Dernière édition:
Re : Bug dans macro copie feuille d'un classeur à un autre

Je me suis trompé c'est GetOpenFilename. Et elle renvoie un Variant, non un Objet.
VB:
ChNomf = Application.GetOpenFilename("Classeur,*.xls;*.xlsx;*.xlsm", Title:="Classeur source")
If VbVarType(ChNomf) = vbString Then
    Workbooks.Open ChNomf
    End With
Et que pensez vous de ma seconde proposition ?
 
Dernière édition:
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Retour