XL 2019 macro pour effacer differentes cellules avec un bouton

Neileru4

XLDnaute Occasionnel
bonjour a tous j'ai un fichier excel ou je creer un bouton pour remettre a zero des cellules
sauf que arrivé a un moment donné dans ma macros quand je rajoute des cellules a supprimer j'ai une erreur


Private Sub CommandButton1_Click()

Range("c3:d25,f3:g25,i3:j25,l3:m25,o3: p25,r3:s25,u3:v25,x3:y25,aa3:ab25,ad3:ae25,ag3:ah25,aj3:ak25:am3:an25,ap3:aq25,as3:at25,av3:aw25,ay3:az25,bb3:bc25,be3:bf25,bh3:bi25,bk3:bl25,bn3:bo25,bq3:br25,bt3:bu25,bw3:bx25,bz3:ca25,cc3:cd25,cf3:cg25,ci3:cj25,cl3:cm25").ClearContents

End Sub

jusque cl3:cm25 pas de souci mais des que je mets co3:cp25 j'ai erreur d'execution1004
methode range de l'objet worksheet a echoué

pouvez vous m'aider


PS en sachant que les colonne ou il y a les zero il faut les garder (ne pas effacer)
 

Pièces jointes

  • distribution.xls
    285 KB · Affichages: 14

soan

XLDnaute Barbatruc
Bonjour neiluru4,

réponse sans même télécharger ton fichier :

au lieu de :
Range(...).ClearContents mets : Range(...) = ""

car si ça bloque sur co3:cp25, c'est que cette plage
doit contenir des cellules fusionnées.

par contre, pour tes 0 à garder, faudra adapter.
(là, j'ai pas l'temps d'le faire ; j'dois sortir)


soan
 

vgendron

XLDnaute Barbatruc
Hello

Peut etre une limitation de la fonction Range.. ?
sinon, avec ce code, ca devrait etre plus rapide
VB:
Sub RAZTab()
Application.ScreenUpdating = False
With ActiveSheet
    Fin = .Range("A" & .Rows.Count).End(xlUp).Row
    LastCol = 161 'colonne FE
    For j = 3 To LastCol
        If j Mod 3 < 2 Then
            .Cells(3, j).Resize(Fin - 2, 1).ClearContents
        End If
    Next j
End With
Application.ScreenUpdating = True
End Sub
 

vgendron

XLDnaute Barbatruc
Bien sur
soit tu copies le bouton sur toutes les feuilles
soit tu remplaces la macro par celle-ci et toutes les feuilles seront traitées en une seule fois
VB:
Sub RAZTab()
Application.ScreenUpdating = False 'desactive le refresh
For Each ws In ActiveWorkbook.Sheets 'pour chaque feuille du classeur actif
    If ws.Name Like "service*" Then 'si le nom de la feuille commence par "service"
        With ws 'dans la feuille 
            Fin = .Range("A" & .Rows.Count).End(xlUp).Row 'dernière ligne de données dans la colonne A
            LastCol = 161 'colonne FE
            For j = 3 To LastCol 'pour chaque colonne de ta feuille en partant de la colonne C
                If j Mod 3 < 2 Then 'test pour ignorer toutes les 3 colonnes =  celles qui contiennent tes formules
                    .Cells(3, j).Resize(Fin - 2, 1).ClearContents
                End If
            Next j
        End With
    End If
Next ws
Application.ScreenUpdating = True
End Sub
 

vgendron

XLDnaute Barbatruc
Plusieurs solutions possibles en fonction de ton fichier, de ton besoin etc etc...
1) toutes tes feuilles à traiter ont un point commun, une info qu'on peut vérifier en début de macro
par exemple:
if Feuille.range("A2")="PRODUIT"
2) tu listes toutes les feuilles à traiter dans la macro
if ws.name="Acceuil" or ws.name="Cuisine" or ws.name=.......
3) tu listes les feuilles à ne PAS traiter 'parfois cette liste est plus courte
if ws.name<>"nomfeuille à ne pas traiter" and ws.name<>"autre feuille à ne pas traiter"
4) la liste des feuilles à traiter peut etre mise quelque part sur une feuille de ton fichier, et on parcourt la liste..
Bref...tu as l'embarras du choix... surtout l'embarras... :-D
 

Statistiques des forums

Discussions
294 412
Messages
1 938 340
Membres
188 785
dernier inscrit
michelle40000