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

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
 

Dranreb

XLDnaute Barbatruc
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:

libellule85

XLDnaute Accro
Re : Bug dans macro copie feuille d'un classeur à un autre

Bonjour Dranreb,

Merci pour ta réponse. Je te met le fichier pour que tu vois comment cela fonctionne (cela fonctionne impeccablement avec les fichiers xls !).
 

Pièces jointes

  • Copie de Feuilles ds autre classeur.xls
    53 KB · Affichages: 13
Dernière édition:

Dranreb

XLDnaute Barbatruc
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:

Discussions similaires

Statistiques des forums

Discussions
312 338
Messages
2 087 397
Membres
103 536
dernier inscrit
komivi