Microsoft 365 Effacement cellules sur plusieurs feuilles

FCMLE44

XLDnaute Impliqué
Supporter XLD
Bonjour

Je viens d'écrire ce code pour effacer certaines cellules d'une feuille
A terme, j'aurais plusieurs feuilles

VB:
Sub Effacement()
     Select Case ActiveSheet.Name
     Case "Courriers"
       Range("B83:B91,B94:E96,B12,E10:E12,F26").ClearContents
         MsgBox "les données sont effacées"
     End Select
     Sheets("Salariés").Select
     Range("A6").Select
 End Sub

J'ai un débogage à la ligne
Code:
 Range("B83:B91,B94:E96,B12,E10:E12,F26").ClearContents

Je ne comprends pas d'où cela peut venir

Auriez vous une idée ?
 
Solution
Bonjour FCMLE44, soan,

En VBA il est généralement inutile de sélectionner quoi que ce soit, exécutez tout bêtement ce code :
VB:
Sub Effacement()
Sheets("Courriers").Range("B83:E91,B94:E96,B12,E10:E12,F26") = ""
Sheets("Salariés").Range("B8:B10,B15:B17,B12,B13,B19,B18,B21,B23,D8:D9,D16,D18,D20,D21,C26:D28,C37,C39,C49:D60,D68,D72:E85,D87:E96,D98:E101") = ""
Sheets("Indemnités").Range("A201:C214") = ""
Sheets("CP").Range("C7:C18") = ""
Sheets("ES").Range("C5,C6,J12,J19,J26,B31") = ""
Sheets("FeuilCalcul").Range("B6:B14,E6:E7") = ""
MsgBox "les données sont effacées"
End Sub
A+

soan

XLDnaute Barbatruc
Inactif
Bonjour FCMLE44,

tu as écrit : « J'ai un débogage à la ligne »

mais des erreurs, y'en a plein ! alors tu dois dire clairement
quel est exactement le message d'erreur qui est affiché, et
pas dire simplement : « j'ai une erreur ».

cela dit, c'est quand même très bien d'avoir indiqué la ligne
de code VBA qui cause l'erreur.

comme je n'y vois aucune erreur de syntaxe, je pense que
tu as des cellules fusionnées ; si oui, mets ceci :


Range("B83:B91,B94:E96,B12,E10:E12,F26") = ""

soan
 

FCMLE44

XLDnaute Impliqué
Supporter XLD
Voila
Je viens de terminer d'écrire le code entier pour chaque cellule à effacer dans chaque feuille voulue

mais seules les cellules de la première feuille courriers s'effacent. Il revient bien aussi à la feuille salariés ensuite

VB:
Sub Effacement()
     Select Case ActiveSheet.Name
     Case "Courriers"
         Range("B83:E91,B94:E96,B12,E10:E12,F26") = ""
     Case "Salariés"
         Range("B8:B10,B15:B17,B12,B13,B19,B18,B21,B23,D8:D9,D16,D18,D20,D21,C26:D28,C37,C39,C49:D60,D68,D72:E85,D87:E96,D98:E101") = ""
     Case "Indemnités"
         Range("A201:C214") = ""
     Case "CP"
         Range("C7:C18") = ""
     Case "ES"
         Range("C5,C6,J12,J19,J26,B31") = ""
     Case "FeuilCalcul"
         Range("B6:B14,E6:E7") = ""
         MsgBox "les données sont effacées"
     End Select
     Sheets("Salariés").Select
     Range("A6").Select
 End Sub

Quelqu'un aurait il une idée de l'anomalie rencontrée ?

Merci
 

soan

XLDnaute Barbatruc
Inactif
essaye ce code VBA :
VB:
Option Explicit

Private Sub Job(sh$, plg$)
  Worksheets(sh).plg = ""
End Sub

Sub Effacement()
  Dim sh$: sh = ActiveSheet.Name: Application.ScreenUpdating = 0
  Select Case sh
    Case "Courriers": Job sh, "B83:E91,B94:E96,B12,E10:E12,F26"
    Case "Salariés"
      Job sh, "B8:B10,B15:B17,B12,B13,B19,B18,B21,B23,D8:D9," _
        & "D16,D18,D20,D21,C26:D28,C37,C39,C49:D60,D68,D72:E85,D87:E96,D98:E101"
    Case "Indemnités": Job sh, "A201:C214"
    Case "CP": Job sh, "C7:C18"
    Case "ES": Job sh, "C5,C6,J12,J19,J26,B31"
    Case "FeuilCalcul": Job sh, "B6:B14,E6:E7"
  End Select
  Application.ScreenUpdating = -1: MsgBox "les données sont effacées"
  Worksheets("Salariés").Select: [A6].Select
End Sub
soan
 

FCMLE44

XLDnaute Impliqué
Supporter XLD
Bonjour

Merci
J'ai mis dans mon module
Voici le débogage
1604990468019.png
 

soan

XLDnaute Barbatruc
Inactif
* mets le code dans un module standard, pas dans ThisWorkbook ;
car la sub Effacement() n'est pas une sub d'événement Workbook,
et c'est pas non plus une sub d'événement tout court : c'est juste
une sub « classique ».

* j'pige pas pourquoi ça efface que sur la 1ère feuille "Courriers"
vu qu'on transmet à chaque fois le nom de la feuille (dans sh) ;
sh a été initialisé avec :
sh = ActiveSheet.Name ensuite, il y a :
Select Case sh puis y'a ceci : Worksheets(sh).Range(plg) donc
les cellules indiquées par le Range dépendent bien de la feuille
de calcul sh : "Courriers" pour le 1er appel ; "Salariés" pour le
2ème appel ; "Indemnités" pour le 3ème appel ; etc...

* vérifie bien que les noms de tes feuilles sont corrects : y'aura
un plantage si une feuille n'existe pas.

* teste de nouveau le code VBA ; si ça marche toujours pas,
envoie ton fichier sans données confidentielles.


soan
 

soan

XLDnaute Barbatruc
Inactif
la sub Effacement() efface les données de la feuille active uniquement,
car j'ai repris ton ActiveSheet.Name et ton Select Case ; donc :

* c'est si tu es sur la feuille "Courriers" que la sub efface les données
de la feuille "Courriers" (uniquement)

* c'est si tu es sur la feuille "Salariés" que la sub efface les données
de cette feuille "Salariés" (uniquement)

* c'est si tu es sur la feuille "Indemnités" que la sub efface les données
de cette feuille "Indemnités" (uniquement)

etc...

car dans un Select Case, une fois qu'un cas à été traité, l'exécution
continue après le End Select en sautant les autres cas.

je crois comprendre que tu veux effacer les données de toutes
les feuilles indiquées dans le Select Case, indépendamment
de la feuille active ; si c'est bien ça, tu ne dois pas employer
Select Case !


soan
 
Dernière édition:

soan

XLDnaute Barbatruc
Inactif
tu dois utiliser ce code VBA :
VB:
Option Explicit

Private Sub Job(sh$, plg$)
  Worksheets(sh).Range(plg) = ""
End Sub

Sub Effacement()
  Application.ScreenUpdating = 0
  Job "Courriers", "B83:E91,B94:E96,B12,E10:E12,F26"
  Job "Salariés", "B8:B10,B15:B17,B12,B13,B19,B18,B21," & _
    "B23,D8:D9,D16,D18,D20,D21,C26:D28,C37,C39,C49:" & _
    "D60,D68,D72:E85,D87:E96,D98:E101"
  Job "Indemnités", "A201:C214": Job "CP", "C7:C18"
  Job "ES", "C5,C6,J12,J19,J26,B31": Job "FeuilCalcul", "B6:B14,E6:E7"
  Application.ScreenUpdating = -1: MsgBox "les données sont effacées"
  Worksheets("Salariés").Select: [A6].Select
End Sub
(je t'ai pas retourné ton fichier car c'est plus rapide pour toi de faire
un copier/coller sans t'embêter à changer la référence d'Outlook,
de 11.0 en 16.0)


soan
 

job75

XLDnaute Barbatruc
Bonjour FCMLE44, soan,

En VBA il est généralement inutile de sélectionner quoi que ce soit, exécutez tout bêtement ce code :
VB:
Sub Effacement()
Sheets("Courriers").Range("B83:E91,B94:E96,B12,E10:E12,F26") = ""
Sheets("Salariés").Range("B8:B10,B15:B17,B12,B13,B19,B18,B21,B23,D8:D9,D16,D18,D20,D21,C26:D28,C37,C39,C49:D60,D68,D72:E85,D87:E96,D98:E101") = ""
Sheets("Indemnités").Range("A201:C214") = ""
Sheets("CP").Range("C7:C18") = ""
Sheets("ES").Range("C5,C6,J12,J19,J26,B31") = ""
Sheets("FeuilCalcul").Range("B6:B14,E6:E7") = ""
MsgBox "les données sont effacées"
End Sub
A+
 

Discussions similaires