XL 2016 Effacement de cellules

Bobby94

XLDnaute Nouveau
Bonjour tout le monde,

Je me permets de demander votre aide sur une problématique certainement assez simple pour certains, mais aujourd'hui inaccessible pour moi :)

J'ai une liste déroulante en G11. J'aimerais que lorsque cette cellule est vide ou lorsqu'elle indique le mot inactif, que cela engendre un effacement de certaines cellules. En l'occurence les cellules suivantes : S13, S15, S17, Z13, Z15, Z17, AJ13, AJ15, AJ17, AN13, AN15 et AN17.

J'imagine qu'il faut passer par des macros, mais je n'ai pas encore développé mes compétences sur cet aspect d'Excel.

En vous remerciant de ce que vous pourrez faire pour moi.

Bonne soirée,
 

job75

XLDnaute Barbatruc
Bonsoir Bobby94, bienvenue sur XLD,

Allez dans VBA par les touches Alt+F11, créez un module (menu Insertion) et collez-y cette macro :
VB:
Sub Test()
If [G11] = "" Or LCase([G11]) = "inactif" Then [S13,S15,S17,Z13,Z15,Z17,AJ13,AJ15,AJ17,AN13,AN15,AN17] = ""
End Sub
Puis revenez dans Excel et exécutez la macro (touches Alt+F8).

Bonne nuit.
 

Bobby94

XLDnaute Nouveau
Bonjour,

Merci pour votre réponse hyper réactive.

Je ne l'ai pas précisé, mais j'aimerais que cet "effacement" se fasse automatiquement en fonction de la cellule G11.
Sauf erreur de ma part, dans l'exemple ci-dessus, j'ai besoin d'activer des touches pour que cela s'efface.

Merci pour votre retour.
 

eriiiic

XLDnaute Barbatruc
Bonjour à tous,

dans le module de la feuille :
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Address = "$G$11" Then
        Application.EnableEvents = False
        If Target = "" Or LCase(Target) = "inactif" Then [S13,S15,S17,Z13,Z15,Z17,AJ13,AJ15,AJ17,AN13,AN15,AN17].ClearContents
        Application.EnableEvents = True
    End If
End Sub
tu peux aussi nommer ta plage plage1 par exemple et :
Code:
...[plage1].ClearContents
ça permet de faire évoluer sans toucher le code.
eric
 

job75

XLDnaute Barbatruc
Bonjour Bobby94, eriiiic,

Oui il faut utiliser une macro évènementielle.

Clic droit sur l'onglet de la feuille => Visualiser le code et y coller la macro :
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False 'désactive les évènements
If CStr([G11]) = "" Or LCase(CStr([G11])) = "inactif" Then [S13,S15,S17,Z13,Z15,Z17,AJ13,AJ15,AJ17,AN13,AN15,AN17] = ""
Application.EnableEvents = True 'réactive les évènements
End Sub
Les CStr sont là pour le cas où l'on entre une valeur d'erreur en G11.

Attention avec ClearContents il peut y avoir un bug si des cellules sont fusionnées.

A+
 

Bobby94

XLDnaute Nouveau
Merci beaucoup pour votre support !
Lorsque j'ai utilisé vos propositions, cela ne m'a malheureusement pas donné de résultats. Les cellules ne disparaissaient pas
Pour ne pas vous déranger, j'ai essayé de modifier moi-même certains éléments de la macro, et par chance (car je n'y connais rien), j'ai obtenu le résultat escompté.

Au final ma macro ressemble à ça :

VB:
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False 'désactive les évènements
If CStr([G11]) = "" Then [S13,S15,S17,Z13,Z15,Z17,AJ13,AJ15,AJ17,AN13,AN15,AN17] = ""
If CStr([G11]) = "Inactif" Then [S13,S15,S17,Z13,Z15,Z17,AJ13,AJ15,AJ17,AN13,AN15,AN17] = ""
Application.EnableEvents = True 'réactive les évènements
End Sub
Tant que ça marche (pour le moment) :)

Merci beaucoup en tout cas
 

job75

XLDnaute Barbatruc
Le code du post #6 est équivalent au code du post #5, il est juste plus long.

Et il faut que la casse soit respectée.
 

Discussions similaires


Haut Bas