Set Range impossible

Bonjour,

Je bute sur une erreur bête et minable dont je me surprends moi-même !

Ce code me renvoie l'erreur 1004 sur les lignes "Set sourceRange = ..." ou "Set targetRange = ..." quand la feuille pointée n'est pas celle active. Ce code est dans un module.

Sub import()
Dim sourceRange As Range
Dim rowMax As Long
Dim colMax As Long
Dim targetRange As Range

Set sourceRange = Worksheets("MAIN").Range(Cells(3, 16), Cells(13, Range("MAIN_derColonne").Column))
    rowMax = sourceRange.Rows.Count
    colMax = sourceRange.Columns.Count

Set targetRange = Worksheets("brutes").Range(Cells(1, 1), Cells(colMax, rowMax))

sourceRange.Copy
targetRange.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=True
End Sub

Pourtant si c'est la feuille MAIN qui est active et que j'écris

Worksheets("brutes").Range("A1") = "Toto"

"Toto" s'écris bien sur la feuille "brutes".

Un petit coup de pouce ?

bonjour,

il n'est pas suffisant de spécifier la feuille du Range il faut le répéter pour chaque Cells...

Set targetRange = Worksheets("brutes").Range(Worksheets("brutes").Cells(1, 1), Worksheets("brutes").Cells(colMax, rowMax))

EDIT pour éviter les répétitions on fait souvent :

With Worksheets("brutes")
Set targetRange = .Range(.Cells(1, 1), .Cells(colMax, rowMax))
End with

...avec un point devant les Cells

A+

Bonjour,

Ce code fonctionne correctement chez moi :

Option Explicit

Sub import()

Dim rowMax As Long, colMax As Long, DerniereColonne As Long
Dim sourceRange As Range, targetRange As Range

    With Sheets("MAIN")
         DerniereColonne = .Range("MAIN_derColonne").Column
         Set sourceRange = .Range(.Cells(3, 16), .Cells(13, DerniereColonne))
         rowMax = sourceRange.Rows.Count
         colMax = sourceRange.Columns.Count
    End With

    Set targetRange = Sheets("brutes").Cells(1, 1) ', Cells(colMax, rowMax))

    sourceRange.Copy
    targetRange.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=True

     Set sourceRange = Nothing: Set targetRange = Nothing

End Sub

Merci à tous les deux, je n'avais jamais compris à quoi servaient les points devant les range ou cell.

Par contre je suis étonné que même défini à 1x1, le targetRange ne fasse pas d'erreur avec la méthode PasteSpecial et son paramètre Tranpose à "True".

Il me semblait que dans ce cas là les range source et de destination devaient faire la même taille.

Dans ce cas mes variables maxRow et maxCol sont inutiles...

C'est l'heure... très bon weekend !

Vianney

Rechercher des sujets similaires à "set range impossible"