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 Sub

Je 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

13classeur1.xlsm (20.49 Ko)

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+

17classeur1.xlsm (23.00 Ko)
Rechercher des sujets similaires à "supprimer ligne mettre jour references"