OVH Cloud OVH Cloud

VBA - ClearContents est pris comme une variable avec Option Explicit

10 réponses
Avatar
twinley
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

10 réponses

Avatar
Michel Pierron
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


Avatar
patrick
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


Avatar
twinley
Bjr Michel Pierron

oui c'est cela

à+twinley

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






Avatar
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







Avatar
AV
Ca aussi ça marche pas mal :

Sheets("Janv").Range("C" & I & ":D" & I) =""

;-)
AV
Avatar
Michel Gaboly
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
Avatar
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




Avatar
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


Avatar
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


Avatar
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