Copier / Inserer ligne par macro

Bonjour à tous

Je suis à la recherche d'une petite macro qui permettrai de :

- Au lancement de la macro, j'ai une boite de dialogue qui demande de choisir la ligne à copier via clic de la souris sur une cellule de la ligne à copier
- Après confirmation, une autre boite de dialogue pour choisir l'emplacement de l'insertion de cette ligne aussi via la souris

- Après confirmation la ligne sélectionnée est insérée et me recopie le contenu de la ligne de départ avec les formule comprise.

Ensuite j'aimerais une deuxième macro avec le même principe des boite de dialogue qui :

Je choisi une ligne et après confirmation supprime cette ligne et décale le reste des lignes vers le haut.

Merci d'avance à vous tous

45test.xlsm (13.56 Ko)

Bonjour Netparty, bonjour le forum,

Aucune ligne de code dans tons fichier !?... Est-ce normal ?

Bonjour à tous,

Un petit test rapide juste pour l'exercice via un UserForm en non modal. Je souhaitai passer en MsgBox mais ils sont modaux (modals ?)

Cdlt,

49copie-de-test.xlsm (22.24 Ko)

Bonjour Ergotamine

Merci pour ton code, mais est-il possible d'ajouter un copier ligne et insérer autre part.

Dans ton code il déplace la ligne choisie c'est cool aussi.

Merci

Bonjour,

Si vous souhaitez copier la ligne il suffit de remplacer l'instruction de la

Private Sub INIT_Click()
ActiveCell.EntireRow.Cut
End Sub

Par

Private Sub INIT_Click()
ActiveCell.EntireRow.Copy
End Sub

Cdlt,

62copie-de-test.xlsm (22.28 Ko)

Re Ergotamine

Super cool, j’utiliserai les 2 fonctions car très intéressant.

Par contre dans ton 2ieme exemple, après l'insertion la ligne de départ reste sélectionnée est-il possible de la désélectionner autrement que par escape ? et de vider le presse-papier.

Encore un tout grand merci pour ton aide

Bonjour,

Oui il suffit de placer la méthode Application.CutCopyMode = False pour vider le presse papier après l'insertion :

Private Sub DEP_Click()
ActiveCell.EntireRow.Insert Shift:=xlDown
Application.CutCopyMode = False 'Vider le presse papier
End Sub

N'hésites pas à passer ton sujet en résolu si les réponses ont comblé ton besoin.

Cdlt,

Re Ergotamine

Une dernière question

Est-il possible si la ligne n'est pas sélectionnée d'avoir un message d'avertissement ?

Et quel code a utiliser pour :

insérer une ligne et recopie les valeurs de la ligne juste au dessus ?

Merci

Bonjour,

Qu'entendez vous par "Est-il possible si la ligne n'est pas sélectionnée" ? A quelle étape ? Copie/Insertion/Suppression ? Je ne crois pas qu'il soit possible de ne pas avoir de ligne sélectionnée. Dans le cas où je me trompe, dites moi la manipulation réalisée afin que je la reproduise ? Resituez le contexte plus précisément.

Pour insérer une ligne et recopier les cellules du dessus :

ActiveCell.EntireRow.Insert Shift:=xlDown
ActiveCell.EntireRow.FillDown

Cdlt,

Oublie ma question "Est-il possible si la ligne n'est pas sélectionnée" car tu as raison il y a toujours une cellule sélectionnée.

Encore merci et bonne journée

Bonjour le fil, bonjour le forum,

Une autre solution avec les deux événementielles BeforeDoubleClick et BeforeRightClick ci-dessous.

Option Explicit 'oblige à déclarer toutes les variables
Private PL As Range 'déclare la variable PL (PLage)

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) 'au double-clic dans l'onglet
If Application.Intersect(Target, Range("A4").CurrentRegion) Is Nothing Then Exit Sub 'si le double-clic a lieu ailleurs que dans le tableau, sort de la procédure
If Target.Row = 4 Then Exit Sub 'si le double-clic a lieu dans la ligne 4, sort de la procédure
Cancel = True 'empêche le mode [Édition] lié au double-clic
Set PL = Range(Cells(Target.Row, "A"), Cells(Target.Row, "M")) 'définit la plage PL
PL.Select 'sélectionne la plage PL
End Sub

Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean) 'au clic du bouton droit dans l'onglet
If Application.Intersect(Target, Range("A4").CurrentRegion) Is Nothing Then Exit Sub 'si le double-clic a lieu ailleurs que dans le tableau, sort de la procédure
Cancel = True 'empêche le menu contextuel lié au clic-du-bouton-droit
If PL Is Nothing Then 'condition : si la plage PL est vide
    If MsgBox("Voulez-vous supprimer cette ligne ?", vbYesNo) = vbYes Then 'condition 2 : si "Oui" au message
        Rows(ActiveCell.Row).Delete 'supprime la ligne de la cellule active
        Exit Sub 'sort de la procédure
    End If 'fin de la condition 2
Else 'sinon (condition 1)
    If Application.Intersect(Target, PL) Is Nothing Then 'condition 2 : si la cellule active ne fait pas partie de la plage PL
        If MsgBox("Voulez-vous insérer la ligne précédemment copiée ?", vbYesNo) = vbYes Then 'condition 3 : si "Oui" au message
            Rows(Target.Row).Insert xlDown 'insère une ligne en-dessous de la cellule double-cliquée
            PL.Copy Cells(ActiveCell.Row, "A") 'copye la plage PL dans la colonne A de la cellule active
        End If 'fin de la condition 3
    End If 'fin de la condition 2
    Set PL = Nothing 'vide la plage PL
End If 'fin de la condition 1
End Sub

Ton fichier modifié en pièce jointe :

Bonjour ThauThème

Merci pour ton code

Bonne soirée

Re bonjour @Ergotamine

Pour le déplacement de la ligne

Private Sub DEP_Click()
ActiveCell.EntireRow.Insert Shift:=xlDown
End Sub

Si j'oublie de sélectionner la ligne de destination et que je reste sur la ligne en cour alors j'ai un message d'erreur, se qui est normal.

Mais serait-il possible d'ajouter dans le code une vérification pour ne pas avoir un bug et avoir un message d’avertissement du genre :

"La ligne de destination n'est pas correcte"

Merci

Bonne soirée

Bonjour,

C'est peut être archaïque mais fonctionnel :

Lorsque je copie la ligne je met la valeur de la ligne en A1 écrite en blanc. Lorsque je vais déplacer je m'assure que le numéro de la ligne active n'est pas égal a la valeur en A1. Si c'est égal alors MsgBox, sinon je fais le déplacement et j'efface la valeur de A1, qui devient alors vide, donc qui ne sera jamais égal a un numéro de ligne.

Cdlt,

Merci @Ergotamine

Bonne soirée

Bonjour le fil,

Ces échanges sont hyper intéressants car ils répondent en partie à ma question/problématique posée aujourd'hui.

VBA: création ligne incrémentée sur 4 onglets selon critère alphabétique (excel-pratique.com)

Est-il possible d'y trouver des éléments transposables dans la réponse attendue ?

Merci pour vos lumières.

Rechercher des sujets similaires à "copier inserer ligne macro"