Effacement automatique de ligne

Bonsoir

sur ma feuille de calcul je dispose d'un tableau allant de la plage G5 à H9 , je souhaite en remplissant la cellule J11 de la meme feuille par une donnée identique à une cellule du tableau supprimer toute la ligne en reference

je joins mon fichier dans lequel j'y ai placé un commentaire

merci pour toute idée

cordialement , Rocket

10effacement.xls (18.50 Ko)

Bonjour rocket4,

Une solution dans le fichier joint. J'ai nommé la cellule J11 car lors de la suppression d'une ligne, on ne peut plus faire référence à la cellule J11.

Bonjour

te remerciant pour ta solution , j'ai lu ton code et je ne saisi pas la notion de "flag" à la ligne 3 ,

j'ai essayé de réecrire le code , en choisisant cette fois ci une cellule d'information nommée C19 et en

conservant un tableau situé dans la plage G5:H19 ? et que l'effacement ne puisse avoir lieu que dans la plage G5:H19

ca donnerai :

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim t As Range
    If Not Application.Intersect(Target, Range("C19")) Is Nothing And Target.Count = 1 Then
        Set t = ActiveSheet.Range("G5").CurrentRegion.Select.Find(Target, lookat:=xlWhole, LookIn:=xlValues)
        If Not t Is Nothing Then t.EntireRow.Delete
    End If
End Sub

mais ca ne marche pas !

Bonjour,

rocket4 a écrit :

j'ai lu ton code et je ne saisi pas la notion de "flag" à la ligne 3

C'est parce que "flag" est le nom que j'ai donné à la cellule J11. Si en J11 tu saisis "velo" par exemple, la ligne contenant "velo" sera supprimée. Ce qui changera ta cellule J11 en J10. Si tu supprimes encore des lignes, J10 se transformera en J9 et ainsi de suite...

C'est pourquoi j'ai besoin d'un repère en nommant la cellule.

rocket4 a écrit :

conservant un tableau situé dans la plage G5:H19 ? et que l'effacement ne puisse avoir lieu que dans la plage G5:H19

ca donnerai :

Code: Tout sélectionner

Private Sub Worksheet_Change(ByVal Target As Range)

Dim t As Range

If Not Application.Intersect(Target, Range("C19")) Is Nothing And Target.Count = 1 Then

Set t = ActiveSheet.Range("G5").CurrentRegion.Select.Find(Target, lookat:=xlWhole, LookIn:=xlValues)

If Not t Is Nothing Then t.EntireRow.Delete

End If

End Sub

Presque. Ça donnerait ça :
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim t As Range
    If Not Application.Intersect(Target, Range("C19")) Is Nothing And Target.Count = 1 Then
        Set t = ActiveSheet.Range("G5").CurrentRegion.Find(Target, lookat:=xlWhole, LookIn:=xlValues)
        If Not t Is Nothing Then t.EntireRow.Delete
    End If
End Sub

Le problème, comme je l'ai dit plus haut, est que l'instruction If Not t Is Nothing Then t.EntireRow.Delete supprimerait la ligne correspondante. Donc ta cellule C19 dans laquelle tu entres l'information deviendrait C18 et donc la ligne

If Not Application.Intersect(Target, [barrer]Range("C19")[/barrer]) Is Nothing And Target.Count = 1 Then

ne marcherait plus.

Si ce n'est pas assez clair, fais signe.

merci pour toutes ces explications, une dernière question

en choisissant J11 comme repère et que tu nomme flag , c'est ce que je ne vois pas dans le code

J11 n'apparait pas dans celui ci pour dire qu'il est nommé en flag ?

merci

C'est ça.

Si tu nommes ta cellule J11 : azerty

La ligne sera à adapter :

If Not Application.Intersect(Target, Range("azerty")) Is Nothing And Target.Count = 1 Then

daccord , ca marche , merci pour toutes réponses et pour le temps que tu a accordé à mon post

bonne journée

Cordialement , Rocket

bonsoir

dans le but de comprendre un phenomène sur la suppression de ligne , je relance ce post avec un fichier joint , dans lequel j'ai affecté une macro à un bouton , cela fonctionne , .... sauf que mon tableau diminue de taille ! et c'est tres embettant , rien le spécifie dans le code de ma macro , souhaitant juste garder la mise en forme de mon tableau lorsque je lance ma macro

Merci pour vos avis après essais

16suppression.zip (6.83 Ko)

Je ne comprends pas trop ce que tu veux obtenir. Peut-être en changeant la ligne

For Each Cell In Range("H2:H9")

par

For Each Cell In Range("H2").CurrentRegion

bonjour

te remerciant pour ta réponse , meme en appliquant ta proposition

lorsque j'encadre la zone H2:H9 par une bordure , cette mise en forme se voit mofidiée au fur et à mesure que des contenus de

cellules sont nettoyés et c'est ce qui m’embête .

Bonjour,

Peux-tu mettre une feuille me montrant ce qui va pas et à côté ce que tu aurais souhaité ? Ça sera plus compréhensible.

re... je joint mon fichier avec l'exposé des soucis

cordialement ,

7suppression.zip (7.05 Ko)

Bon ce n'est pas l'exposé des soucis que je voulais mais un exemple du souci rencontré.

Essaie avec cette macro :

Sub SUP()
    Dim Cell As Range
    For Each Cell In Range("H2").CurrentRegion
        If Cell = Range("J12") Then
            Cell.Delete
        End If
    Next Cell
    With Range("H2").CurrentRegion
        .Borders(xlEdgeLeft).Weight = xlMedium
        .Borders(xlEdgeTop).Weight = xlMedium
        .Borders(xlEdgeBottom).Weight = xlMedium
        .Borders(xlEdgeRight).Weight = xlMedium
    End With
End Sub

merci pour cette réponse ! ca ne marche toujours pas ... je pense que je vais plutot m"orienter vers une autre facon de faire parcequ'avec cette methode les mise en forme ne sont pas du tout conservées

Bonjour à tous,

essaye avec

Sub SUP()
Dim Cell As Range
    For Each Cell In Range("h2:h" & [h65000].End(xlUp).Row)
        If Cell = Range("J12") Then Cell.ClearContents
    Next Cell
End Sub

Bonne journée

Claude

!!!!!!!!!!!!!! excatement ce que je voulais obtenir merci !!!! "Dubois" felicitation pour cette modif !! je pensais ne plus pouvoir aboutir ....

tenant egalement à remercier "vba new " pour ses nombreuses interventions qui m'ont permi d'avancer

Ah c'était juste ça

Un conseil rocket4, utilise souvent l'enregistreur de macro. Ça peut t'aider dans pas mal de cas !

Rechercher des sujets similaires à "effacement automatique ligne"