VBA Cells.clear [Résolu]

Messages postés
29
Date d'inscription
jeudi 23 février 2006
Dernière intervention
12 décembre 2006
- - Dernière réponse : Groargreugro
Messages postés
29
Date d'inscription
jeudi 23 février 2006
Dernière intervention
12 décembre 2006
- 16 mars 2006 à 08:46
voilà, avant dans mode j'avais ceci :

Sheets("Résultat_Import").select
...
Sheets("Résultat_Import").Cells.Clear
...

pour effacer toutes les données d'une feuille,
mon code marche bien, mais, je l'ai changé en ceci :

with Sheets("Résultat_Import")
...
.Cells.Clear
...
end with

Depuis j'ai un bug comme quoi : "la méthode clear de la classe Range à echoué"
j'ai beau chercher, je trouve pas...
quelqu'un a une idée ?
Merci.
Afficher la suite 

10 réponses

Meilleure réponse
Messages postés
2117
Date d'inscription
lundi 11 avril 2005
Dernière intervention
14 mars 2016
3
Merci
Bonsoir,

Je comprends beaucoup mieux ton pb. Et tu as trouvé la solution... C'est un pb que j'ai déjà remarquer pour 97, et comme toi j'avais aussi remarqué qu'il avait disparu en version 2003... En fait il faut penser "focus"... C'est à dire, lorsque tu cliques sur le bouton, tu fais perdre le focus à la feuille (à toutes les feuilles par de là). Ensuite tu appliques une instruction Range (c'est à dire au niveau des cellules) et comme aucune feuille n'est active, VBA se trouve planté. Car il faut, une feuilles actives pour appliquer Range.... La solution que tu as trouvé est une possibilité, mais si tu m'as compris, tu vois qu'on peut en trouver d'autres... par exemple :

faire dans le module :

Sub essai()
ActiveCell.Select ' 1er sol
'ActiveCell.Activate ' autre sol
'ActiveSheet.Select 'autre sol
With Sheets("Feuil2")
'.Activate ' autre sol
'.Select ' autre sol
.Cells.Clear
.Cells(2, 2) = "Essai"
End With
End Sub


Private Sub CommandButton1_Click()
Call essai
End Sub

qui ressemble à ce que tu as fait...

Le point important à remarquer, c'est ton pb se produit seulement dans le cas où tu mets le bouton sur la feuille.
Maitenant si tu utilises une Userfom, alors tu n'as plus besoin d'activer une cellule, car une userform aura un focus comme "indépendante" de l'application. Ainsi, si tu mets une Userform1, avec un bouton avec le code d'appel à essai tu ne renconteras plus ce pb. A noter, que l'appel pourrait aussi être mis après un double click surla feuille 1, soit :

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Excel.Range, Cancel As Boolean)
essai
End Sub

avec

Sub essai()
With Sheets("Feuil2")
.Cells.Clear
.Cells(2, 2) = "Essai"
End With
End Sub


tu auras la démonstration...

Amicalement,
Us.

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 97 internautes nous ont dit merci ce mois-ci

Messages postés
2
Date d'inscription
dimanche 26 février 2006
Dernière intervention
10 mars 2006
0
Merci
salut,
tu veux dire que tu l'as changé en ceci :

with Sheets("Résultat_Import")
.select
.Cells.Clear
...
end with
??
Messages postés
2117
Date d'inscription
lundi 11 avril 2005
Dernière intervention
14 mars 2016
0
Merci
Bonsoir,

Ce qui dit, il est inutile de selectionner la feuille avec la ligne :
Sheets("Résultat_Import").select

puisque la seconde ligne du répéte Sheets("Résultat_Import")...

Donc juste Sheets("Résultat_Import").cells.clear suffit.

J'ai essayer avec with et aucun problème... TU as probablement fait une erreur de frappe...

Amicalement,
Us.
Messages postés
29
Date d'inscription
jeudi 23 février 2006
Dernière intervention
12 décembre 2006
0
Merci
Effectivement, je ne veux pas selectionner ma feuille.
Ce qui est étrange, c'est que oui ca marche quand la feuille est active sous Excel.
Mais si je selectionne un autre onglet que "Résultat_Import" et que je relance ma macro, la, ça plante.
Normalement apres un bon Week end à faire autre chose, je vais arriver lundi au boulot et faire "mais oui c'est ca !".
Bref, merci pour vos réponses, je vous tiendrais au courant.

Et bon week-end.

Gro.
Messages postés
29
Date d'inscription
jeudi 23 février 2006
Dernière intervention
12 décembre 2006
0
Merci
Non, ca ne marche pas.
Enfin qu'à moitié...

mon code :

...
With Sheets("Résultat_Import")
.Cells.Clear
...

Ca marche si je lance la macro et que l'onglet "Résultat_Import" est déjà selectionné.
Ca ne marche pas si c'est un autre onglet.

Mon message d'erreur :
"Erreur d'execution '1004':
La méthode Clear de la classe Range a échoué."

Bon je pense que je vais mettre un .select au milieu mais ca m'embete quand meme pas mal...
Messages postés
29
Date d'inscription
jeudi 23 février 2006
Dernière intervention
12 décembre 2006
0
Merci
Voilà je viens de creer un nouvel onglet "menu" avec dessus un bouton.
le code du bouton :

Private Sub Import_bouton_Click()
Import_vers_Excel
End Sub

ca plante donc a mon ".cells.clear".

quelqu'un à une idée ?
Messages postés
2117
Date d'inscription
lundi 11 avril 2005
Dernière intervention
14 mars 2016
0
Merci
Bonsoir,

JE viens d'essayer de nouveau spécialement le bout de code, et aucun problème.

Quelle Version d'Excel utilises-tu ?

Pour info , j'ai utilisé le code suivant :
Sheets("feuil2").Cells.ClearContents

en me plaçant sur feuil1 ou autre, pas de pb.

Ceci dit, ton pb m'interresse si tu trouves pas la solution, envoie moi ton fichier, et je regarderais...

Amicalement,
Us.
Messages postés
29
Date d'inscription
jeudi 23 février 2006
Dernière intervention
12 décembre 2006
0
Merci
Moi, mon code c'est "Sheets("feuil2").Cells.Clear", pour tout effacer (valeur/format/...)

Je viens de créer un nouveau document xls dans lequel j'ai créé un bouton en "feuil1", à l'aide de l'éditeur en haut.

Avec pour Caption : "Efface feuil2"
et pour code (commentaire important) :
Private Sub CommandButton1_Click()
'Cells(1, 1).Select
essai
End Sub

J'ai créé un module dans lequel j'ai mis :

Sub essai()
With Sheets("Feuil2")
.Cells.Clear
.Cells(2, 2) = "Essai"
End With
End Sub

Après, je clic sur mon bouton, et ça me provoque le bug.
J'ai trouvé une solution qui tiens un peu du bidouillage, je dis ça parce que je ne la comprend pas :
Elle est dans mon code plus haut : c'est la ligne en commentaire. Ma solution c'est de selectionner une cellule avant d'appeller la méthode Clear, dans la même feuille ou non.
Si on a jamais rien selectionné dans le code avant d'appeller cette fonction, ca plante.

Pour info, j'ai Excel 97.
J'essairai ce soir chez moi où j'ai le 2003.
Messages postés
29
Date d'inscription
jeudi 23 février 2006
Dernière intervention
12 décembre 2006
0
Merci
Je viens de tester mon code sur une autre version d'Excel, ca marche.
Donc ca doit etre un bug propre à 97...
Maintenant la question est, pourquoi dans mon entreprise qui compte plusieurs centaine de personnes, tout le monde tourne sur 97, sauf un gars qui n'est même pas chef ? Un autre mystère insondable...

Merci pour le coup de main,
Si tu trouve le pourquoi (du "cells.clear") ca m'interesse toujours.
Sinon, si ça arrive à quelqu'un j'espere que ca aidera.
Messages postés
29
Date d'inscription
jeudi 23 février 2006
Dernière intervention
12 décembre 2006
0
Merci
Comme mon appli est encore loin d'être terminée, les boutons c'était juste pour tester une ébauche de menu pour voir comment cela le programme se comportait, une sorte de version bêta pour les utilisateurs de mon service en quelque sorte...

Ne sachant pas qu'un bouton est désolidarisé de la feuille qui l'héberge, je ne voyais pas le problème.

Je pensais m'attaquer au Userform plus tard, si te me dis que ça marche, c'est impec.

Merci en tout cas pour l'explication et bonne journée.

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.