En VBA, couper une ligne et la copier plus bas à un endroit précis

donpopo

XLDnaute Occasionnel
Bonsoir le forum,

Malgré le peu de connaissances que j'ai du VBA et mes recherches sur les forums, je n'arrive pas à terminer ma procédure.
Lorsque je sélectionne une ligne (OK), je souhaite la vider de son contenu en gardant les formules (OK), puis je désire couper cette ligne et la recoller après la dernière ligne remplie (là je cale)
J'ai joint un fichier exemple. lorsque je clique sur une case jaune et qu'il y a un collègue, je désire vider cette ligne et la déplacer après le dernier enregistrement, sachant que j'ai deux groupes de collègues.
Si quelqu'un peut m'aider?
Merci d'avance,
Donpopo
 

Pièces jointes

  • Classeur1.xlsm
    18.4 KB · Affichages: 21

Staple1600

XLDnaute Barbatruc
Bonsoir le fil, le forum

@donpopo
Poser une question c'est bien
Suivre et se manifester dans la précédente, c'est mieux ;)
https://www.excel-downloads.com/thr...n-fonction-couleur-de-fond-d1-autre.20023867/
(cf le message#1 où la solution t'attends)

Pour cette question, une petite question
Tu utilises déjà ce code ou pas?
VB:
Option Explicit

Private Sub Worksheet_SelectionChange(ByVal Target As Range)   'Lorsqu'on clique sur une cellule
Dim xlgn As Long
    If Target.Column = 2 Then
        
        'Vérifie si collègue dans la ligne
        xlgn = Target.Row
        If ActiveSheet.Cells(xlgn, 5) < "01/01/1900" Then
            MsgBox "Aucun collègue ne figure sur cette ligne.", vbInformation, "COMPTES-TITRES"
            Exit Sub
        End If
        
        'Boite de dialogue de confirmation d'archivage
        If MsgBox("Voulez-vous archiver ?" & vbNewLine & "Cela effacera la ligne sélectionnée !", vbExclamation + vbYesNo, "CONFIRMATION") = vbNo Then Exit Sub
        'Deuxième confirmation d'archivage
        If MsgBox("Etes-vous certain ? ?", vbExclamation + vbYesNo, "CONFIRMATION 2") = vbNo Then Exit Sub
    
        'Vider la ligne en gardant les formules, la couper et la coller au bas.
        Range("C" & xlgn & ":ZZ" & xlgn).SpecialCells(xlCellTypeConstants, 23).ClearContents
    
        'Couper la ligne en question et la coller à autre endroit
        Rows("3:xlgn ").Cut
        'Rows("4:4").Insert
    End If
End Sub
 

Staple1600

XLDnaute Barbatruc
Re

@donpopo
Je te propose cette macro de test (pour le moment sans les MsgBox)
Est-ce là le résultat souhaité?
VB:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim xlgn As Long
If Target.Column = 2 And Not IsEmpty(Target.Offset(, 1)) Then
xlgn = Cells(Rows.Count, 3).End(xlUp).Row + 1
Target.EntireRow.Cut Rows(xlgn)
End If
End Sub
 

donpopo

XLDnaute Occasionnel
Bonsoir Staple1600, le forum.
je viens de placer ta macro dans ma procédure existante. Mais rien de ce que j'attends ne se passe. J'y perd un peu mon latin.

Je te mets en annexe mon fichier Excel de travail plus important que l'autre. Ne te tracasse pas pour les données. Celles-ci sont fictives; je travaille toujours sur le site de ma banque pour l'instant.

Ce que je souhaite, c'est lorsque je clique sur la colonne 1 où il est noté Archiv., la ligne sélectionnée soit copiée sur la feuille "Archives" (OK), que cette ligne soit détruite et une nouvelle ligne créée après la ligne 17 ou la ligne 30 avec les mêmes formules et la même mise en forme que la ligne détruite.

La procédure concernée se trouve sur la feuille "Compte titres X" pour l'instant. Cette procédure est composée de deux parties: si on clique sur colonne 2, on édite un formulaire; si on clique sur la colonne 1, c'est la le problème.

Plus tard, lorsque ce sera en ordre, je crois que je mettrai cette procédure dans un module, car elle concernera en fait 3 feuilles différentes de compte titres.

J'espère avoir été assez clair. Si le moindre problème se pose, questionne-moi.

Merci d'avance,
donpopo

P.S.: connaitrais-tu un site ou un bouquin qui reprendrait l'ensemble du vocabulaire VBA? J'ai VBA Excel pour les nuls, mais bof.
 

Pièces jointes

  • COMPTES-TITRES - travail.xlsm
    4.8 MB · Affichages: 10

Staple1600

XLDnaute Barbatruc
Re

Le titre de ta question était:
"En VBA, couper une ligne et la copier plus bas à un endroit précis"
C'est donc se à quoi se borne ma macro ;)

Testes cette autre macro de test
VB:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim xlgn As Long, Alig&
If Target.Column = 2 And Not IsEmpty(Target.Offset(, 1)) Then
xlgn = Cells(Rows.Count, 3).End(xlUp).Row + 1
Alig = Target.Row
Target.EntireRow.Cut Rows(xlgn)
Rows(Alig).EntireRow.Delete
End If
End Sub
 

Discussions similaires

Statistiques des forums

Discussions
311 720
Messages
2 081 926
Membres
101 842
dernier inscrit
seb0390