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
Dernière intervention
1 février 2012
- 31 janv. 2012 à 14:07 - Dernière réponse : MarcPL
Messages postés
172
Date d'inscription
jeudi 8 décembre 2011
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!
Afficher la suite 

Votre réponse

4 réponses

Meilleure réponse
ucfoutu
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Contributeur
Dernière intervention
11 avril 2018
- 31 janv. 2012 à 14:43
3
Merci
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

Merci ucfoutu 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 94 internautes ce mois-ci

Commenter la réponse de ucfoutu
Meilleure réponse
MarcPL
Messages postés
172
Date d'inscription
jeudi 8 décembre 2011
Dernière intervention
21 juillet 2013
- 31 janv. 2012 à 22:34
3
Merci
'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 !

Merci MarcPL 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 94 internautes ce mois-ci

Commenter la réponse de MarcPL
sullivan95
Messages postés
20
Date d'inscription
vendredi 13 mars 2009
Dernière intervention
1 février 2012
- 1 févr. 2012 à 13:43
0
Merci
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!
Commenter la réponse de sullivan95
MarcPL
Messages postés
172
Date d'inscription
jeudi 8 décembre 2011
Dernière intervention
21 juillet 2013
- 1 févr. 2012 à 15:42
0
Merci
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 !
Commenter la réponse de MarcPL

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.