Cellules ou groupes de celules

Le
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
Questions / Réponses high-tech
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Daniel.C
Le #21329261
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
JLH974
Le #21329471
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" 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




michdenis
Le #21329691
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"
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
Daniel.C
Le #21329671
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" 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




Daniel.C
Le #21329661
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" 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
JLH974
Le #21330211
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" 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" 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










Blaise Cacramp
Le #21330421
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"
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




Daniel.C
Le #21330561
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"
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




michdenis
Le #21330761
| 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.
Publicité
Poster une réponse
Anonyme