Ben parce que tu fais n'importe quoi ! ....
C'est quoi ce (1, 2) à la fin de ta ligne ?
Alors :
xls, c'est une instance de l'application Excel.
xls.Sheets("R_Analyse_croisée" ), c'est une des feuilles de calcul du classeur par défaut de xls.
xls.Sheets("R_Analyse_croisée" ).Range("A1" ), c'est la première cellule d'une feuille du classeur par défaut de xls.
xls.Sheets("R_Analyse_croisée" ).Range("A1" ).End(xlToRight), c'est la première cellule non vide de la ligne 1 d'une des feuilles de calcul ...
Et alors, tu veux en faire quoi ?
Y faire référence ?
Alors fais ça :
Code:
Dim une_cellule As Range
Set une_cellule = xls.Sheets("R_Analyse_croisée").Range("A1").End(xlToRight)
une_cellule n'est pas la dernière cellule non vide de la ligne 1 d'une des feuilles de calcul du classeur par défaut de xls.
une_cellule est une variable qui "pointe" vers cette cellule.
C'est pourquoi ce code était n'importe quoi :
Code:
xls.Sheets("R_analyse_croiséeé).CelulleV.Copy
Le End(xlToRight) est plus intelligent, mais je reviens sur ton pemier exemple pour que tu comprennes :
Code:
Dim Celllule As Range ' <-- Bien :)
Dim CelluleV As Range ' <-- Inutile :( Mais pourquoi pas
For Each Cellule In xls.Sheets("R_analyse_croiséeé).Cells() ' <-- Bien :)
If Cellule = "" Then Exit For ' <-- Bof.
Next Cellule
Set CelluleV = Cellule ' <-- Inutile :( Mais pourquoi pas
Celulle.Copy Destination:= .... ' <-- C'est ça que tu avais oublié !!!
Set Cellule = Nothing ' <-- Très bien :D
Alors je te vois traîner des
xls.Sheets("R_Analyse_croisée") longs CMB.
Quelque part dans ton code, tu as écris :
Code:
Dim xls As Excel.Appliaction
Set xls = ....
C'est donc fait pour l'application.
Proposition :
Fais-le aussi pour le ou les classeurs, la ou les feuilles dont tu as le plus besoin.
Code:
Dim wb As Excel.WorkBook 'Classeur
Dim wsAnaCroi As Excel.WorkSheet 'La feuille R_Analyse_croisée
Dim wsAutre As Excel.WorkSheet 'Une autre feuille
Dim cell As Range
Set wb1 = xls.WorkBooks(1)
Set wsAnaCroi = wb1.WorkSheets("R_Analyse_croisée")
Set wsAutre = xls.WorkBook("wb1 ou un autre").WorkSheets("Une_autre_feuille")
Set cell = wsAnaCroi.Range("A1").End(xlToRight)
cell.Copy Destination:=wsAutre.Range("C4")
Set wb1 = Nothing
Set wsAnaCroi = Nothing
Set wsAutre = Nothing
Set cell = Nothing
Regarde, lignes 10 et 11, c'est plus lisible.
Si c'est pour trois lignes de code, oublie ça.
Si c'est pour un gros projet, n'hésite pas.