Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

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
Inactif
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
 

Neileru4

XLDnaute Occasionnel
merci mais je n'ai aucune cellule fusionner et ta solution ne fonctionne pas
 

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
 
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…