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 SubBonjour,
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 completOption 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 CdltMerci beaucoup 0 bug. J'ai juste modifié le fait de copier la ligne dans trash à 1 au lieu de 2.
Ca marche impeccable.