Supprimer une ligne lorsque je clique sur une cellule de la même ligne

Bonjour,

Je voudrais supprimer la ligne complète si je clique sur la cellule dans la colonne F

par exemple; si je clique sur la cellule F1 je voudrais supprimer la ligne

J'ai trouvé ça mais je dois l'adapter au clic de la souris

Rows("5:5").Select
Selection.Delete Shift:=xlUp
Range("A5").Select

Merci

Bonjour,

Voici un essai avec ce code à placer dans le module de la feuille concernée :

private sub worksheet_beforedoubleclick(byval target as range, cancel as boolean)
cancel = true
with sheets("Archives")
    nvl = .cells(.row.count, 1).end(xlup).row + 1
    .rows(nvl) = me.rows(target.row)
end with
me.rows(target.row).delete
end sub

Il faut un double-clic.

La ligne supprimée est archivée dans une feuille nommée "Archives", au cas où on se tromperait de ligne... Sinon, on peut mettre un message de confirmation mais la suppression sans sécurité me semble une mauvaise idée.

Cdlt,

Bonjour 3GB,

Dans ton code, Je comprends pas que les variables row rows me ou count ne soient pas définies.

Je n'ai trouvé aucune de ces variables dans les fonctions ou fonctions complémentaires ici

moi je me débrouille avec : Range("A1048576").End(xlUp).Row

je comprends pas non plus "cancel=true"

Merci de m'expliquer.

Fronck

Bonjour fronck,

Voici le code commenté :

private sub worksheet_beforedoubleclick(byval target as range, cancel as boolean) 'procédure évènementielle se déclenchant lors d'un double-clic sur la feuille : target est la cellule cible du double-clic, cancel permet d'annuler l'effet du double-clic (valeur par défaut false)
cancel = true 'annule l'effet du double-clic (on ne rentre pas dans la cellule)
with sheets("Archives") 'avec la feuille Archives
    nvl = .cells(.row.count, 1).end(xlup).row  + 1 'position de la 1ère cellule non vide en colonne 1
    .rows(nvl) = me.rows(target.row) 'la ligne nvl d'Archives prend les valeurs de la ligne cliquée sur la feuille cible du double clic
    'me représente la feuille sur laquelle porte l'évènement
    'target.row est le numéro de ligne de la cellule double-cliquée
end with
me.rows(target.row).delete 'suppression de la ligne double-cliquée
end sub

J'espère que ce sera plus clair.

A noter donc que cette macro réagit à un évènement (le double-clic) et est à placer dans un module de feuille et non un module normal.

Cdlt,

@3GB,

J'avais compris ce que faisait ta macro ligne par ligne, çà n'était pas ma question.

J'utilise me aussi avec unload.me qui concerne la fermeture du formulaire.

Quelle est la différence entre row et rows ?

Par contre merci pour l'explication de cancel= true, c'est ce qu'il me manquait dans ma commande double clic qui faisait buguer le formulaire.

Désolé pour l'embêtement dans ce fil avec truc33.

A+

fronck

.Rows est une propriété de l'objet worksheet ou range, qui renvoie la collection des lignes (un ensemble d'objets range).

.rows(n) est un élément de cette collection, en l'occurrence le nième donc la ligne numéro n (on parle bien de plage, d'objet range toujours).

.row est une propriété de l'objet range qui renvoie la numéro de ligne (et pas un objet cette fois-ci). Elle est de type long. Son pendant vertical est .column.

Par exemple :

msgbox activesheet.rows(4).row

renvoie 4.

On demande la ligne 4 (via .rows(4)) et on a donc une plage qui correspond à la ligne 4. Cette plage est bien un objet de type range. On demande la propriété .row de cet objet et on obtient donc 4, le numéro de ligne.

Bonne soirée,

Bonjour,

Merci pour les info j'ai copier coller le prog sur la feuille concerne cela na pas d'action quand je clique 2 fois sur la cellule colonne F pour supprimer la ligne.

Pour info la feuille est protégée et j'ai déverrouillé la colonne F.

Option Explicit

Private Sub Worksheet_Activate()
ActiveSheet.Unprotect "test"
Worksheets("poste1").Range("A5:E50").ClearContents
ActiveSheet.Protect "test"
End Sub

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Cancel = True
With Sheets("Archives")
nvl = .Cells(.Row.Count, 1).End(xlUp).Row + 1
.Rows(nvl) = Me.Rows(Target.Row)
End With
Me.Rows(Target.Row).Delete
End Sub

Bonjour,

Pas d'effet, même pas de bug, ni même d'erreur de compilation ? Parce qu'avec l'option explicit, vous devez déclarer la variable nvl de type long au sein de la procédure doubleclick.

Ensuite, la feuille étant protégée, une erreur 1004 aurait dû se produire.

Avez-vous activé les macros à l'ouverture du fichier ?

Sinon, rien à voir, mais avez-vous bien créé une feuille Archives ?

Voici le code mis à jour :

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
dim nvl as long
Cancel = True
With Sheets("Archives")
nvl = .Cells(.Row.Count, 1).End(xlUp).Row + 1
.Rows(nvl) = Me.Rows(Target.Row)
End With
with me
    .unprotect "test"
    .Rows(Target.Row).Delete
    .protect "test"
end with
End Sub

Cdlt,

Message erreur d'execution '438

propriete ou methode non géree par cet objet

il me souligne le ligne en jaune NV1=.cells......

J'ai supprimé la ligne du dessous est ça fonctionne Merci

With Sheets("Archives") nvl = .Cells(.Row.Count, 1).End(xlUp).Row + 1 .Rows(nvl) = Me.Rows(Target.Row) End With

Bonjour,

J'ai oublié un s à .rows (c'est marrant puisque fronck m'a posé la question, peut-être justement pour cette raison ?), désolé.

Réessayez avec :

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
dim nvl as long
Cancel = True
With Sheets("Archives")
nvl = .Cells(.Rows.Count, 1).End(xlUp).Row + 1 'ici, s oublié
.Rows(nvl) = Me.Rows(Target.Row)
End With
with me
    .unprotect "test"
    .Rows(Target.Row).Delete
    .protect "test"
end with
End Sub

Cdlt,

Rechercher des sujets similaires à "supprimer ligne lorsque clique meme"