sullivan95
Messages postés20Date d'inscriptionvendredi 13 mars 2009StatutMembreDernière intervention 1 février 2012
-
31 janv. 2012 à 14:07
MarcPL
Messages postés172Date d'inscriptionjeudi 8 décembre 2011StatutMembreDernière intervention21 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!
A voir également:
Effacer des cellules sur plusieurs feuilles à l'ouverture d'un fichier
ucfoutu
Messages postés18038Date d'inscriptionlundi 7 décembre 2009StatutModérateurDernière intervention11 avril 2018212 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
MarcPL
Messages postés172Date d'inscriptionjeudi 8 décembre 2011StatutMembreDernière intervention21 juillet 20132 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 !
MarcPL
Messages postés172Date d'inscriptionjeudi 8 décembre 2011StatutMembreDernière intervention21 juillet 20132 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 !