Bonjour Twinley; Je suppose que tu souhaites remettre à zéro les cellules de la plage: Sheets("Janv").Range("C" & I & ":D" & I).ClearContents
MP
"twinley" a écrit dans le message de news:e343xk$
Bonjour à tous,
En suivant les conseils éclairés de Maistre Michel Gaboly, j'ai mis Option Explicit au début de mon code.
Sur le ligne suivante, ClearContents est pris comme une variable que l'on doit déclarer.
Sheets("Janv").Range("C" & I & ":D" & I) = ClearContents
J'ai mis Dim Clearcontents et c'est tout. Il doit le prendre comme variant.
Y a t-il plus fûté ?
merci pour votre aide.
-- à+twinley
twinley
Salut Patrick, (Je ne résiste pas à cette célèbre contrepèterie...)
Tu as raison Sheets("Janv").Range("C" & I & ":D" & I).ClearContents fonctionne à merveille. = ClearContents aussi mais c'est boiteux avec Option Explicit.
Pas mal finalement ce Explicit
Merci pour le coup de main.
à+twinley
Bonjour, j'ai pas bien compris si tu veux effacer le contenu : Sheets("Janv").Range("C" & I & ":D" & I) .ClearContents
@+ patrick
"twinley" a écrit dans le message news: e343xk$
Bonjour à tous,
En suivant les conseils éclairés de Maistre Michel Gaboly, j'ai mis Option Explicit au début de mon code.
Sur le ligne suivante, ClearContents est pris comme une variable que l'on doit déclarer.
Sheets("Janv").Range("C" & I & ":D" & I) = ClearContents
J'ai mis Dim Clearcontents et c'est tout. Il doit le prendre comme variant.
Y a t-il plus fûté ?
merci pour votre aide.
-- à+twinley
Salut Patrick,
(Je ne résiste pas à cette célèbre contrepèterie...)
Tu as raison Sheets("Janv").Range("C" & I & ":D" & I).ClearContents
fonctionne à merveille.
= ClearContents aussi mais c'est boiteux avec Option Explicit.
Pas mal finalement ce Explicit
Merci pour le coup de main.
à+twinley
Bonjour,
j'ai pas bien compris
si tu veux effacer le contenu :
Sheets("Janv").Range("C" & I & ":D" & I) .ClearContents
@+
patrick
"twinley" <twinleymax@hotmail.com> a écrit dans le message news:
e343xk$8EHA.3988@TK2MSFTNGP10.phx.gbl...
Bonjour à tous,
En suivant les conseils éclairés de Maistre Michel Gaboly,
j'ai mis Option Explicit au début de mon code.
Sur le ligne suivante, ClearContents est pris comme une variable que
l'on doit déclarer.
Sheets("Janv").Range("C" & I & ":D" & I) = ClearContents
J'ai mis Dim Clearcontents et c'est tout.
Il doit le prendre comme variant.
Salut Patrick, (Je ne résiste pas à cette célèbre contrepèterie...)
Tu as raison Sheets("Janv").Range("C" & I & ":D" & I).ClearContents fonctionne à merveille. = ClearContents aussi mais c'est boiteux avec Option Explicit.
Pas mal finalement ce Explicit
Merci pour le coup de main.
à+twinley
Bonjour, j'ai pas bien compris si tu veux effacer le contenu : Sheets("Janv").Range("C" & I & ":D" & I) .ClearContents
@+ patrick
"twinley" a écrit dans le message news: e343xk$
Bonjour à tous,
En suivant les conseils éclairés de Maistre Michel Gaboly, j'ai mis Option Explicit au début de mon code.
Sur le ligne suivante, ClearContents est pris comme une variable que l'on doit déclarer.
Sheets("Janv").Range("C" & I & ":D" & I) = ClearContents
J'ai mis Dim Clearcontents et c'est tout. Il doit le prendre comme variant.
Il y a probablement encore quelque chose qui t'échappe ;-))
J'espère que le message passera, sinon je le recopierai sur le site en attendant de comprendre l'origine du problème.
Option Explicit permet de repérer un certain nombre d'erreurs :
ClearContents est une méthode qui s'applique à l'objet Range.
La syntaxe correcte est donc Range("xxx").ClearContents.
Quand tu écris
Sheets("Janv").Range("C" & I & ":D" & I) = ClearContents
Tu affectes à Range("C" & I & ":D" & I) une valeur, celle d'une variable.
Sans Option Explicit, tu ne t'en rends même pas compte, car la variable est créee automatiquement, de type Variant, comme toute variable à laquelle aucun type n'a été attribué.
Comme cette variable n'a pas été initialisée, elle ne contient rien, et tu aboutis par hasard au résultat attendu : tu remplaces le contenu des cellules par rien, ce qui semble les effacer.
Avec Option Explicit, un message te signale que tu utilises une variable non définie.
La bonne réaction n'est pas de rajouter un "Dim ClearContents", mais de te rendre compte qu'il s'agit d'une erreur de syntaxe, puisqu'il s'agit d'appliquer une méthode à l'objet Range et non de lui appliquer la valeur d'une variable ; il faut donc simplement rempacer le égale, " = " par un point, ".".
Pour t'en convaincre, crée un nouveau classeur et lance successivement ces 2 macros :
Sub Init() Range("A1") = 1 End Sub
Sub SimiliEfface() Dim ClearContents As Integer Range("A1") = ClearContents End Sub
Re,
Merci pour le "Maistre" ;-))
Il y a probablement encore quelque chose qui t'échappe ;-))
J'espère que le message passera, sinon je le recopierai sur le site en
attendant de comprendre l'origine du problème.
Option Explicit permet de repérer un certain nombre d'erreurs :
ClearContents est une méthode qui s'applique à l'objet Range.
La syntaxe correcte est donc Range("xxx").ClearContents.
Quand tu écris
Sheets("Janv").Range("C" & I & ":D" & I) = ClearContents
Tu affectes à Range("C" & I & ":D" & I) une valeur, celle d'une
variable.
Sans Option Explicit, tu ne t'en rends même pas compte, car la variable
est créee automatiquement, de type Variant, comme toute variable à
laquelle aucun type n'a été attribué.
Comme cette variable n'a pas été initialisée, elle ne contient rien, et
tu aboutis par hasard au résultat attendu : tu remplaces le contenu des
cellules par rien, ce qui semble les effacer.
Avec Option Explicit, un message te signale que tu utilises une variable
non définie.
La bonne réaction n'est pas de rajouter un "Dim ClearContents", mais de
te rendre compte qu'il s'agit d'une erreur de syntaxe, puisqu'il s'agit
d'appliquer une méthode à l'objet Range et non de lui appliquer la
valeur d'une variable ; il faut donc simplement rempacer le égale, " = "
par un point, ".".
Pour t'en convaincre, crée un nouveau classeur et lance successivement
ces 2 macros :
Sub Init()
Range("A1") = 1
End Sub
Sub SimiliEfface()
Dim ClearContents As Integer
Range("A1") = ClearContents
End Sub
Il y a probablement encore quelque chose qui t'échappe ;-))
J'espère que le message passera, sinon je le recopierai sur le site en attendant de comprendre l'origine du problème.
Option Explicit permet de repérer un certain nombre d'erreurs :
ClearContents est une méthode qui s'applique à l'objet Range.
La syntaxe correcte est donc Range("xxx").ClearContents.
Quand tu écris
Sheets("Janv").Range("C" & I & ":D" & I) = ClearContents
Tu affectes à Range("C" & I & ":D" & I) une valeur, celle d'une variable.
Sans Option Explicit, tu ne t'en rends même pas compte, car la variable est créee automatiquement, de type Variant, comme toute variable à laquelle aucun type n'a été attribué.
Comme cette variable n'a pas été initialisée, elle ne contient rien, et tu aboutis par hasard au résultat attendu : tu remplaces le contenu des cellules par rien, ce qui semble les effacer.
Avec Option Explicit, un message te signale que tu utilises une variable non définie.
La bonne réaction n'est pas de rajouter un "Dim ClearContents", mais de te rendre compte qu'il s'agit d'une erreur de syntaxe, puisqu'il s'agit d'appliquer une méthode à l'objet Range et non de lui appliquer la valeur d'une variable ; il faut donc simplement rempacer le égale, " = " par un point, ".".
Pour t'en convaincre, crée un nouveau classeur et lance successivement ces 2 macros :
Sub Init() Range("A1") = 1 End Sub
Sub SimiliEfface() Dim ClearContents As Integer Range("A1") = ClearContents End Sub
twinley
et toc ! :-[ j'attend avec impatience un bout de code moins long que tes initiales 8-) ça viendra bien un jour ! merci, je note.
à+twinley
Ca aussi ça marche pas mal :
Sheets("Janv").Range("C" & I & ":D" & I) =""
;-) AV
et toc ! :-[
j'attend avec impatience un bout de code moins long que tes initiales 8-)
ça viendra bien un jour !
merci, je note.
et toc ! :-[ j'attend avec impatience un bout de code moins long que tes initiales 8-) ça viendra bien un jour ! merci, je note.
à+twinley
Ca aussi ça marche pas mal :
Sheets("Janv").Range("C" & I & ":D" & I) =""
;-) AV
twinley
Voilà, c'est clair. Avec les nouvelles résolutions de déclarer les var, plus de trucs zarbi. merci à+twinley
Re,
Merci pour le "Maistre" ;-))
Il y a probablement encore quelque chose qui t'échappe ;-))
J'espère que le message passera, sinon je le recopierai sur le site en attendant de comprendre l'origine du problème.
Option Explicit permet de repérer un certain nombre d'erreurs :
ClearContents est une méthode qui s'applique à l'objet Range.
La syntaxe correcte est donc Range("xxx").ClearContents.
Quand tu écris
Sheets("Janv").Range("C" & I & ":D" & I) = ClearContents
Tu affectes à Range("C" & I & ":D" & I) une valeur, celle d'une variable.
Sans Option Explicit, tu ne t'en rends même pas compte, car la variable est créee automatiquement, de type Variant, comme toute variable à laquelle aucun type n'a été attribué.
Comme cette variable n'a pas été initialisée, elle ne contient rien, et tu aboutis par hasard au résultat attendu : tu remplaces le contenu des cellules par rien, ce qui semble les effacer.
Avec Option Explicit, un message te signale que tu utilises une variable non définie.
La bonne réaction n'est pas de rajouter un "Dim ClearContents", mais de te rendre compte qu'il s'agit d'une erreur de syntaxe, puisqu'il s'agit d'appliquer une méthode à l'objet Range et non de lui appliquer la valeur d'une variable ; il faut donc simplement rempacer le égale, " = " par un point, ".".
Pour t'en convaincre, crée un nouveau classeur et lance successivement ces 2 macros :
Sub Init() Range("A1") = 1 End Sub
Sub SimiliEfface() Dim ClearContents As Integer Range("A1") = ClearContents End Sub
Voilà, c'est clair. Avec les nouvelles résolutions de déclarer les var,
plus de trucs zarbi.
merci
à+twinley
Re,
Merci pour le "Maistre" ;-))
Il y a probablement encore quelque chose qui t'échappe ;-))
J'espère que le message passera, sinon je le recopierai sur le site en
attendant de comprendre l'origine du problème.
Option Explicit permet de repérer un certain nombre d'erreurs :
ClearContents est une méthode qui s'applique à l'objet Range.
La syntaxe correcte est donc Range("xxx").ClearContents.
Quand tu écris
Sheets("Janv").Range("C" & I & ":D" & I) = ClearContents
Tu affectes à Range("C" & I & ":D" & I) une valeur, celle d'une
variable.
Sans Option Explicit, tu ne t'en rends même pas compte, car la variable
est créee automatiquement, de type Variant, comme toute variable à
laquelle aucun type n'a été attribué.
Comme cette variable n'a pas été initialisée, elle ne contient rien, et
tu aboutis par hasard au résultat attendu : tu remplaces le contenu des
cellules par rien, ce qui semble les effacer.
Avec Option Explicit, un message te signale que tu utilises une variable
non définie.
La bonne réaction n'est pas de rajouter un "Dim ClearContents", mais de
te rendre compte qu'il s'agit d'une erreur de syntaxe, puisqu'il s'agit
d'appliquer une méthode à l'objet Range et non de lui appliquer la
valeur d'une variable ; il faut donc simplement rempacer le égale, " = "
par un point, ".".
Pour t'en convaincre, crée un nouveau classeur et lance successivement
ces 2 macros :
Sub Init()
Range("A1") = 1
End Sub
Sub SimiliEfface()
Dim ClearContents As Integer
Range("A1") = ClearContents
End Sub
Voilà, c'est clair. Avec les nouvelles résolutions de déclarer les var, plus de trucs zarbi. merci à+twinley
Re,
Merci pour le "Maistre" ;-))
Il y a probablement encore quelque chose qui t'échappe ;-))
J'espère que le message passera, sinon je le recopierai sur le site en attendant de comprendre l'origine du problème.
Option Explicit permet de repérer un certain nombre d'erreurs :
ClearContents est une méthode qui s'applique à l'objet Range.
La syntaxe correcte est donc Range("xxx").ClearContents.
Quand tu écris
Sheets("Janv").Range("C" & I & ":D" & I) = ClearContents
Tu affectes à Range("C" & I & ":D" & I) une valeur, celle d'une variable.
Sans Option Explicit, tu ne t'en rends même pas compte, car la variable est créee automatiquement, de type Variant, comme toute variable à laquelle aucun type n'a été attribué.
Comme cette variable n'a pas été initialisée, elle ne contient rien, et tu aboutis par hasard au résultat attendu : tu remplaces le contenu des cellules par rien, ce qui semble les effacer.
Avec Option Explicit, un message te signale que tu utilises une variable non définie.
La bonne réaction n'est pas de rajouter un "Dim ClearContents", mais de te rendre compte qu'il s'agit d'une erreur de syntaxe, puisqu'il s'agit d'appliquer une méthode à l'objet Range et non de lui appliquer la valeur d'une variable ; il faut donc simplement rempacer le égale, " = " par un point, ".".
Pour t'en convaincre, crée un nouveau classeur et lance successivement ces 2 macros :
Sub Init() Range("A1") = 1 End Sub
Sub SimiliEfface() Dim ClearContents As Integer Range("A1") = ClearContents End Sub
Michel Gaboly
Re,
De rien,
Le message était encore incomplet. En voici la fin :
La première entre 1 en A1, et la seconde, équivalente à ce que tu fais, sauf que ClearContents est définie comme Integer remplace le 1 par 0. En effet par défaut un Variant est vide, tandis qu'un Integer est égal à 0. Le simili-effacement que tu obtiens est vraiment un coup de pot ;-))
En principe, avec Option Explicit, on affecte un type à chaque variable. VBA est capable d'utiliser un Variant et de s'adapter au contenu, mais si le type est prédéfini, on a à la fois une meilleure gestion de la mémoire et un code + rapide.
Voilà.
Voilà, c'est clair. Avec les nouvelles résolutions de déclarer les var, plus de trucs zarbi. merci à+twinley
Re,
Merci pour le "Maistre" ;-))
Il y a probablement encore quelque chose qui t'échappe ;-))
J'espère que le message passera, sinon je le recopierai sur le site en attendant de comprendre l'origine du problème.
Option Explicit permet de repérer un certain nombre d'erreurs :
ClearContents est une méthode qui s'applique à l'objet Range.
La syntaxe correcte est donc Range("xxx").ClearContents.
Quand tu écris
Sheets("Janv").Range("C" & I & ":D" & I) = ClearContents
Tu affectes à Range("C" & I & ":D" & I) une valeur, celle d'une variable.
Sans Option Explicit, tu ne t'en rends même pas compte, car la variable est créee automatiquement, de type Variant, comme toute variable à laquelle aucun type n'a été attribué.
Comme cette variable n'a pas été initialisée, elle ne contient rien, et tu aboutis par hasard au résultat attendu : tu remplaces le contenu des cellules par rien, ce qui semble les effacer.
Avec Option Explicit, un message te signale que tu utilises une variable non définie.
La bonne réaction n'est pas de rajouter un "Dim ClearContents", mais de te rendre compte qu'il s'agit d'une erreur de syntaxe, puisqu'il s'agit d'appliquer une méthode à l'objet Range et non de lui appliquer la valeur d'une variable ; il faut donc simplement rempacer le égale, " = " par un point, ".".
Pour t'en convaincre, crée un nouveau classeur et lance successivement ces 2 macros :
Sub Init() Range("A1") = 1 End Sub
Sub SimiliEfface() Dim ClearContents As Integer Range("A1") = ClearContents End Sub
-- Cordialement,
Michel Gaboly www.gaboly.com
Re,
De rien,
Le message était encore incomplet. En voici la fin :
La première entre 1 en A1, et la seconde, équivalente à ce que tu fais, sauf que ClearContents est définie comme Integer
remplace le 1 par 0.
En effet par défaut un Variant est vide, tandis qu'un Integer est égal à 0. Le simili-effacement que tu obtiens est
vraiment un coup de pot ;-))
En principe, avec Option Explicit, on affecte un type à chaque variable. VBA est capable d'utiliser un Variant et de
s'adapter au contenu, mais si le type est prédéfini, on a à la fois une meilleure gestion de la mémoire et un code + rapide.
Voilà.
Voilà, c'est clair. Avec les nouvelles résolutions de déclarer les var,
plus de trucs zarbi.
merci
à+twinley
Re,
Merci pour le "Maistre" ;-))
Il y a probablement encore quelque chose qui t'échappe ;-))
J'espère que le message passera, sinon je le recopierai sur le site en
attendant de comprendre l'origine du problème.
Option Explicit permet de repérer un certain nombre d'erreurs :
ClearContents est une méthode qui s'applique à l'objet Range.
La syntaxe correcte est donc Range("xxx").ClearContents.
Quand tu écris
Sheets("Janv").Range("C" & I & ":D" & I) = ClearContents
Tu affectes à Range("C" & I & ":D" & I) une valeur, celle d'une
variable.
Sans Option Explicit, tu ne t'en rends même pas compte, car la
variable est créee automatiquement, de type Variant, comme toute
variable à laquelle aucun type n'a été attribué.
Comme cette variable n'a pas été initialisée, elle ne contient rien, et
tu aboutis par hasard au résultat attendu : tu remplaces le contenu
des cellules par rien, ce qui semble les effacer.
Avec Option Explicit, un message te signale que tu utilises une
variable non définie.
La bonne réaction n'est pas de rajouter un "Dim ClearContents", mais
de te rendre compte qu'il s'agit d'une erreur de syntaxe, puisqu'il
s'agit d'appliquer une méthode à l'objet Range et non de lui appliquer
la valeur d'une variable ; il faut donc simplement rempacer le égale,
" = " par un point, ".".
Pour t'en convaincre, crée un nouveau classeur et lance successivement
ces 2 macros :
Sub Init()
Range("A1") = 1
End Sub
Sub SimiliEfface()
Dim ClearContents As Integer
Range("A1") = ClearContents
End Sub
Le message était encore incomplet. En voici la fin :
La première entre 1 en A1, et la seconde, équivalente à ce que tu fais, sauf que ClearContents est définie comme Integer remplace le 1 par 0. En effet par défaut un Variant est vide, tandis qu'un Integer est égal à 0. Le simili-effacement que tu obtiens est vraiment un coup de pot ;-))
En principe, avec Option Explicit, on affecte un type à chaque variable. VBA est capable d'utiliser un Variant et de s'adapter au contenu, mais si le type est prédéfini, on a à la fois une meilleure gestion de la mémoire et un code + rapide.
Voilà.
Voilà, c'est clair. Avec les nouvelles résolutions de déclarer les var, plus de trucs zarbi. merci à+twinley
Re,
Merci pour le "Maistre" ;-))
Il y a probablement encore quelque chose qui t'échappe ;-))
J'espère que le message passera, sinon je le recopierai sur le site en attendant de comprendre l'origine du problème.
Option Explicit permet de repérer un certain nombre d'erreurs :
ClearContents est une méthode qui s'applique à l'objet Range.
La syntaxe correcte est donc Range("xxx").ClearContents.
Quand tu écris
Sheets("Janv").Range("C" & I & ":D" & I) = ClearContents
Tu affectes à Range("C" & I & ":D" & I) une valeur, celle d'une variable.
Sans Option Explicit, tu ne t'en rends même pas compte, car la variable est créee automatiquement, de type Variant, comme toute variable à laquelle aucun type n'a été attribué.
Comme cette variable n'a pas été initialisée, elle ne contient rien, et tu aboutis par hasard au résultat attendu : tu remplaces le contenu des cellules par rien, ce qui semble les effacer.
Avec Option Explicit, un message te signale que tu utilises une variable non définie.
La bonne réaction n'est pas de rajouter un "Dim ClearContents", mais de te rendre compte qu'il s'agit d'une erreur de syntaxe, puisqu'il s'agit d'appliquer une méthode à l'objet Range et non de lui appliquer la valeur d'une variable ; il faut donc simplement rempacer le égale, " = " par un point, ".".
Pour t'en convaincre, crée un nouveau classeur et lance successivement ces 2 macros :
Sub Init() Range("A1") = 1 End Sub
Sub SimiliEfface() Dim ClearContents As Integer Range("A1") = ClearContents End Sub
-- Cordialement,
Michel Gaboly www.gaboly.com
twinley
Bien reçu
Bonsoir
à+twinley
Re,
De rien,
Le message était encore incomplet. En voici la fin :
La première entre 1 en A1, et la seconde, équivalente à ce que tu fais, sauf que ClearContents est définie comme Integer remplace le 1 par 0. En effet par défaut un Variant est vide, tandis qu'un Integer est égal à 0. Le simili-effacement que tu obtiens est vraiment un coup de pot ;-))
En principe, avec Option Explicit, on affecte un type à chaque variable. VBA est capable d'utiliser un Variant et de s'adapter au contenu, mais si le type est prédéfini, on a à la fois une meilleure gestion de la mémoire et un code + rapide.
Voilà.
Voilà, c'est clair. Avec les nouvelles résolutions de déclarer les var, plus de trucs zarbi. merci à+twinley
Re,
Merci pour le "Maistre" ;-))
Il y a probablement encore quelque chose qui t'échappe ;-))
J'espère que le message passera, sinon je le recopierai sur le site en attendant de comprendre l'origine du problème.
Option Explicit permet de repérer un certain nombre d'erreurs :
ClearContents est une méthode qui s'applique à l'objet Range.
La syntaxe correcte est donc Range("xxx").ClearContents.
Quand tu écris
Sheets("Janv").Range("C" & I & ":D" & I) = ClearContents
Tu affectes à Range("C" & I & ":D" & I) une valeur, celle d'une variable.
Sans Option Explicit, tu ne t'en rends même pas compte, car la variable est créee automatiquement, de type Variant, comme toute variable à laquelle aucun type n'a été attribué.
Comme cette variable n'a pas été initialisée, elle ne contient rien, et tu aboutis par hasard au résultat attendu : tu remplaces le contenu des cellules par rien, ce qui semble les effacer.
Avec Option Explicit, un message te signale que tu utilises une variable non définie.
La bonne réaction n'est pas de rajouter un "Dim ClearContents", mais de te rendre compte qu'il s'agit d'une erreur de syntaxe, puisqu'il s'agit d'appliquer une méthode à l'objet Range et non de lui appliquer la valeur d'une variable ; il faut donc simplement rempacer le égale, " = " par un point, ".".
Pour t'en convaincre, crée un nouveau classeur et lance successivement ces 2 macros :
Sub Init() Range("A1") = 1 End Sub
Sub SimiliEfface() Dim ClearContents As Integer Range("A1") = ClearContents End Sub
Bien reçu
Bonsoir
à+twinley
Re,
De rien,
Le message était encore incomplet. En voici la fin :
La première entre 1 en A1, et la seconde, équivalente à ce que tu fais,
sauf que ClearContents est définie comme Integer remplace le 1 par 0.
En effet par défaut un Variant est vide, tandis qu'un Integer est égal à
0. Le simili-effacement que tu obtiens est vraiment un coup de pot ;-))
En principe, avec Option Explicit, on affecte un type à chaque variable.
VBA est capable d'utiliser un Variant et de s'adapter au contenu, mais
si le type est prédéfini, on a à la fois une meilleure gestion de la
mémoire et un code + rapide.
Voilà.
Voilà, c'est clair. Avec les nouvelles résolutions de déclarer les
var, plus de trucs zarbi.
merci
à+twinley
Re,
Merci pour le "Maistre" ;-))
Il y a probablement encore quelque chose qui t'échappe ;-))
J'espère que le message passera, sinon je le recopierai sur le site
en attendant de comprendre l'origine du problème.
Option Explicit permet de repérer un certain nombre d'erreurs :
ClearContents est une méthode qui s'applique à l'objet Range.
La syntaxe correcte est donc Range("xxx").ClearContents.
Quand tu écris
Sheets("Janv").Range("C" & I & ":D" & I) = ClearContents
Tu affectes à Range("C" & I & ":D" & I) une valeur, celle d'une
variable.
Sans Option Explicit, tu ne t'en rends même pas compte, car la
variable est créee automatiquement, de type Variant, comme toute
variable à laquelle aucun type n'a été attribué.
Comme cette variable n'a pas été initialisée, elle ne contient rien, et
tu aboutis par hasard au résultat attendu : tu remplaces le contenu
des cellules par rien, ce qui semble les effacer.
Avec Option Explicit, un message te signale que tu utilises une
variable non définie.
La bonne réaction n'est pas de rajouter un "Dim ClearContents", mais
de te rendre compte qu'il s'agit d'une erreur de syntaxe, puisqu'il
s'agit d'appliquer une méthode à l'objet Range et non de lui
appliquer la valeur d'une variable ; il faut donc simplement rempacer
le égale, " = " par un point, ".".
Pour t'en convaincre, crée un nouveau classeur et lance
successivement ces 2 macros :
Sub Init()
Range("A1") = 1
End Sub
Sub SimiliEfface()
Dim ClearContents As Integer
Range("A1") = ClearContents
End Sub
Le message était encore incomplet. En voici la fin :
La première entre 1 en A1, et la seconde, équivalente à ce que tu fais, sauf que ClearContents est définie comme Integer remplace le 1 par 0. En effet par défaut un Variant est vide, tandis qu'un Integer est égal à 0. Le simili-effacement que tu obtiens est vraiment un coup de pot ;-))
En principe, avec Option Explicit, on affecte un type à chaque variable. VBA est capable d'utiliser un Variant et de s'adapter au contenu, mais si le type est prédéfini, on a à la fois une meilleure gestion de la mémoire et un code + rapide.
Voilà.
Voilà, c'est clair. Avec les nouvelles résolutions de déclarer les var, plus de trucs zarbi. merci à+twinley
Re,
Merci pour le "Maistre" ;-))
Il y a probablement encore quelque chose qui t'échappe ;-))
J'espère que le message passera, sinon je le recopierai sur le site en attendant de comprendre l'origine du problème.
Option Explicit permet de repérer un certain nombre d'erreurs :
ClearContents est une méthode qui s'applique à l'objet Range.
La syntaxe correcte est donc Range("xxx").ClearContents.
Quand tu écris
Sheets("Janv").Range("C" & I & ":D" & I) = ClearContents
Tu affectes à Range("C" & I & ":D" & I) une valeur, celle d'une variable.
Sans Option Explicit, tu ne t'en rends même pas compte, car la variable est créee automatiquement, de type Variant, comme toute variable à laquelle aucun type n'a été attribué.
Comme cette variable n'a pas été initialisée, elle ne contient rien, et tu aboutis par hasard au résultat attendu : tu remplaces le contenu des cellules par rien, ce qui semble les effacer.
Avec Option Explicit, un message te signale que tu utilises une variable non définie.
La bonne réaction n'est pas de rajouter un "Dim ClearContents", mais de te rendre compte qu'il s'agit d'une erreur de syntaxe, puisqu'il s'agit d'appliquer une méthode à l'objet Range et non de lui appliquer la valeur d'une variable ; il faut donc simplement rempacer le égale, " = " par un point, ".".
Pour t'en convaincre, crée un nouveau classeur et lance successivement ces 2 macros :
Sub Init() Range("A1") = 1 End Sub
Sub SimiliEfface() Dim ClearContents As Integer Range("A1") = ClearContents End Sub