Référence à un autre classeur, erreur

Bonjour à tous,

Je suis actuellement en pleine réalisation d'un code mais je rencontre un problème que je n'arrive pas à résoudre depuis hier.

Pour faire simple, je lance ma macro depuis un classeur (X) et ensuite j'ouvre un autre classeur (Y) à un emplacement déterminé. Donc jusque là tout va bien . Je copie ensuite les données du classeur Y pour les coller dans le classeur X mais une erreur apparaît..

J'ai recherché dans beaucoup de sites mais rien n'y fait.

Je suis débutant en VBA.

Voici une partie du code :

Option Explicit

Public Sub Ouvrir_un_fichier()

'Déclarer les variables de base

  Dim wbSource As Workbook
  Dim wb As Workbook
  Dim Fichier As String

 'On désactive le raffraichissement de l'écran scintillement
    Application.ScreenUpdating = False

'ThisWorkbook correspond au classeur dans lequel la macro s'est lancée
  Set wb = ThisWorkbook

  Fichier = Year(Date) & "_" & "0" & Month(Date) - 1 & "_" & "XXXX_XXX"

'Emplacement du fichier contenant les DATA
  Workbooks.Open "\\XXX\YYY\ZZZ\AAAA\" & Year(Date) & "\" & Fichier & ".xlsx"

'On assigne une variable à ce fichier, dès l’ouverture, il devient le fichier actif
  Set wbSource = ActiveWorkbook

'   Copie/Colle des DATA vers le classeur initial
  Sheets("DATA").Select
  Range("A2:CR" & Range("A900000").End(xlUp).Row).Select
  Selection.Copy

  Workbooks(wb).Select
  Sheets("X_DATA").Select
  ActiveSheet.Range("A3:EJ" & Range("A900000").End(xlUp).Row).Select
  Selection.ClearContents

'ou Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
  :=False, Transpose:=False   ?

  Range("A3").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
  :=False, Transpose:=False

'On ferme le fichier sans le sauver

  wbSource.Close SaveChanges:=False   
End Sub

Je vous remercie par avance pour l'aide que vous pourrez m'apporter.

J'apprends énormément sur ce site !

Bonjour

Il faut supprimer les valeurs avant du faire le copier - coller

Essayez comme ceci :

Public Sub Ouvrir_un_fichier()
'Déclarer les variables de base
Dim wbsource As Workbook
Dim Fichier As String

'On désactive le raffraichissement de l'écran scintillement
Application.ScreenUpdating = False

'ThisWorkbook correspond au classeur dans lequel la macro s'est lancée
With ThisWorkbook.Sheets("X_DATA")
    .Range("A3:EJ" & .Range("A" & .Rows.Count).End(xlUp).Row).ClearContents

    Fichier = Year(Date) & "_" & "0" & Month(Date) - 1 & "_" & "XXXX_XXX"

    'Emplacement du fichier contenant les DATA
    Workbooks.Open "\\XXX\YYY\ZZZ\AAAA\" & Year(Date) & "\" & Fichier & ".xlsx"
    Set wbsource = ActiveWorkbook

    'Copie/Colle des DATA vers le classeur initial
    With wbsource.Sheets("DATA")
        .Range("A2:CR" & Range("A" & .Rows.Count).End(xlUp).Row).Copy
    End With

    .Range("A3").PasteSpecial Paste:=xlPasteValues
End With
'On ferme le fichier sans le sauver
wbsource.Close SaveChanges:=False
Application.ScreenUpdating = True
End Sub

Si ok et terminé, merci de cloturer le fil en cliquant sur le V vert à coté du bouton EDITER lors de votre réponse

Cordialement

Bonjour,

Essayer :

Sub Ouvrir_un_fichier()
    Dim wsS As Worksheet, wsC As Worksheet, Fichier$, Chemin$, n%
    Set wsC = ThisWorkbook.Worksheets("X_DATA")
    Fichier = Format(DateAdd("m", -1, Date), "yy_mm") & "_XXXX_XXX.xlsx"
    Chemin = "\\XXX\YYY\ZZZ\AAAA\" & Year(Date) & "\"
    Application.ScreenUpdating = False
    Workbooks.Open Chemin & Fichier
    Set wsS = ActiveWorkbook.Worksheets("DATA")
    n = wsS.Range("A" & Rows.Count).End(xlUp).Row
    With wsC
        .Range("A3:EJ" & .Range("A" & .Rows.Count).End(xlUp).Row).ClearContents
        .Range("A3").Resize(n + 1, 96).Value = wsS.Range("A2:CR" & n).Value
    End With
    Workbooks(Fichier).Close False
End Sub

Merci, le code fonctionne parfaitement.

Je suis parvenu à trouver la solution finalement il fallait juste écrire :

wb.Activate -> wb était défini comme un classeur donc pas besoin de mettre à nouveau WorkBook.

Merci beaucoup, ce code est plus clair

Re

Pas besoin d'activer le classeur pour faire un copier - coller. C'est inutile.

Si vous utilisez le code que je vous ai adapté cela devrait fonctionner

Cordialement

Re !

Je t'engage à considérer pour progresser un peu en VBA que chaque fois que tu écris Select ou Activate... suivi d'une autre commande à appliquer, ton code est par définition mauvais !

Cordialement.

Rechercher des sujets similaires à "reference classeur erreur"