VBA Cells.clear

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

10 réponses

us_30 Messages postés 2065 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 14 mars 2016 10
15 mars 2006 à 22:55
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.
3