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.