[VBA] Effacer contenus de cellules si une ou plusieurs cellules changent

Bonjour,

Je suis très novice sur VBA et je n'arrive pas à résoudre ce problème :

Si l'une des valeurs d'un groupe de cellules change, alors une plage de valeurs est vidée de son contenu.

Description :

SI C1, D1, E1, F1 ou G1 alors vider le contenu de la plage M20 à M30

SI C2, D2, E2, F2 ou G2 alors vider le contenu de la plage N20 à N30

... etc et ce sur 10 lignes de suite.

En cherchant sur les forums, j'ai réussi à effectuer ce changement si la celulle C1 change (cf code plus bas) mais je n'arrive pas à :

  • Effectuer cette même manipulation sur plusieurs celulles (C1,...,G1)
  • Incrémenter cette procédure pour éviter d'avoir à noter des noms de cellules "en dur", mais plutôt avec des variables.

Toute aide sera la bienvenue !

Merci d'avance

Salut,

Où est ton exemple de code ? Est-ce que tu peux envoyer ton fichier excel ?

Bonjour toutes et tous

@ tester pour 2 lignes si, j'ai compris

à mettre dans le code de la feuil1

' exemple Feuil1
Private Sub Worksheet_Change(ByVal Target As Range)
  If Not Intersect(Target, Range("C1:G1")) Is Nothing Then
    MsgBox "contenu changé ligne 1 voir a - M20 à M30 a effacé"
    Range("M20:M30").ClearContents
    Else
  End If

   If Not Intersect(Target, Range("c2:G2")) Is Nothing Then
    MsgBox "contenu changé ligne 1 voir b - n20 à n30 a effacé"
    Range("n20:n30").ClearContents
    Else
  End If
   'etc
   'etc
End Sub

crdlt,

André

Merci beaucoup @Andre13 !

Je tournais en rond autour de cette formule intersect mais je pense que j'écrivais mal ses arguments !

En ce qui concerne le deuxième point, est-ce que tu vois une méthode (boucle éventuellement) pour obtenir un résultat itératif sans avoir avoir à écrire 10 fois ce même code ?

En tout cas, ça fait déjà l'affaire

Bonjour Oliv78, André,

je propose ce code VBA :

Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
  Dim col%, lig&
  With Target
    If .CountLarge > 1 Then Exit Sub
    col = .Column: If col < 3 Or col > 7 Then Exit Sub
    lig = .Row
    If lig < 11 Then Cells(20, lig + 12).Resize(11).ClearContents
  End With
End Sub

(tout y est, y'a rien d'autre à écrire plusieurs fois ensuite)

dhany

Salut Oliv78,

Salut l'équipe,

Private Sub Worksheet_Change(ByVal Target As Range)
'
If Target.Count = 1 And Not Intersect(Target, Range("C1:G10")) Is Nothing Then Range("L20:L30").Offset(0, Target.Row).ClearContents
'
End Sub

A+

32deleteoffset.xlsm (19.05 Ko)

salut Curulis,

tu as trouvé encore plus court ! et en utilisant With et la notation abrégée, ça devient :

Private Sub Worksheet_Change(ByVal Target As Range)
  With Target
    If .CountLarge = 1 And Not Intersect(Target, [C1:G10]) Is Nothing Then [L20:L30].Offset(, .Row).ClearContents
  End With
End Sub

dhany

A ce petit jeu...

Private Sub Worksheet_Change(ByVal Target As Range)
'
If Not Intersect(Target, [C1:G10]) Is Nothing Then [L20:L30].Offset(, Target.Row) = ""
'
End Sub

@ Oliv78, si tu penses ne pas être capable de résister à un spasme provoquant l'effacement de données sur plusieurs lignes simultanément , alors, il vaut mieux ceci :

Private Sub Worksheet_Change(ByVal Target As Range)
'
If Target.Count = 1 And Not Intersect(Target, [C1:G10]) Is Nothing Then [L20:L30].Offset(, Target.Row) = ""
'
End Sub

A+

Bonjour toutes et tous,

Bon Week-End,

j'avais presque celui de Dhany mais il me manqué with target + .col = .column (j'y arriverai un jour!!)

merci en tout cas à tous

crdlt,

André

Rechercher des sujets similaires à "vba effacer contenus changent"