Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Cellules ou groupes de celules

9 réponses
Avatar
JLH974
Bonjour à tous
J'ai cru comprendre (mais je me trompe peut-être, c'est pourquoi j'expose le
cas) que l'on pouvait utiliser des références à .Cells même sur des
classeurs ou des feuilles non actives, sans problèmes.
Par contre, et c'est là la bizarrerie, on ne peut utiliser la proprité
.Range(Cells etc... que sur une feuille active.
Ai-je bien identifié la cause de certains messages d'erreur (en tout cas je
ne vois pas d'autres motifs)

Toutes mes références sont du type Workbooks(n).Worksheets(m).Cells( ou
.Range(Cells( etc...

JLH 974

9 réponses

Avatar
Daniel.C
Bonjour.
Si tu utilises une plage avec cette syntaxe, chaque "Cells" doit être
qualifiée du nom de la feuille à laquelle elle se réfère. Par exemple :

Sheets("Feuil2").Select
With Sheets("Feuil1")
Range(.Cells(1, 1), .Cells(10, 1)).Copy
End With

La syntaxe :
.Range(Cells(1, 1), Cells(10, 1)).Copy
est donc incorrecte.
Par contre :
.Range("A1:A10")
est correcte
Cordialement.
Daniel
Bonjour à tous
J'ai cru comprendre (mais je me trompe peut-être, c'est pourquoi j'expose le
cas) que l'on pouvait utiliser des références à .Cells même sur des classeurs
ou des feuilles non actives, sans problèmes.
Par contre, et c'est là la bizarrerie, on ne peut utiliser la proprité
.Range(Cells etc... que sur une feuille active.
Ai-je bien identifié la cause de certains messages d'erreur (en tout cas je
ne vois pas d'autres motifs)

Toutes mes références sont du type Workbooks(n).Worksheets(m).Cells( ou
.Range(Cells( etc...

JLH 974
Avatar
JLH974
Bonsoir Daniel
En fait, dans les deux cas je précise le classeur et la feuille

Workbooks(n).worksheets(m).cells(x,y).value
Workbooks(n).worksheets(m).Range(Cells(x1,y1),Cells(x2,y2)) etc...
Mais si dans le premier cas tout marche même avec des feuilles inactives,
dans le deuxième cas j'ai un message d'erreur à moins que je ne précise :

Workbooks(n).Worksheets(m).Activate
Workbooks(n).worksheets(m).Range(Cells(x1,y1),Cells(x2,y2)) etc...
C'est cela le "truc bizarre" : L'utilisation de Range pour définir une
adresse ne peut se faire que sur une feuille active sinon "Error"

Jean-Luc


"Daniel.C" a écrit dans le message de
news:
Bonjour.
Si tu utilises une plage avec cette syntaxe, chaque "Cells" doit être
qualifiée du nom de la feuille à laquelle elle se réfère. Par exemple :

Sheets("Feuil2").Select
With Sheets("Feuil1")
Range(.Cells(1, 1), .Cells(10, 1)).Copy
End With

La syntaxe :
.Range(Cells(1, 1), Cells(10, 1)).Copy
est donc incorrecte.
Par contre :
.Range("A1:A10")
est correcte
Cordialement.
Daniel
Bonjour à tous
J'ai cru comprendre (mais je me trompe peut-être, c'est pourquoi j'expose
le cas) que l'on pouvait utiliser des références à .Cells même sur des
classeurs ou des feuilles non actives, sans problèmes.
Par contre, et c'est là la bizarrerie, on ne peut utiliser la proprité
.Range(Cells etc... que sur une feuille active.
Ai-je bien identifié la cause de certains messages d'erreur (en tout cas
je ne vois pas d'autres motifs)

Toutes mes références sont du type Workbooks(n).Worksheets(m).Cells( ou
.Range(Cells( etc...

JLH 974




Avatar
michdenis
Bonjour Daniel,

Si tu places ce code dans un module feuille autre que
la feuil1, ça plante ! Il manque un "point" devant "Range"
selon moi. Ok pour un module standard.
'------------------------------------
Sheets("Feuil2").Select
With Sheets("Feuil1")
Range(.Cells(1, 1), .Cells(10, 1)).Copy
End With
'------------------------------------





"Daniel.C" a écrit dans le message de groupe de discussion :

Bonjour.
Si tu utilises une plage avec cette syntaxe, chaque "Cells" doit être
qualifiée du nom de la feuille à laquelle elle se réfère. Par exemple :

Sheets("Feuil2").Select
With Sheets("Feuil1")
Range(.Cells(1, 1), .Cells(10, 1)).Copy
End With

La syntaxe :
.Range(Cells(1, 1), Cells(10, 1)).Copy
est donc incorrecte.
Par contre :
.Range("A1:A10")
est correcte
Cordialement.
Daniel
Bonjour à tous
J'ai cru comprendre (mais je me trompe peut-être, c'est pourquoi j'expose le
cas) que l'on pouvait utiliser des références à .Cells même sur des classeurs
ou des feuilles non actives, sans problèmes.
Par contre, et c'est là la bizarrerie, on ne peut utiliser la proprité
.Range(Cells etc... que sur une feuille active.
Ai-je bien identifié la cause de certains messages d'erreur (en tout cas je
ne vois pas d'autres motifs)

Toutes mes références sont du type Workbooks(n).Worksheets(m).Cells( ou
.Range(Cells( etc...

JLH 974
Avatar
Daniel.C
Oui, parce que, quand tu écris :
Workbooks(n).worksheets(m).Range(Cells(x1,y1),Cells(x2,y2))
la partie "Workbooks(n).worksheets(m).Range" est bien relative à la
feuille m alors que les cellules Cells(x1,y1) et Cells(x2,y2) font
référence à la feuille active; tu devrais écrire :

Workbooks(n).Worksheets(m).Range(Workbooks(n).Worksheets(m).Cells(x1,
y1), _
Workbooks(n).Worksheets(m).Cells(x2, y2)).Copy

ou :

With Workbooks(n).Worksheets(m)
.Range(.Cells(x1, y1), .Cells(x2, y2)).Copy
End With

Daniel

Bonsoir Daniel
En fait, dans les deux cas je précise le classeur et la feuille

Workbooks(n).worksheets(m).cells(x,y).value
Workbooks(n).worksheets(m).Range(Cells(x1,y1),Cells(x2,y2)) etc...
Mais si dans le premier cas tout marche même avec des feuilles inactives,
dans le deuxième cas j'ai un message d'erreur à moins que je ne précise :

Workbooks(n).Worksheets(m).Activate
Workbooks(n).worksheets(m).Range(Cells(x1,y1),Cells(x2,y2)) etc...
C'est cela le "truc bizarre" : L'utilisation de Range pour définir une
adresse ne peut se faire que sur une feuille active sinon "Error"

Jean-Luc


"Daniel.C" a écrit dans le message de
news:
Bonjour.
Si tu utilises une plage avec cette syntaxe, chaque "Cells" doit être
qualifiée du nom de la feuille à laquelle elle se réfère. Par exemple :

Sheets("Feuil2").Select
With Sheets("Feuil1")
Range(.Cells(1, 1), .Cells(10, 1)).Copy
End With

La syntaxe :
.Range(Cells(1, 1), Cells(10, 1)).Copy
est donc incorrecte.
Par contre :
.Range("A1:A10")
est correcte
Cordialement.
Daniel
Bonjour à tous
J'ai cru comprendre (mais je me trompe peut-être, c'est pourquoi j'expose
le cas) que l'on pouvait utiliser des références à .Cells même sur des
classeurs ou des feuilles non actives, sans problèmes.
Par contre, et c'est là la bizarrerie, on ne peut utiliser la proprité
.Range(Cells etc... que sur une feuille active.
Ai-je bien identifié la cause de certains messages d'erreur (en tout cas
je ne vois pas d'autres motifs)

Toutes mes références sont du type Workbooks(n).Worksheets(m).Cells( ou
.Range(Cells( etc...

JLH 974




Avatar
Daniel.C
Bonjour Denis.

Tout à fait exact, et ce n'est pas faute de m'être déjà fait piéger.

Daniel

Bonjour Daniel,

Si tu places ce code dans un module feuille autre que
la feuil1, ça plante ! Il manque un "point" devant "Range"
selon moi. Ok pour un module standard.
'------------------------------------
Sheets("Feuil2").Select
With Sheets("Feuil1")
Range(.Cells(1, 1), .Cells(10, 1)).Copy
End With
'------------------------------------





"Daniel.C" a écrit dans le message de groupe de
discussion :
Bonjour.
Si tu utilises une plage avec cette syntaxe, chaque "Cells" doit être
qualifiée du nom de la feuille à laquelle elle se réfère. Par exemple :

Sheets("Feuil2").Select
With Sheets("Feuil1")
Range(.Cells(1, 1), .Cells(10, 1)).Copy
End With

La syntaxe :
.Range(Cells(1, 1), Cells(10, 1)).Copy
est donc incorrecte.
Par contre :
.Range("A1:A10")
est correcte
Cordialement.
Daniel
Bonjour à tous
J'ai cru comprendre (mais je me trompe peut-être, c'est pourquoi j'expose le
cas) que l'on pouvait utiliser des références à .Cells même sur des
classeurs ou des feuilles non actives, sans problèmes.
Par contre, et c'est là la bizarrerie, on ne peut utiliser la proprité
.Range(Cells etc... que sur une feuille active.
Ai-je bien identifié la cause de certains messages d'erreur (en tout cas je
ne vois pas d'autres motifs)

Toutes mes références sont du type Workbooks(n).Worksheets(m).Cells( ou
.Range(Cells( etc...

JLH 974
Avatar
JLH974
Merci Daniel
Grâce à toi, j'ai enfin compris pourquoi Excel me gratifait d'un beau
message d'erreur.
Je vais de ce pas modifier toutes mes lignes pour éviter toute ambiguïté (il
y en a des milliers je ne suis pas rendu ;-)
A+

Jean-Luc HOAREAU


"Daniel.C" a écrit dans le message de
news:
Oui, parce que, quand tu écris :
Workbooks(n).worksheets(m).Range(Cells(x1,y1),Cells(x2,y2))
la partie "Workbooks(n).worksheets(m).Range" est bien relative à la
feuille m alors que les cellules Cells(x1,y1) et Cells(x2,y2) font
référence à la feuille active; tu devrais écrire :

Workbooks(n).Worksheets(m).Range(Workbooks(n).Worksheets(m).Cells(x1, y1),
_
Workbooks(n).Worksheets(m).Cells(x2, y2)).Copy

ou :

With Workbooks(n).Worksheets(m)
.Range(.Cells(x1, y1), .Cells(x2, y2)).Copy
End With

Daniel

Bonsoir Daniel
En fait, dans les deux cas je précise le classeur et la feuille

Workbooks(n).worksheets(m).cells(x,y).value
Workbooks(n).worksheets(m).Range(Cells(x1,y1),Cells(x2,y2)) etc...
Mais si dans le premier cas tout marche même avec des feuilles inactives,
dans le deuxième cas j'ai un message d'erreur à moins que je ne précise :

Workbooks(n).Worksheets(m).Activate
Workbooks(n).worksheets(m).Range(Cells(x1,y1),Cells(x2,y2)) etc...
C'est cela le "truc bizarre" : L'utilisation de Range pour définir une
adresse ne peut se faire que sur une feuille active sinon "Error"

Jean-Luc


"Daniel.C" a écrit dans le message de
news:
Bonjour.
Si tu utilises une plage avec cette syntaxe, chaque "Cells" doit être
qualifiée du nom de la feuille à laquelle elle se réfère. Par exemple :

Sheets("Feuil2").Select
With Sheets("Feuil1")
Range(.Cells(1, 1), .Cells(10, 1)).Copy
End With

La syntaxe :
.Range(Cells(1, 1), Cells(10, 1)).Copy
est donc incorrecte.
Par contre :
.Range("A1:A10")
est correcte
Cordialement.
Daniel
Bonjour à tous
J'ai cru comprendre (mais je me trompe peut-être, c'est pourquoi
j'expose le cas) que l'on pouvait utiliser des références à .Cells même
sur des classeurs ou des feuilles non actives, sans problèmes.
Par contre, et c'est là la bizarrerie, on ne peut utiliser la proprité
.Range(Cells etc... que sur une feuille active.
Ai-je bien identifié la cause de certains messages d'erreur (en tout
cas je ne vois pas d'autres motifs)

Toutes mes références sont du type Workbooks(n).Worksheets(m).Cells( ou
.Range(Cells( etc...

JLH 974










Avatar
Blaise Cacramp
Voici la bonne syntaxe

Sheets("Feuil2").Select
With Sheets("Feuil1")
Range(Sheets("Feuil2").Cells(1, 1),Sheets("Feuil2").Cells(10, 1)).Copy
End With

il y a moyen de faire plus court en utilisant une variable objet

Blaise

"Daniel.C" a écrit dans le message de news:

Bonjour.
Si tu utilises une plage avec cette syntaxe, chaque "Cells" doit être
qualifiée du nom de la feuille à laquelle elle se réfère. Par exemple :

Sheets("Feuil2").Select
With Sheets("Feuil1")
Range(.Cells(1, 1), .Cells(10, 1)).Copy
End With

La syntaxe :
.Range(Cells(1, 1), Cells(10, 1)).Copy
est donc incorrecte.
Par contre :
.Range("A1:A10")
est correcte
Cordialement.
Daniel
Bonjour à tous
J'ai cru comprendre (mais je me trompe peut-être, c'est pourquoi j'expose
le cas) que l'on pouvait utiliser des références à .Cells même sur des
classeurs ou des feuilles non actives, sans problèmes.
Par contre, et c'est là la bizarrerie, on ne peut utiliser la proprité
.Range(Cells etc... que sur une feuille active.
Ai-je bien identifié la cause de certains messages d'erreur (en tout cas
je ne vois pas d'autres motifs)

Toutes mes références sont du type Workbooks(n).Worksheets(m).Cells( ou
.Range(Cells( etc...

JLH 974




Avatar
Daniel.C
On est contents d'avoir LA bonne syntaxe, mais à quoi sert la paire
With / End With. Et aussi à quoi bon "Sheets("Feuil2").Select" ?
Daniel

Voici la bonne syntaxe

Sheets("Feuil2").Select
With Sheets("Feuil1")
Range(Sheets("Feuil2").Cells(1, 1),Sheets("Feuil2").Cells(10, 1)).Copy
End With

il y a moyen de faire plus court en utilisant une variable objet

Blaise

"Daniel.C" a écrit dans le message de news:

Bonjour.
Si tu utilises une plage avec cette syntaxe, chaque "Cells" doit être
qualifiée du nom de la feuille à laquelle elle se réfère. Par exemple :

Sheets("Feuil2").Select
With Sheets("Feuil1")
Range(.Cells(1, 1), .Cells(10, 1)).Copy
End With

La syntaxe :
.Range(Cells(1, 1), Cells(10, 1)).Copy
est donc incorrecte.
Par contre :
.Range("A1:A10")
est correcte
Cordialement.
Daniel
Bonjour à tous
J'ai cru comprendre (mais je me trompe peut-être, c'est pourquoi j'expose
le cas) que l'on pouvait utiliser des références à .Cells même sur des
classeurs ou des feuilles non actives, sans problèmes.
Par contre, et c'est là la bizarrerie, on ne peut utiliser la proprité
.Range(Cells etc... que sur une feuille active.
Ai-je bien identifié la cause de certains messages d'erreur (en tout cas
je ne vois pas d'autres motifs)

Toutes mes références sont du type Workbooks(n).Worksheets(m).Cells( ou
.Range(Cells( etc...

JLH 974




Avatar
michdenis
| il y a moyen de faire plus court en utilisant une variable objet

Désolé, mais le code que tu utilises est plutôt "insolite" et
sûrement non recommandable !

Remplace-le par ceci :
'---------------------------------
With Sheets("Feuil2")
.Range(.Cells(1, 1), .Cells(10, 1)).Copy
End With
'---------------------------------

Tu peux l'utiliser peu importe le module dans lequel tu le copieras
ces lignes de code en ayant évidemment une feuille nommée "Feuil2.