Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Effacer le contenu d'une colonne en fonction de la valeur d'une cellule

1 réponse
Avatar
happyness
Bonjour,
J'ai créé un fichier d'inscription aux repas. Jusqu'ici, j'ai pu me débrouiller sans macro grâce aux différentes possibilités d'Excel. Mais là, j'ai un soucis...
J'aurais besoin d'effacer le contenu d'une colonne en fonction de la date (qui se trouve affichée dans une cellule).
Pour résumer: J'ai un tableau reprenant tous les noms de personnes (verticalement) et ensuite 31 colonnes, chacune représentant un jour du mois.
Lorsque le jour change, la cellule prend 1 mois de +. Ainsi, aujourd'hui, il est écrit "08/12/08", demain, cette même cellule contiendra "08/01/09" (merci les formules).
Mon problème est que lorsque cela change, je dois effacer les inscriptions.
J'ai donc pensé à une macro évènementielle mais j'avoue que c'est très loin tout ça :-(
En cherchant, j'ai trouvé que
Range (A10:A15).ClearContents
devrait suffir à effacer le contenu. Mais comment dire que pour chaque colonne, lorsque la cellule XXX5 contient 1 alors on efface?
Un truc du style:

for i=1 to 31
if A5=1
then Range (A10:A15).ClearContents
endif
next

Question 1: comment dire "au next, la colonne n'est plus A mais B" et ainsi de suite?
Question 2: où placer la macro?

Dsl de poser des questions aussi évidentes mais c'est tellement loin tout ça :-(
Merci d'avance pour votre aide.

1 réponse

Avatar
FFO
Salut à toi

Je suppose que
for i=1 to 31

représente l'ensemble de tes colonnes à traiter

Donc il faut mettre :

For i = 1 To 31
If Cells(5, i) = 5 Then
Range(Cells(10, i).Address, Cells(15, i).Address).ClearContents
End If
Next
Je mettrai ta macro dans le VBA de la feuille (Alt+F11) avec un code
évennement basé sur le changement de la valeur d'une cellule ainsi

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Row = 5 Then
For i = 1 To 31
If Cells(5, i) = 5 Then
Range(Cells(10, i).Address, Cells(15, i).Address).ClearContents
End If
Next
End If
End Sub

Je suis parti du principe que la date qui évolue est en ligne 5

Maintenant si les cellules de cette ligne sont avec des formules il faut
utiliser cet autre évennement :

Private Sub Worksheet_Calculate()
For i = 1 To 31
If Cells(5, i) = 5 Then
Range(Cells(10, i).Address, Cells(15, i).Address).ClearContents
End If
Next
End Sub

Celà devrait te convenir

Dis moi !!!