Supprimer une ligne et mettre à jour les références
Bonjour,
J'ai un problème avec un programme que je réalise.
Il est constitué d'une base de données (tableau) avec en premiere colonne des références, qui sont utilisées régulièrement au sein de ce programme.
J'essaye d'ajouter une fonction permettant de supprimer une ligne, et mettre à jour les références de cette premiere colonne.
Pour cela, j'utilise le code suivant, allié à un userform :
Private Sub Valider_Click()
'On compte le nombre de références totales qu'il y a
Range("A3").Select
While Selection.Value <> ""
Selection.Offset(1, 0).Select
Wend
RefMax = Selection.Offset(-1, 0).Value
'On test que la référence saisie dans la textbox est bien inférieure au nombre total de REX (donc comprise dans la liste des ref)
If Reference.Value <= RefMax Then
'on définit la ligne que l'on va devoir supprimer en la cherchant par la reference saisie precedemment
ligne = ActiveSheet.Columns(1).Cells.Find(what:=Reference, lookat:=xlWhole).Row
'on vérifie que l'utilisateur veut bien supprimer le rex
If MsgBox("Voulez-vous vraiment supprimer le REX n°" & RefREX & "?", vbYesNo, "Confirmation de suppression de la référence") = vbYes Then
'on selectionne la ligne
Rows(ligne).Select
'suppression ligne
Selection.Delete Shift:=xlUp
'on stocke dans une variable la référence précédant celle de la ligne que lon a supprimé
REfPrecedente = Reference - 1
'et on sélectionne la cellule correspondant
ActiveSheet.Columns(1).Cells.Find(what:=REfPrecedente, lookat:=xlWhole).Select
'puis on met à jour les références pour qu'elles se suivent par une boucle
While Selection.Offset(1, 0) <> ""
RefApres = Selection.Offset(1, 0).Value
Selection.Offset(1, 0) = RefApres - 1
Selection.Offset(1, 0).Select
Wend
MsgBox ("reference supprimée")
Else
'si l'utilisateur ne veut plus supprimer on affiche une msgbox
MsgBox ("Aucune référence n'a été supprimé")
End If
'si la txtbox est vide
ElseIf Reference = "" Then
MsgBox ("Merci de saisir une référence")
'si la ref saisie est superieure a la ref maximale on empeche la manoeuvre
ElseIf Reference > RefMax Then
MsgBox ("Merci de saisir une référence valable!")
End If
End SubJe pense qu'il est suffisamment explicite avec les annotations.
Cependant, lors du test pour vérifier que la référence saisie par l'utilisateur est bien comprise dans la liste des références (if reference <=RefMax.value then...), vba semble ne pas reconnaitre la valeur stockée par Reference ou RefMax et ne parvient pas à réaliser l'inéquation ...
Pouvez-vous m'indiquer d'où vient l'erreur?
Je vous joins un fichier xlsm pour imager le dysfonctionnement : cliquez sur le bouton bleu pour afficher l'userform, le reste se trouve dans l'Userform "Modif" dans VBE...
Merci par avance pour votre aide.
Bien cordialement
Salut Nicolas,
bien alambiquée, ta méthode, dis donc! VBA est moins compliqué que cela même si l'usage des Userform demande toujours beaucoup de soin.
Private Sub Valider_Click()
'
Dim iRow%, lgNb&
'
On Error Resume Next
With Worksheets("BDD")
lgNb = Val(Me.Reference.Text)
iRow = .Columns(1).Find(what:=lgNb, lookat:=xlWhole, LookIn:=xlValues).Row
If iRow > 0 Then
If MsgBox("Voulez-vous vraiment supprimer le REX n°" & Me.Reference.Text & "?", vbYesNo + vbDefaultButton2, _
"Confirmation de suppression de la référence") = vbYes Then _
.Rows(iRow).Delete Shift:=xlUp: _
MsgBox "Référence supprimée !", vbInformation + vbOKOnly: _
Unload Me
Else
MsgBox "Référence introuvable !" & Chr(10) & "Vérifiez vos données !", vbExclamation + vbOKOnly
Me.Reference.SetFocus
Me.Reference.SelStart = 0
Me.Reference.SelLength = Len(Me.Reference.Text)
End If
End With
On Error GoTo 0
'
End Sub
A+