Method 'Range' of Object '_Worksheet' failed
Bonjour à tous,
Nouveau sur le forum ... merci de votre patience
Je cherche à copier une variable tableau d'un classeur à un autre, mais j'obtiens à chaque fois l'erreur "Method 'Range' of Object '_Worksheet' failed"
Private Sub Import_Bank_Data_File()
Dim derniere_ligne_tab, derniere_colonne_tab As Integer 'variables concernat le tableau à copier
Dim derniere_ligne_dest As Integer 'variable concernat la zone de destination dans page IMPORT
Dim Tableau_Data() 'variable tableau dynamique à copier
Dim i, j As Integer
Dim WB_dest As Workbook
Dim ws_dest As Worksheet
'=================================== initialisation des variables :
Set WB_dest = Workbooks(Nom_Classeur) 'classeur de destination de la copie
Set ws_dest = WB_dest.Sheets("IMPORT") 'Feuille de destination dans le classeur
derniere_ligne_tab = Range("A1").End(xlDown).Row 'Compte ligne tableau à copier
derniere_colonne_tab = Range("A1").End(xlToRight).Column 'Compte colonne tableau à copier
ReDim Tableau_Data(derniere_ligne_tab, derniere_colonne_tab) 'Redimensionne tableau dynamique
'==================================== affectation des valeurs à la variable Tableau :
For i = 1 To derniere_ligne_tab
For j = 1 To derniere_colonne_tab
Tableau_Data(i - 1, j - 1) = Cells(i, j)
Next j
Next i
'================================== Copie :
derniere_ligne_dest = ws_dest.Range("A1").End(xlDown).Row 'Comptage des lignes déja remplies dans la feuille de destination
ws_dest.Range(Cells(derniere_ligne_dest + 1, 1), _
Cells(UBound(Tableau_Data, 1) + derniere_ligne_dest, _
UBound(Tableau_Data, 2))) = Tableau_Data
End Sub
Le problème semble venir de l'utilisation de 'Cells()' dans 'Range', car j'ai fait un essai en forçant un 'range' de la taille du tableau d'essai (9x3) : Range("A20:C29") au lieu d'utiliser Cells et ça a marché.
Je dois me planter en utilisant Range avec Cells... Pourtant je dois réussir car mon tableau ne sera pas toujours de 9x3
Merci pour vos lumières !
Hello,
Essaie de remplacer :
ws_dest.Range(Cells(derniere_ligne_dest + 1, 1), _
Cells(UBound(Tableau_Data, 1) + derniere_ligne_dest, _
UBound(Tableau_Data, 2))) = Tableau_Data
par :
ws_dest.Range(ws_dest.Cells(derniere_ligne_dest + 1, 1), _
ws_dest.Cells(UBound(Tableau_Data, 1) + derniere_ligne_dest, _
UBound(Tableau_Data, 2))) = Tableau_Data
R@g
Waaooo...
Bin y'avait qu' à !
Ca marche. Super. Merci.
Maintenant faut que je comprenne pourquoi, mais je vais chercher.
Merci encore !
En fait quand tu précises pas la feuille, ton programme considère que c'est la feuille active.
R@g
Hmmm.. oui... logique.
Du coup j'ai allégé l'écriture et ... ça marche toujours
With ws_dest
.Range(.Cells(derniere_ligne_dest + 1, 1), _
.Cells(UBound(Tableau_Data, 1) + derniere_ligne_dest, _
UBound(Tableau_Data, 2))) = Tableau_Data
End With
Bonjour à tous,
j'arrive trop tard... mais une proposition de simplifications :
'==================================== affectation des valeurs à la variable Tableau :
'For i = 1 To derniere_ligne_tab
'For j = 1 To derniere_colonne_tab
'Tableau_Data(i - 1, j - 1) = Cells(i, j)
'Next j
'Next i
Tableau_Data = Range(Cells(1, 1), Cells(derniere_ligne_tab, derniere_colonne_tab))
et
'================================== Copie :
derniere_ligne_dest = ws_dest.Range("A1").End(xlDown).Row 'Comptage des lignes déja remplies dans la feuille de destination
'ws_dest.Range(Cells(derniere_ligne_dest + 1, 1), _
' Cells(UBound(Tableau_Data, 1) + derniere_ligne_dest, _
' UBound(Tableau_Data, 2))) = Tableau_Data
ws_dest.Range("A" & derniere_ligne_dest + 1).Resize(UBound(Tableau_Data, 1), UBound(Tableau_Data, 2)) = Tableau_Data
A+
Pas de soucis, je prends tout
L'affectation de tableau est effectivement plus rapide : je ne savais pas qu'on pouvait faire comme ça.
J'apprends !
Merci beaucoup pour cette aide rapide et bien documentée.