Supprimer une ligne selon critère
Bonjour à tous,
Voilà, je souhaite mettre en place un Userform de suppression d'un adhérent.
A partir d'un Combo, l'utilisateur choisira le numéro de l'adhérent.
Les infos concernant l'adhérent apparaîtra dans différentes TextBox.
Jusque là rien de très compliqué je vous l'accorde.
Lorsque l'utilisateur cliquera sur un bouton "Supprimer" alors rechercher le n° de l'adhérent dans ces 3 feuilles (Adhé, Enf, Conj) et supprimer les lignes qui y correspondent. C'est là que cela se complique pour moi.
Auriez-vous des exemples de ce type ou bien pouvez-vous me montrer la méthode pour finaliser ce travail ?
Je vous en remercie par avance
suppression commentaires inutiles dans le code
Bon ce n'est pas parfait mais quelque chose qui marche (en tout cas pour moi ;))
D'abord le code du bouton modifié :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
| Private Sub Cmb1_Click()
Dim BDP As Worksheet
Dim T As Range
Dim AdheSup As String
Set BDP = Worksheets("Adhé")
AdheSup = Cb1.Value
'// on vérifie si l'adhérent existe
Set T = BDP.Columns("B:B").Find(What:=AdheSup, LookIn:=xlValues, LookAt:=xlPart)
If T Is Nothing Then
MsgBox "L'adhérent n'a pas pu être supprimé. " & "Vérifiez que vous avez sélectionné un adhérent, " & "sinon consultez votre fichier."
Exit Sub
Else
vrep = MsgBox("Voulez-vous confirmer la suppression de cet adhérent ?", vbYesNo, vbQuestion)
If vrep = vbYes Then
' // On supprime les lignes correspondant au titulaire dans chaque feuille
Supprime_adherent AdheSup, "Adhé", "B", True
Supprime_adherent AdheSup, "Enf", "B", True
Supprime_adherent AdheSup, "Conj", "B", True
Else
Unload Me
End If
' // Retour à la feuille Accueil
Worksheets("Adhé").Visible = True
Worksheets("Adhé").Activate
' // On décharge le formulaire
Unload Me
End If
End Sub |
Ensuite la fonction dans un modile standard :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| Function Supprime_adherent(ByVal MaRech As String, ByVal MySheet As String, ByVal Lettrecol As String, ByVal Mondelete As Boolean) As Boolean
Dim F1 As Worksheet
Set F1 = Worksheets(MySheet)
F1.Activate ' Je n'arrive pas a faire autrement !!!
With F1.Range(Lettrecol & "3:" & Lettrecol & Range(Lettrecol & "65536").End(xlUp).Row)
Do
Set C = .Find(MaRech, LookIn:=xlValues)
If Not C Is Nothing Then
Supprime_adherent = True
If Mondelete = True Then
F1.Rows(C.Row).EntireRow.Delete
End If
End If
Loop While Not C Is Nothing
End With
End Function |
Bien sur on aurait aussi pu boucler sur la plage et tester la valeur, j'ai préféré utiliser Find.
Une interrogation cependant, je n'arrive pas à orienter le find vers l'onglet choisi, je suis obligé de passer par un activate, c'est un peu dommage, si quelqu'un à la solution, je suis preneur.
Voila, j'espère qu'avec ça tu peux avancer
Edit : s'il n'y a pas trop de lignes a effacer on aurait pu aussi passer par autofilter