Insérer une ligne sous la cellule contenant un bouton et non sous la cellule active

Juj

XLDnaute Nouveau
Bonjour à tous!

Je vous remercie d'avance du temps que vous accorderez à mon petit problème...
J'ai pas mal parcouru les forums à la recherche d'une solution et tenté quelques adaptations mais rien n'y fait je suis bloqué!

Contexte:
J'ai un simple fichier qui a pour but d'implémenter un historique sur des interventions réalisées sur des pièces (usinage, rectification...) et je voudrais que mon bouton me permette d'ajouter à chaque fois une ligne au dessous pour lister ces interventions. (cf fichier ci-joint).

Mon problème:
Mon bouton ajoute bel et bien une ligne mais à partir de la cellule active et non à partir de la cellule contenant le bouton. Je comprends bien que si j'utilise ActiveCell dans mon code ce qui se passe est absolument logique mais je n'arrrive pas à forcer la cellule active à être celle de mon bouton.

Peut être faudrait-il mettre le numéro de ligne contenant mon bouton dans une variable pour ensuite créer la ligne à partir de cette valeur mais je n'y arrive pas.

Quelqu'un peut-il m'aider svp?

Merci d'avance
 

Pièces jointes

  • follow-up.xls
    40.5 KB · Affichages: 76

JCGL

XLDnaute Barbatruc
Re : Insérer une ligne sous la cellule contenant un bouton et non sous la cellule act

Bonjour à tous,
Bienvenue sur XLD,

Pourquoi un bouton ?
Un essai avec un code évènementiel :
VB:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)'faire une nouvelle ligne
ActiveCell.EntireRow.Insert Shift:=xlDown
'copier la ligne du dessus
ActiveCell.Offset(-1, 0).EntireRow.Copy Cells(ActiveCell.Row, 1)
On Error Resume Next
'effacer le contenu de la nouvelle ligne mais garder la forme
ActiveCell.EntireRow.ClearContents
End Sub

A + à tous
 

Dranreb

XLDnaute Barbatruc
Re : Insérer une ligne sous la cellule contenant un bouton et non sous la cellule act

Bonjour
Essayez comme ça:
VB:
Sub Bouton115_Cliquer()
Dim L As Long
L = ActiveSheet.Shapes("Bouton 115").TopLeftCell.Row
'copier la ligne du dessus
Rows(L).Copy
'l'insérer devant elle même
Rows(L).Insert Shift:=xlDown
's'intéresser à l'original repoussé plus bas
L = L + 1
'effacer les valeur constantes
Rows(L).SpecialCells(xlCellTypeConstants).ClearContents
'la sélectionner pour l'usager
Rows(L).Select
End Sub
mettez comme propriété au bouton : "ne pas déplacer ou dimensionner avec les cellules" sinon il sera dupliqué.
L'avantage de faire comme ça c'est que s'il est utilisée sur la dernière ligne d'une plage référencée dans une formule, dans un nom de plage ou comme ligne de fin de la zone d'impression, ce sera automatiquement corrigé.

Bonjour JCGL. Oui c'est une bonne idée aussi, si toutefois le dispositif est connu de tous ceux qui auront le classeur en main pour la 1ère fois.
 
Dernière édition:

Juj

XLDnaute Nouveau
Re : Insérer une ligne sous la cellule contenant un bouton et non sous la cellule act

Merci Dranreb pour ton code !
J'ai encore des petits soucis...

Comme vous pouvez le voir j'ai des références de pièces dans ma première colonne. Pour chacune de ces pièces je vais dresser un historique d'interventions. Grâce au bouton de la dernière colonne je crée des lignes entres ces références de pièces qui vont me permettre de lister les interventions.

Dans la configuration du code, comme je crée un bouton par reférences de pièces et que j'ai sélectionné pour chaque bouton "ne pas déplacer ou dimensionner avec les cellules", j'ai un pb puisqu'à partir de la deuxième référence pièce le bouton se décale...

Avez-vous une idée pour rendre indépendante chaque référence de pièce? (de manière à ce que je puisse ajouter potentiellement n interventions à chacune des pièces et avoir cette configuration pour chacune d'entre elles).

Merci d'avance
 

Dranreb

XLDnaute Barbatruc
Re : Insérer une ligne sous la cellule contenant un bouton et non sous la cellule act

Bonjour.
Mais le mieux, c'est de n'avoir qu'un seul bouton, qui vient automatiquement se positionner entre la ligne sélectionnée et celle du dessus grâce à un Worksheet_SelectionChange. Sinon, il vaut vraiment mieux, dans ce cas, opter pour la commande du dispo par un double clic comme l'a suggéré JCGL.
P.S. Ou un simple clic, d'ailleurs mais dans une colonne spécifique qui reproduit plus ou moins l'aspect d'un bouton.
Cordialement
 
Dernière édition:

Juj

XLDnaute Nouveau
Re : Insérer une ligne sous la cellule contenant un bouton et non sous la cellule act

Voici le code final. Merci à vous deux, j'y vois un peu plus clair. J'aurai finalement mixé vos deux solutions.


Code VBA:

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim L As Long
L = ActiveCell.Row
'copier la ligne du dessus
Rows(L).Copy
'l'insérer devant elle même
Rows(L).Insert Shift:=xlDown
's'intéresser à l'original repoussé plus bas
L = L + 1
'effacer le contenu de la ligne sauf le numéro de pièce et en gardant la mise en forme
Range(Cells(L, 2), Cells(L, 7)).ClearContents
'la sélectionner pour l'usager
Rows(L).Select
End Sub

Je m'attaque maintenant à l'impression auto de fiche de suivi en fonction de la pièce sélectionnée

Encore merci à vous deux

A+
 

Discussions similaires

Statistiques des forums

Discussions
312 504
Messages
2 089 086
Membres
104 023
dernier inscrit
zerarka mohamed