Effacer des cellules sur plusieurs feuilles à l'ouverture d'un fichier

Résolu
sullivan95 Messages postés 20 Date d'inscription vendredi 13 mars 2009 Statut Membre Dernière intervention 1 février 2012 - 31 janv. 2012 à 14:07
MarcPL Messages postés 172 Date d'inscription jeudi 8 décembre 2011 Statut Membre Dernière intervention 21 juillet 2013 - 1 févr. 2012 à 15:42
Bonjour,

Je suis actuellement bloqué lorsque sur ce code qui me permettrait d'effacer le contenu de plusieurs cellules sur 2 feuilles d'un même classeur.
Pour le moment j'ai ce code :

Private Sub WorkBook_open()
Dim cl As Range
Dim plage1, plage2 As Range
Set plage1 = ThisWorkbook.Worksheets("AJUST").Range("B3:B4,D3:E3,G3,I3:J3,I4:J4,C7:C9,I7:I7,B20:B30,G20:G30,G35:G45")
Set plage2 = ThisWorkbook.Worksheets("BASE").Range("A1:BM200000")

For Each cl In plage1
If cl.Value <> "" Then
cl.Select
Selection.ClearContents
End If
Next
For Each cl In plage2
If cl.Value <> "" Then
cl.Select
Selection.ClearContents
End If
Next
End Sub

J'ai un message d'erreur 1004 à l'ouverture du fichier et rien ne se passe donc.

Merci pour votre aide!

4 réponses

ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
31 janv. 2012 à 14:43
Bonjour,
1) prends l'habitude d'utiliser les balises code lorsque tu montres un bout de code sur ce site.
2) prends également l'habitude de ne pas travailler à grands renforts de select (relou et inutile)
4) set plage1, plage2 as range ne type que plage2 en range, plage1 étant typé en Variant ! (et l'erreur est peut-être là)
3) ton erreur est également probblement due au fait qu'aucune feuille de ton classeur ne porte le nom "AJUST"

Corrige TOUT celà !

____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
3
MarcPL Messages postés 172 Date d'inscription jeudi 8 décembre 2011 Statut Membre Dernière intervention 21 juillet 2013 2
31 janv. 2012 à 22:34
'soir !

Sullivan95, n'ayant pas de précision quant à ta version d'Excel, je vois une grossière erreur ici :

Set plage2 = ThisWorkbook.Worksheets("BASE").Range("A1:BM200000")

Afin de vérifier de combien de lignes ton Excel dispose, dans la fenêtre d'exécution exécute ceci :
? activesheet.rows.count

Sur mes versions je trouve 65536 ...

Sinon pour les Select, ne servent à rien dans ton cas qui est d'effacer une plage,
pas besoin non plus de tester si chacune des cellules est non vide !
Plage1.ClearContents
Plage2.ClearContents

Simple & efficace, ces deux lignes remplacent l'intégralité de tes deux boucles For each cl !

___________________________________________________________________________________________________________________
Comme la vitesse de la lumière est supérieure à celle du son, certains ont l'air brillant avant d'avoir l'air con !
3
sullivan95 Messages postés 20 Date d'inscription vendredi 13 mars 2009 Statut Membre Dernière intervention 1 février 2012
1 févr. 2012 à 13:43
Effectivement MarcPL, j'ai trop voulu me compliqué la tache... ca marche nickel!

Je suis sur Excel 2007 en fait. Et je note les balises pour la prochaine fois!
0
MarcPL Messages postés 172 Date d'inscription jeudi 8 décembre 2011 Statut Membre Dernière intervention 21 juillet 2013 2
1 févr. 2012 à 15:42
Alors, combien y-a-t-il de lignes dans la version 2007 ?

Sinon pour être sûr d'effacer l'intégralité d'une colonne dans l'éventualité qu'une version ultérieure
d'Excel disposera de plus de lignes, mieux vaut alors ne pas indiquer de bornes fixes et
pas besoin de définir des plages pour ne les utiliser qu'une fois, ton code se résume alors à ceci :
Private Sub WorkBook_Open()
    ThisWorkbook.Worksheets("AJUST"). _
        Range("B3:B4,D3:E3,G3,I3:J3,I4:J4,C7:C9,I7:I7,B20:B30,G20:G30,G35:G45").ClearContents

    ThisWorkbook.Worksheets("BASE").Columns(1).Resize(, 65).ClearContents
End Sub

Columns(1) représente l'intégralité de la première colonne (colonne A) tandis que le Resize
(à vérifier s'il existe toujours en 2007, consulte l'aide en ligne) étend la plage
jusqu'à l'intégralité de la 65ème colonne (colonne BM).

Dans l'optique d'une utilisation professionnelle (ou si d'autres utilisent ton classeur),
c'est vraiment dommage de définir des plages fixes dans ton code car imagine si une colonne ou
une ligne est insérée au sein de ces plages, ton code ne serait plus bon !

Mieux vaut alors définir des noms de plages directement au sein de chaque feuille car dans le cas
d'une telle insertion, la plage du nom concernée est automatiquement mise à jour,
donc aucune incidence sur le code, CQFD …
Par exemple si tu nommes RazAJUST la plage à effacer de la feuille AJUST et RazBASE ...
ton code alors se réduit à ceci :
Private Sub WorkBook_Open()
    [RazAJUST].ClearContents
    [RazBASE].ClearContents
End Sub

A comparer avec ton code de départ et pourtant cela effectue la même chose !

___________________________________________________________________________________________________________________
Comme la vitesse de la lumière est supérieure à celle du son, certains ont l'air brillant avant d'avoir l'air con !
0
Rejoignez-nous