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.

Rechercher des sujets similaires à "method range object worksheet failed"