Copi/coll une ligne de la BDD dans Trash avant de la supprimer de la BDD

Bonjour,

Dans mon userform, j'ai une listebox. En choisissant un élément le ma listebox, cela m'affiche les différentes infos, de l'élément, provenant de la BDD.

J'ai créé un bouton supprimé qui supprime dans la BDD la ligne de l'élément sélectionné. Par sécurité, j'aimerai qu'avant de supprimer cette ligne, il en fasse un copie sur la feuille Trash. Jusque la, le code fonctionne. Mais que je supprime un deuxième élément il n'offset pas d'une ligne vers le bas. je ne trouve pas mon erreur.

Quelqu'un pourrait il me corriger SVP. Merci

Attention, il n'y a pas longtemps que j'ai mis mes mains dans le VBA. Quand vous verrez mon code, vous allez peut être saigner du nez

Private Sub btn_supprimer_Click()

    Dim onglet As Worksheet
    Dim derniere_ligne As Long
    Dim reference As Long
    Dim suppression As Boolean

    If ListBox1.Value = "" Then
        suppression = False
        Else
        suppression = True
    End If

    Set onglet = Worksheets(3)
    derniere_ligne = onglet.Cells(Rows.Count, 1).End(xlUp).Row

    Dim Rep As Integer
    Rep = MsgBox("Es-tu sûr de vouloir supprimer l'agence?", vbOKCancel + vbExclamation, "Confirmation de suppression")

    If Rep = vbOK Then
    ' ici le traitement si réponse positive

    If suppression = False Then
        If derniere_ligne = 1 Then
        reference = 1
        Else
            reference = onglet.Cells(derniere_ligne) + 1
        End If
    Else
        reference = ListBox1.Value
            For i = 2 To derniere_ligne
                   If onglet.Cells(i, 1) = reference Then

                    Cells(i, 2).EntireRow.Select
                    Selection.Copy
                    Sheets("Trash").Activate
                    Range("A2").Select
                    Selection.End(xlDown).Select
                    Selection.Offset(2, 0).Select

                    ActiveSheet.Paste
                    Selection.Columns.AutoFit
                    Sheets("BDD").Activate
                    Application.CutCopyMode = False

                    Cells(i, 2).EntireRow.Delete Shift:=xlUp

                   End If
            Next
     End If
    Else
        ' ici le traitement si réponse négative
        Exit Sub
    End If

Unload Me
frmconsmodsup.Show

End Sub

Bonjour,

Voici en fonction de votre code, possible qu'il y ait des bugs mais je ne peux pas tester ne connaissant pas la structure de votre fichier, mais si c'était le cas, vous n'auriez pas de peine à résoudre le problème.

il vous faut auparavant, indiquer la dernière colonne de la feuille "Onglet".

J'ai créé la variable "DerCol" mais ne connaissant pas quelle est la dernière colonne de la feuille "Onglet", je vous laisse le soin d'indiquer quelle est sa valeur.

Cette variable est utilisée ici

Onglet.Range(Cells(i, 2), Cells(i, DerCol)).Copy Trash.Range("A" & DerLig_Trash + 2) 
le code complet
Option Compare Text

Private Sub btn_supprimer_Click()
    Dim Onglet As Worksheet
    Dim Derniere_ligne As Long, DerLig_Trash As Long, DerCol As Long
    Dim Reference As Long
    Dim Suppression As Boolean

    If ListBox1.Value = "" Then
        Suppression = False
    Else
        Suppression = True
    End If
    Set Onglet = Worksheets(3)
    Set Trash = Sheets("Trash")
    Derniere_ligne = Onglet.Cells(Rows.Count, 1).End(xlUp).Row
    Dim Rep As Integer
    Rep = MsgBox("Es-tu sûr de vouloir supprimer l'agence?", vbOKCancel + vbExclamation, "Confirmation de suppression")
    If Rep = vbOK Then
    ' ici le traitement si réponse positive

    If Suppression = False Then
        If Derniere_ligne = 1 Then
        Reference = 1
        Else
            Reference = Onglet.Cells(Derniere_ligne) + 1
        End If
    Else
        Reference = ListBox1.Value
        For i = 2 To Derniere_ligne
            If Onglet.Cells(i, 1) = Reference Then
                DerLig_Trash = Trash.Cells(Rows.Count, 1).End(xlUp).Row 'recherche la dernière ligne de la feuille "Trash"
                Onglet.Range(Cells(i, 2), Cells(i, DerCol)).Copy Trash.Range("A" & DerLig_Trash + 2) 'Copie la sélection vers la feuille "Trash" en colonne A et 2 lignes plus bas
                Onglet.Cells(i, 2).EntireRow.Delete Shift:=xlUp 'suppression de la sélection de la feuille "Onglet"
            End If
        Next
        End If
    Else
        ' ici le traitement si réponse négative

        Set Onglet = Nothing 'libère la mémoire
        Set Trash = Nothing 'libère la mémoire
        Exit Sub
    End If
    Unload Me
    frmconsmodsup.Show

    Set Onglet = Nothing 'libère la mémoire
    Set Trash = Nothing 'libère la mémoire
End Sub
Cdlt

Merci beaucoup 0 bug. J'ai juste modifié le fait de copier la ligne dans trash à 1 au lieu de 2.

Ca marche impeccable.

Rechercher des sujets similaires à "copi coll ligne bdd trash supprimer"