Un bouton de commande par ligne

Lio59

XLDnaute Nouveau
Bonsoir à tous,

J'ai débuté depuis 1 semaine via ce forum!
J'ai réussi à faire quelques petites choses, même à l'aide de conditions... Mais là je sèche...
Le résultat attendu :

Un bouton de commande (suppr.) qui doit supprimer le format (couleur) des cellules de cette même ligne.

Jusque là je sais faire, mais quand je regarde le code, l'objet range me donne les adresses des cellules sélectionnées pour la macro.
Ce bouton sera affecté à un grand nombre de lignes, donc je dois utiliser un code unique pour ce bouton qui sera copié sur toutes ces lignes.
Pour cela, un test... ok! l'idée :
Si je sélectionne le bouton suppr de cette ligne
alors
le format des cellules de cette ligne doit être supprimé
fin si

Pour ce test il me faut une variable.... laquelle, comment faire pour que le bouton suppr, placé par mes soins sur cette ligne, sache qu'il doit supprimer le format des cellules de cette ligne!
Peut-on affecter, au bouton de commande, l'adresse de la cellule où il se trouve? Ainsi, il sera possible de jouer avec les coordonnées relatives, non?

Il est 23h, la réponse peut attendre demain!

Merci à vous tous!

Lio
 

Robert

XLDnaute Barbatruc
Repose en paix
Re : Un bouton de commande par ligne

Bonsoir Lio, bonsoir le forum,

Pourquoi un bouton pour chaque ligne qui risque d'alourdir ton fichier ? Je te propose de supprimer les formats de la ligne en cliquant du bouton droit sur la première cellule de cette même ligne. Regarde le code ci dessous de la macro événmentielle BeforeRightClick à placer dans le composant Worksheet de l'onglet en question (Feuil1(Feul1) par exemple) :

Code:
Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
Dim li As Integer 'déclare la variable li (LIgne)
If Target.Column <> 1 Then Exit Sub 'si le clic droit a lieu ailleurs que dans la colonne A, sort de la procédure
Cancel = True 'évite le menu contextuel lié au clic droit
li = Target.Row 'définit la variable li
Range(Cells(li, 1), Cells(li, 256).End(xlToLeft)).ClearFormats 'efface les formats de la ligne
End Sub

Dans le fichier en pièce jointe, clique avec le bouton droit sur une des cellules de la colonne A pour supprimer les formats de toute la ligne.
 

Pièces jointes

  • Lio_V01.xls
    28 KB · Affichages: 83

Lio59

XLDnaute Nouveau
Re : Un bouton de commande par ligne

Grand merci à vous!
Effectivement un clic droit sur la cellule, c'est mieux. En revanche, je n'arrive pas à supprimer le format des cellules souhaitées... à une cellule près...
La cellules "Suppr" se trouve dans la colonne 13 (M)
et je souhaite supprimer
les cellules de la colonne 3 (C) à 10 (J). J'ai modifié les valeurs dans le code, rien à faire l'action me supprime les colonnes de 2 (B) à 10 (J)... je n'ai pas de cellules fusionnées....
Alors que sur le fichier que vous m'avez envoyé, on peut définir jusqu'où l'on souhaite supprimer le format...
C'est parce que :
- ma cellule "Suppr" ne se trouve pas directement à côté des cellules à effacer?
- mes cellules à effacer se trouvent à gauche?...
Alors voici le code que j'ai mis en place, cela fonctionne, mais je ne sais pas si l'ordi se marre en voyant cela...

Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
Dim c As Integer
c = ActiveCell.Row
If Cells(c, 13) = "Suppr" Then
Cancel = True
Range(Cells(c, 3), Cells(c, 10)).Select
Selection.Interior.ColorIndex = xlNone
Cells(c, 11) = "0"
End If
End Sub

Merci à vous...
J'ai encore des questions, mais n'ai pas encore assez creusé!
Lio
 

Bebere

XLDnaute Barbatruc
Re : Un bouton de commande par ligne

bonjour Lio,Robert
garde donc le code de Robert
'en commentaires quelques possibilités

Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
Dim li As Integer 'déclare la variable li (LIgne)
If Target.Column <> 1 Then Exit Sub 'si le clic droit a lieu ailleurs que dans la colonne A, sort de la procédure
Cancel = True 'évite le menu contextuel lié au clic droit
li = Target.Row 'définit la variable li
'efface les formats de la ligne
If Cells(li, 13) = "Suppr" Then
Range(Cells(li, 1), Cells(li, 256).End(xlToLeft)).ClearFormats
'** autres possibilités
'enlève couleur de la ligne
'If Cells(li, 13) = "Suppr" Then Range(Cells(li, 1), Cells(li, 256).End(xlToLeft)).Interior.ColorIndex = xlNone
'enlève couleur de la ligne de c à j
'If Cells(li, 13) = "Suppr" Then Range(Cells(li, "C"), Cells(li, "J").End(xlToLeft)).Interior.ColorIndex = xlNone
'ou
'If Cells(li, 13) = "Suppr" Then Range(Cells(li, 3), Cells(li, 10).End(xlToLeft)).Interior.ColorIndex = xlNone
'efface contenu cellule
'If Cells(li, 13) = "Suppr" Then Range(Cells(li, 3), Cells(li, 10).End(xlToLeft)).clearcontents
'**
Cells(li, 13) = ""
End If
End Sub

à bientôt
 

Discussions similaires

Réponses
4
Affichages
139

Statistiques des forums

Discussions
312 428
Messages
2 088 333
Membres
103 819
dernier inscrit
vinz_kid