VBA Cells.clear [Résolu]

Groargreugro 29 Messages postés jeudi 23 février 2006Date d'inscription 12 décembre 2006 Dernière intervention - 10 mars 2006 à 17:56 - Dernière réponse : Groargreugro 29 Messages postés jeudi 23 février 2006Date d'inscription 12 décembre 2006 Dernière intervention
- 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

us_30 2117 Messages postés lundi 11 avril 2005Date d'inscription 14 mars 2016 Dernière intervention - 15 mars 2006 à 22:55
+3
Utile
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.
Cette réponse vous a-t-elle aidé ?  
petogas 2 Messages postés dimanche 26 février 2006Date d'inscription 10 mars 2006 Dernière intervention - 10 mars 2006 à 18:12
0
Utile
salut,
tu veux dire que tu l'as changé en ceci :

with Sheets("Résultat_Import")
.select
.Cells.Clear
...
end with
??
us_30 2117 Messages postés lundi 11 avril 2005Date d'inscription 14 mars 2016 Dernière intervention - 10 mars 2006 à 22:47
0
Utile
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.
Groargreugro 29 Messages postés jeudi 23 février 2006Date d'inscription 12 décembre 2006 Dernière intervention - 10 mars 2006 à 22:56
0
Utile
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.
Groargreugro 29 Messages postés jeudi 23 février 2006Date d'inscription 12 décembre 2006 Dernière intervention - 13 mars 2006 à 08:40
0
Utile
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...
Groargreugro 29 Messages postés jeudi 23 février 2006Date d'inscription 12 décembre 2006 Dernière intervention - 13 mars 2006 à 09:56
0
Utile
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 ?
us_30 2117 Messages postés lundi 11 avril 2005Date d'inscription 14 mars 2016 Dernière intervention - 13 mars 2006 à 23:13
0
Utile
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.
Groargreugro 29 Messages postés jeudi 23 février 2006Date d'inscription 12 décembre 2006 Dernière intervention - 14 mars 2006 à 09:35
0
Utile
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.
Groargreugro 29 Messages postés jeudi 23 février 2006Date d'inscription 12 décembre 2006 Dernière intervention - 14 mars 2006 à 16:02
0
Utile
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.
Groargreugro 29 Messages postés jeudi 23 février 2006Date d'inscription 12 décembre 2006 Dernière intervention - 16 mars 2006 à 08:46
0
Utile
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.