OVH Cloud OVH Cloud

Modifier une plage de cellules

10 réponses
Avatar
DoMi
Bonjour,

Je cherche =E0 effacer une plage de cellules dans un classeur ouvert
mais non actif.

L'instruction:
Workbooks("Monfichier.xls").Sheets("Feuil1").Range(Cells(2, 17),
Cells(2, 22)).Value =3D ""

g=E9n=E8re une "Erreur d=E9finie par l'application ou par l'objet"

Pourquoi ?

Merci pour votre aide
DoMi

10 réponses

Avatar
Michel Gaboly
Bonjour Domi,

Cela vient de ce que Cells, sans identificateur d'objet, fait référen ce aux cellules de la feuille active, qui par
hypothèse appartient à un autre classeur.

Tu peux utiliser à la place

Workbooks("Monfichier.xls").Sheets("Feuil1").Range(Q2:V2")

Si tu veux absolument utiliser Cells avec des nombres au lieu de réfé rences explicites,

With Workbooks("Monfichier.xls").Sheets("Feuil1")
Range(.Cells(2, 17), .Cells(2, 22)).ClearContents
End With

où en emploie .Cells et non Cells


Enfin, il vaut probablement mieux utiliser .ClearContents plutôt que .V alue = "" pour effacer


Bonjour,

Je cherche à effacer une plage de cellules dans un classeur ouvert
mais non actif.

L'instruction:
Workbooks("Monfichier.xls").Sheets("Feuil1").Range(Cells(2, 17),
Cells(2, 22)).Value = ""

génère une "Erreur définie par l'application ou par l'objet"

Pourquoi ?

Merci pour votre aide
DoMi




--
Cordialement,

Michel Gaboly
www.gaboly.com

Avatar
isabelle
bonjour DoMi,

cette commande mit et exécuter à partir du "Classeur2",
le "Classeur2" étant actif, fonctionne bien

Workbooks("Classeur1").Sheets("Feuil1").Range("A1:B10").ClearContents

isabelle


Bonjour,

Je cherche à effacer une plage de cellules dans un classeur ouvert
mais non actif.

L'instruction:
Workbooks("Monfichier.xls").Sheets("Feuil1").Range(Cells(2, 17),
Cells(2, 22)).Value = ""

génère une "Erreur définie par l'application ou par l'objet"

Pourquoi ?

Merci pour votre aide
DoMi



Avatar
FL
Bonjour,
Essaye cela
Sheets("Feuil1").Range(Cells(2, 17),Cells(2, 22)).ClearContents

à+
FL
"DoMi" a écrit dans le message de news:

Bonjour,

Je cherche à effacer une plage de cellules dans un classeur ouvert
mais non actif.

L'instruction:
Workbooks("Monfichier.xls").Sheets("Feuil1").Range(Cells(2, 17),
Cells(2, 22)).Value = ""

génère une "Erreur définie par l'application ou par l'objet"

Pourquoi ?

Merci pour votre aide
DoMi
Avatar
Jacky
Bonjour,
Peut-être que:
'----------
Sub jj()
Application.ScreenUpdating = False
nom = ActiveWorkbook.Name
Windows("Monfichier.xls").Activate
[Feuil1!q2:v2].ClearContents
Windows(nom).Activate
End Sub
'-------
Ps: le classeur "Monfichier.xls" doit être enregistré
Salutations
JJ

"DoMi" a écrit dans le message de
news:
Bonjour,

Je cherche à effacer une plage de cellules dans un classeur ouvert
mais non actif.

L'instruction:
Workbooks("Monfichier.xls").Sheets("Feuil1").Range(Cells(2, 17),
Cells(2, 22)).Value = ""

génère une "Erreur définie par l'application ou par l'objet"

Pourquoi ?

Merci pour votre aide
DoMi
Avatar
DoMi
Merci à tous de vous être penchés sur mon cas, et surtout à Michel
qui m'a donné la solution !

Effectivement, je pourrais activer le classeur en question, mais je ne
veux pas le faire car je suis dans un UserForm, et je fais des
allers-retour entre plusieurs classeurs, et pour la propreté de
l'affichage, je ne préfère pas abuser des ScreenUpdating = True ou
False...

Je ne peux pas utiliser Range("Q2:V2") car le numéro de la ligne est
variable.
En fait, dans mon code, j'ai, après correction :
Range(.Cells(" & i + 1 & ", 17), .Cells(" & i + 1 & ",
22)).ClearContents

Et ça marche !
Merci encore.
DoMi



Bonjour,
Peut-être que:
'----------
Sub jj()
Application.ScreenUpdating = False
nom = ActiveWorkbook.Name
Windows("Monfichier.xls").Activate
[Feuil1!q2:v2].ClearContents
Windows(nom).Activate
End Sub
'-------
Ps: le classeur "Monfichier.xls" doit être enregistré
Salutations
JJ

"DoMi" a écrit dans le message de
news:
Bonjour,

Je cherche à effacer une plage de cellules dans un classeur ouvert
mais non actif.

L'instruction:
Workbooks("Monfichier.xls").Sheets("Feuil1").Range(Cells(2, 17),
Cells(2, 22)).Value = ""

génère une "Erreur définie par l'application ou par l'objet"

Pourquoi ?

Merci pour votre aide
DoMi


Avatar
Michel Gaboly
De rien Domi ;-)))


Mais tu te compliques la vie avec tes concaténations :

Range(.Cells(i + 1, 17), .Cells(i + 1, 22)).ClearContents

devrait suffire.


Par ailleurs pourquoi des allers-retours entre plusieurs classeurs ?

A part le cas où il est nécessaire d'ouvrir un classeur (ou +) pendan t le traitement, il est en principe inutile de
modifier le classeur actif. Il suffit d'utiliser des With ou une variable objet par classeur. Les .Select et .Activate,
le plus souvent ne servent qu'à ralentir les traitements.


J'espère ne pas t'avoir choquée par ces remarques un peu HS.


Merci à tous de vous être penchés sur mon cas, et surtout à Mic hel
qui m'a donné la solution !

Effectivement, je pourrais activer le classeur en question, mais je ne
veux pas le faire car je suis dans un UserForm, et je fais des
allers-retour entre plusieurs classeurs, et pour la propreté de
l'affichage, je ne préfère pas abuser des ScreenUpdating = True o u
False...

Je ne peux pas utiliser Range("Q2:V2") car le numéro de la ligne est
variable.
En fait, dans mon code, j'ai, après correction :
Range(.Cells(" & i + 1 & ", 17), .Cells(" & i + 1 & ",
22)).ClearContents

Et ça marche !
Merci encore.
DoMi



Bonjour,
Peut-être que:
'----------
Sub jj()
Application.ScreenUpdating = False
nom = ActiveWorkbook.Name
Windows("Monfichier.xls").Activate
[Feuil1!q2:v2].ClearContents
Windows(nom).Activate
End Sub
'-------
Ps: le classeur "Monfichier.xls" doit être enregistré
Salutations
JJ

"DoMi" a écrit dans le message de
news:
Bonjour,

Je cherche à effacer une plage de cellules dans un classeur ouvert
mais non actif.

L'instruction:
Workbooks("Monfichier.xls").Sheets("Feuil1").Range(Cells(2, 17),
Cells(2, 22)).Value = ""

génère une "Erreur définie par l'application ou par l'objet"

Pourquoi ?

Merci pour votre aide
DoMi





--
Cordialement,

Michel Gaboly
www.gaboly.com


Avatar
Jacky
Re...
C'est que chez moi (xl97), le code de Michel ne fonctionne pas:

Workbooks("Monfichier.xls").Sheets("Feuil1").Range("Q2:V2")
= Erreur 438

et
With Workbooks("Monfichier.xls").Sheets("Feuil1")
Range(.Cells(2, 17), .Cells(2, 22)).ClearContents
End With
Efface les cellules dans le fichier en cours

:-(((
Mais si cela fonctionne chez toi, c'est tant mieux

Bonne journée
JJ



"DoMi" a écrit dans le message de
news:
Merci à tous de vous être penchés sur mon cas, et surtout à Michel
qui m'a donné la solution !

Effectivement, je pourrais activer le classeur en question, mais je ne
veux pas le faire car je suis dans un UserForm, et je fais des
allers-retour entre plusieurs classeurs, et pour la propreté de
l'affichage, je ne préfère pas abuser des ScreenUpdating = True ou
False...

Je ne peux pas utiliser Range("Q2:V2") car le numéro de la ligne est
variable.
En fait, dans mon code, j'ai, après correction :
Range(.Cells(" & i + 1 & ", 17), .Cells(" & i + 1 & ",
22)).ClearContents

Et ça marche !
Merci encore.
DoMi



Bonjour,
Peut-être que:
'----------
Sub jj()
Application.ScreenUpdating = False
nom = ActiveWorkbook.Name
Windows("Monfichier.xls").Activate
[Feuil1!q2:v2].ClearContents
Windows(nom).Activate
End Sub
'-------
Ps: le classeur "Monfichier.xls" doit être enregistré
Salutations
JJ

"DoMi" a écrit dans le message de
news:
Bonjour,

Je cherche à effacer une plage de cellules dans un classeur ouvert
mais non actif.

L'instruction:
Workbooks("Monfichier.xls").Sheets("Feuil1").Range(Cells(2, 17),
Cells(2, 22)).Value = ""

génère une "Erreur définie par l'application ou par l'objet"

Pourquoi ?

Merci pour votre aide
DoMi


Avatar
DoMi
Je ne suis pas choqué, je suis toujours ouvert à tout ce qui peut me
faire progresser, et je sais que je trouve ici ce qu'il faut. La
recherche par mot-clé est bien pratique. Quand je pose des questions,
c'est que je n'ai rien trouvé qui me satisfasse...

A part ça, pourquoi ces concaténations? C'est que c'est du code qui
génère du code.
Les 3 lignes, en fait, ça fait:
Code = Code & vbTab & vbTab & vbTab & "With
Workbooks(FicMvts).Sheets(""Feuil1"")" & vbCrLf
Code = Code & vbTab & vbTab & vbTab & vbTab & "Range(.Cells(" &
i + 1 & ", 17), .Cells(" & i + 1 & ", 22)).ClearContents" & vbCrLf
Code = Code & vbTab & vbTab & vbTab & "End With" & vbCrLf

Pas facile à relire...
DoMi


De rien Domi ;-)))


Mais tu te compliques la vie avec tes concaténations :

Range(.Cells(i + 1, 17), .Cells(i + 1, 22)).ClearContents

devrait suffire.


Par ailleurs pourquoi des allers-retours entre plusieurs classeurs ?

A part le cas où il est nécessaire d'ouvrir un classeur (ou +) pendan t le traitement, il est en principe inutile de
modifier le classeur actif. Il suffit d'utiliser des With ou une variable objet par classeur. Les .Select et .Activate,
le plus souvent ne servent qu'à ralentir les traitements.


J'espère ne pas t'avoir choquée par ces remarques un peu HS.


Merci à tous de vous être penchés sur mon cas, et surtout à Mic hel
qui m'a donné la solution !

Effectivement, je pourrais activer le classeur en question, mais je ne
veux pas le faire car je suis dans un UserForm, et je fais des
allers-retour entre plusieurs classeurs, et pour la propreté de
l'affichage, je ne préfère pas abuser des ScreenUpdating = True ou
False...

Je ne peux pas utiliser Range("Q2:V2") car le numéro de la ligne est
variable.
En fait, dans mon code, j'ai, après correction :
Range(.Cells(" & i + 1 & ", 17), .Cells(" & i + 1 & ",
22)).ClearContents

Et ça marche !
Merci encore.
DoMi



Bonjour,
Peut-être que:
'----------
Sub jj()
Application.ScreenUpdating = False
nom = ActiveWorkbook.Name
Windows("Monfichier.xls").Activate
[Feuil1!q2:v2].ClearContents
Windows(nom).Activate
End Sub
'-------
Ps: le classeur "Monfichier.xls" doit être enregistré
Salutations
JJ

"DoMi" a écrit dans le message de
news:
Bonjour,

Je cherche à effacer une plage de cellules dans un classeur ouvert
mais non actif.

L'instruction:
Workbooks("Monfichier.xls").Sheets("Feuil1").Range(Cells(2, 17),
Cells(2, 22)).Value = ""

génère une "Erreur définie par l'application ou par l'objet"

Pourquoi ?

Merci pour votre aide
DoMi





--
Cordialement,

Michel Gaboly
www.gaboly.com




Avatar
Michel Gaboly
Re,

Même dans ce cas,

Code = Code & vbTab & vbTab & vbTab & vbTab & "Range(.Cells(i + 1, 17), .Cells(i + 1 , 22)).ClearContents" & vbCrLf



Je ne suis pas choqué, je suis toujours ouvert à tout ce qui peut m e
faire progresser, et je sais que je trouve ici ce qu'il faut. La
recherche par mot-clé est bien pratique. Quand je pose des questions,
c'est que je n'ai rien trouvé qui me satisfasse...

A part ça, pourquoi ces concaténations? C'est que c'est du code qui
génère du code.
Les 3 lignes, en fait, ça fait:
Code = Code & vbTab & vbTab & vbTab & "With
Workbooks(FicMvts).Sheets(""Feuil1"")" & vbCrLf
Code = Code & vbTab & vbTab & vbTab & vbTab & "Range(.Cells(" &
i + 1 & ", 17), .Cells(" & i + 1 & ", 22)).ClearContents" & vbCrLf
Code = Code & vbTab & vbTab & vbTab & "End With" & vbCrLf

Pas facile à relire...
DoMi


De rien Domi ;-)))


Mais tu te compliques la vie avec tes concaténations :

Range(.Cells(i + 1, 17), .Cells(i + 1, 22)).ClearContents

devrait suffire.


Par ailleurs pourquoi des allers-retours entre plusieurs classeurs ?

A part le cas où il est nécessaire d'ouvrir un classeur (ou +) pen dant le traitement, il est en principe inutile de
modifier le classeur actif. Il suffit d'utiliser des With ou une varia ble objet par classeur. Les .Select et .Activate,
le plus souvent ne servent qu'à ralentir les traitements.


J'espère ne pas t'avoir choquée par ces remarques un peu HS.


Merci à tous de vous être penchés sur mon cas, et surtout à M ichel
qui m'a donné la solution !

Effectivement, je pourrais activer le classeur en question, mais je n e
veux pas le faire car je suis dans un UserForm, et je fais des
allers-retour entre plusieurs classeurs, et pour la propreté de
l'affichage, je ne préfère pas abuser des ScreenUpdating = True ou
False...

Je ne peux pas utiliser Range("Q2:V2") car le numéro de la ligne e st
variable.
En fait, dans mon code, j'ai, après correction :
Range(.Cells(" & i + 1 & ", 17), .Cells(" & i + 1 & ",
22)).ClearContents

Et ça marche !
Merci encore.
DoMi



Bonjour,
Peut-être que:
'----------
Sub jj()
Application.ScreenUpdating = False
nom = ActiveWorkbook.Name
Windows("Monfichier.xls").Activate
[Feuil1!q2:v2].ClearContents
Windows(nom).Activate
End Sub
'-------
Ps: le classeur "Monfichier.xls" doit être enregistré
Salutations
JJ

"DoMi" a écrit dans le message de
news:
Bonjour,

Je cherche à effacer une plage de cellules dans un classeur ouvert
mais non actif.

L'instruction:
Workbooks("Monfichier.xls").Sheets("Feuil1").Range(Cells(2, 17),
Cells(2, 22)).Value = ""

génère une "Erreur définie par l'application ou par l'objet"

Pourquoi ?

Merci pour votre aide
DoMi



--
Cordialement,

Michel Gaboly
www.gaboly.com





--
Cordialement,

Michel Gaboly
www.gaboly.com




Avatar
DoMi
Eh non, la variable i est définie au niveau du code qui génère, et
non pas du code généré.
Je m'explique: j'ai "i" boutons, et on obtient
:
Private Sub CommandButton1_Click()
...
Range(.Cells(2, 17), .Cells(2, 22)).ClearContents
...
End Sub

Private Sub CommandButton2_Click()
...
Range(.Cells(3, 17), .Cells(3, 22)).ClearContents
...
End Sub
Etc...

Merci pour ton attention !
DoMi



Re,

Même dans ce cas,

Code = Code & vbTab & vbTab & vbTab & vbTab & "Range(.Cells(i + 1, 17), .Cells(i + 1 , 22)).ClearContents" & vbCrLf



Je ne suis pas choqué, je suis toujours ouvert à tout ce qui peut me
faire progresser, et je sais que je trouve ici ce qu'il faut. La
recherche par mot-clé est bien pratique. Quand je pose des questions,
c'est que je n'ai rien trouvé qui me satisfasse...

A part ça, pourquoi ces concaténations? C'est que c'est du code qui
génère du code.
Les 3 lignes, en fait, ça fait:
Code = Code & vbTab & vbTab & vbTab & "With
Workbooks(FicMvts).Sheets(""Feuil1"")" & vbCrLf
Code = Code & vbTab & vbTab & vbTab & vbTab & "Range(.Cells(" &
i + 1 & ", 17), .Cells(" & i + 1 & ", 22)).ClearContents" & vbCrLf
Code = Code & vbTab & vbTab & vbTab & "End With" & vbCrLf

Pas facile à relire...
DoMi


De rien Domi ;-)))


Mais tu te compliques la vie avec tes concaténations :

Range(.Cells(i + 1, 17), .Cells(i + 1, 22)).ClearContents

devrait suffire.


Par ailleurs pourquoi des allers-retours entre plusieurs classeurs ?

A part le cas où il est nécessaire d'ouvrir un classeur (ou +) pen dant le traitement, il est en principe inutile de
modifier le classeur actif. Il suffit d'utiliser des With ou une varia ble objet par classeur. Les .Select et .Activate,
le plus souvent ne servent qu'à ralentir les traitements.


J'espère ne pas t'avoir choquée par ces remarques un peu HS.


Merci à tous de vous être penchés sur mon cas, et surtout à M ichel
qui m'a donné la solution !

Effectivement, je pourrais activer le classeur en question, mais je ne
veux pas le faire car je suis dans un UserForm, et je fais des
allers-retour entre plusieurs classeurs, et pour la propreté de
l'affichage, je ne préfère pas abuser des ScreenUpdating = True ou
False...

Je ne peux pas utiliser Range("Q2:V2") car le numéro de la ligne e st
variable.
En fait, dans mon code, j'ai, après correction :
Range(.Cells(" & i + 1 & ", 17), .Cells(" & i + 1 & ",
22)).ClearContents

Et ça marche !
Merci encore.
DoMi



Bonjour,
Peut-être que:
'----------
Sub jj()
Application.ScreenUpdating = False
nom = ActiveWorkbook.Name
Windows("Monfichier.xls").Activate
[Feuil1!q2:v2].ClearContents
Windows(nom).Activate
End Sub
'-------
Ps: le classeur "Monfichier.xls" doit être enregistré
Salutations
JJ

"DoMi" a écrit dans le message de
news:
Bonjour,

Je cherche à effacer une plage de cellules dans un classeur ouvert
mais non actif.

L'instruction:
Workbooks("Monfichier.xls").Sheets("Feuil1").Range(Cells(2, 17),
Cells(2, 22)).Value = ""

génère une "Erreur définie par l'application ou par l'objet"

Pourquoi ?

Merci pour votre aide
DoMi



--
Cordialement,

Michel Gaboly
www.gaboly.com





--
Cordialement,

Michel Gaboly
www.gaboly.com