XL 2016 VBA insertion nouvelle ligne tout en gardant certaines données ciblées de la ligne au-dessus

kgr

XLDnaute Nouveau
Bonsoir à toutes et à tous,
Après de nombreux essais de codes proposés par la communauté, je me tourne vers vous pour avoir votre aide.
Dans mon tableau, j'essaie d'avoir un Macro qui permet d'insérer une nouvelle ligne dans un tableau tout en copiant/collant le contenu de certaines cellules de la ligne précédente (ligne où le curseur est placé). En effet, je dois ajouter des avenants à un même contrat et je voudrais ajouter de nouvelles lignes pour ces avenants tout en reproduisant les informations de base qui ne changent pas.
Je vous serais très reconnaissant si vous pouvez m'orienter vers un thème déjà existant ou me suggérer le code de la macro ici. Merci d'avance et vive la force de l'intelligence collective!
 

Pièces jointes

  • VBA insérer une ligne en ne compiant que certaines informations de la ligne précédente.xlsx
    11.3 KB · Affichages: 5

Phil69970

XLDnaute Barbatruc
Bonjour @kgr ,Staple

Tu double cliques sur la ligne que tu veux copier
VB:
Option Explicit

Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim Ligne&

If Target.Row > Range("A" & Rows.Count).End(xlUp).Row Then Exit Sub
If Not Application.Intersect(Target, Rows(1)) Is Nothing Then
    MsgBox "Les titres ne peuvent pas être copiés", vbCritical, "Copie interdite"
Else
    Cancel = True
    Ligne = Target.Row + 1
    Rows("" & Ligne & ":" & Ligne & "").Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
    Range("A" & Ligne - 1 & ":R" & Ligne - 1).AutoFill Destination:=Range("A" & Ligne - 1 & ":R" & Ligne), Type:=xlFillCopy
    Range("C" & Ligne) = ""
    Range("F" & Ligne & ":J" & Ligne) = ""
End If
End Sub
*Merci de ton retour

@Phil69970
 

Pièces jointes

  • Ajout ligne pour avenant V1.xlsm
    17.9 KB · Affichages: 2

kgr

XLDnaute Nouveau
Bonjour @kgr ,Staple

Tu double cliques sur la ligne que tu veux copier
VB:
Option Explicit

Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim Ligne&

If Target.Row > Range("A" & Rows.Count).End(xlUp).Row Then Exit Sub
If Not Application.Intersect(Target, Rows(1)) Is Nothing Then
    MsgBox "Les titres ne peuvent pas être copiés", vbCritical, "Copie interdite"
Else
    Cancel = True
    Ligne = Target.Row + 1
    Rows("" & Ligne & ":" & Ligne & "").Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
    Range("A" & Ligne - 1 & ":R" & Ligne - 1).AutoFill Destination:=Range("A" & Ligne - 1 & ":R" & Ligne), Type:=xlFillCopy
    Range("C" & Ligne) = ""
    Range("F" & Ligne & ":J" & Ligne) = ""
End If
End Sub
*Merci de ton retour

@Phil69970
Bonjour Phil69970, merci beaucoup, c'est vraiment cela qu'il me fallait! Est-ce qu'il y a une possibilité de mettre la commande dans un bouton afin que le double click reste l'option de modification du contenu de la cellule. La commande pourrait etre d'insérer une nouvelle ligne sous la ligne dans laquelle est placé le curseur, avec les mêmes fonctionnalités qui marchent parfaitement :)
Big thank you !
 

Staple1600

XLDnaute Barbatruc
Bonjour le fil

kgr
je p** de la g***** ? ;)
Même pas un petit bonjour?
Ni un feedback sur la proposition du message#2?

NB: pourtant je me brosse les dents plus de trois minutes et je prends toujours un cachou quand je me connecte sur XLD.
 
Dernière modification par un modérateur:

kgr

XLDnaute Nouveau
@kgr

La même avec un bouton ET le double clic comme cela tu auras le choix si tu ne veux pas du double clic tu supprimes la section du code ==>

Jusqu'au


@Phil69970
Bonjour Phil, désolé je vois que mon message n'est pas passé, j'étais connecté sur la wifi d'un aéroport... Grand merci pour la V2, je fais peut être une mauvaise manip, mais quand j'appuie sur le bouton, il y a une ligne vide que s'ajoute au-dessus du tableau (que j'ai formaté en tant que Tableau). J'essaie de comprendre pourquoi, mais sans succès. As-tu une idée?
Merci pour ton aide :)
K
 

kgr

XLDnaute Nouveau
Bonjour le fil,

kgr
Tu m'ignores volontairement ?
C'est sympathique!
Ca donne vraiment envie d'aider :rolleyes:

NB: Je remercie Phil qui lui a eu la courtoisie de me saluer.
Bonjour Staple,
Je suis désolé, je n'ai pas l'habitude du forum, excuse-moi, ce n'est pas volontaire. Merci pour ton aide.
J'ai essayé ta proposition qui fonctionne, mais pour la dernière ligne du tableau. Mon idée était de dédoubler la ligne sur laquelle le pointeur est placé (non nécessairement la denière). Je vais tenter de bâtir à partir de cela.
Bien à toi
kgr
 

kgr

XLDnaute Nouveau
@kgr

La même avec un bouton ET le double clic comme cela tu auras le choix si tu ne veux pas du double clic tu supprimes la section du code ==>

Jusqu'au


@Phil69970
Bonjour Phil, j'utilise la macro que tu as proposée avec succès, ayant adapté certains aspects. Merci encore de ton aide! Je me pose la question s'il est possible dans la colonne "avenant" de générer automatiquement un numéro de série de l'avenant en reprenant le numéro de contrat et en ajoutant un chiffre supplémentaire (série) par avenant (par ex le Contrat CA1212, avec 2 avenants : CA1212-1 et CA1212-2) Egalement, quand il y a plusieurs avenants, est-il possible de formater la ligne du dernier avenant pour la mettre en exergue et de formater les lignes des avenants précédents pour les rendre moins visibles (genre en gris)? Qu'en penses-tu?
 

Phil69970

XLDnaute Barbatruc
Bonjour à tous

@kgr
Rappel du principe du forum c'est :

==>une question ==> une ou plusieurs réponses ==> je valide la réponse qui me va et que j'ai retenu
==> Nouvelle question ==> une ou plusieurs réponses==> je valide la réponse qui me va et que j'ai retenu....

Je te propose ceci :

@Phil69970
 

Pièces jointes

  • Ajout ligne pour avenant V3.xlsm
    27.7 KB · Affichages: 2

Discussions similaires

Statistiques des forums

Discussions
312 177
Messages
2 085 972
Membres
103 073
dernier inscrit
MSCHOE16