Supprimer une ligne d'une liste, Macro VBA

JulienG

XLDnaute Nouveau
Supprimer une ligne d'une liste, Macro VBA [Résolu]

Bonjour,

Je désire supprimer un élément d'une liste en fonction de la valeur que j'entre dans un formulaire (Userform). Je débute sur VBA et je suis parti d'une macro que j'ai enregistré grâce à l'outil [Nouvelle Macro...]

Ma liste est "active", créée avec la fonction liste et les données se nomme "Collaborateurs" (Insertion/Nom/Définir).

Je rencontre deux problèmes:
1) Je n'arrive pas à sélectionner directement ma liste (Existe-t-il un raccourci du style Listobject("Collaborateurs") ??)
2) J'essaie de contourner le problème en sélectionnant la cellule où se trouve ma valeur, mais je n'arrive pas à la sélectionner.

J'espère que j'ai été clair, merci d'avance pour votre aide :)

Private Sub CommandButton1_Click()

J'entre ma valeur, Textbox se trouve sur mon formulaire
Dim Alpha As String
Alpha = TextBox1

Je trouve ma valeur sur la feuille
Set c = Worksheets("Liste").Cells.Find(What:=Alpha)

J'identifie la ligne
i = c.Row

Je sélectionne la cellule Premier Problème
c.Select

Voici la ligne que j'ai été péché dans la Macro enregistréDeuxièmeProblème
Selection.ListObject.ListRows(i).Delete

Unload UserForm2
End Sub
 
Dernière édition:

Etienne2323

XLDnaute Impliqué
Re : Supprimer une ligne d'une liste, Macro VBA

Salut JuilenG,
Voici un exemple qui pourrait remplir ton besoin. Je t'ai mis un exemple en commentaire si tu veux remplacer le Cells.Find par un range particulier étant donné ta plage variable. Vois si ceci te convient. Le code est commenté pour que tu comprennes bien les étapes.

Code:
Private Sub CommandButton1_Click()

Dim Alpha As String
Dim c As Variant
Dim Ligne As Integer
'Dim DerniereLigne as Integer

Application.ScreenUpdating = False

Alpha = TextBox1.Value


'**** Si tu souhaites faire une recherche seulement sur une colonne, tu n'as qu'à remplacer le
'**** "Cells" par "Range("tonRange").Find ... Je ferais donc quelque chose comme ceci :

'DerniereLigne = Cells(65536,1).End(xlup).Row
'Set c = Range(Cells(1,1),Cells(DerniereLigne,1)).Find(Alpha, LookIn:=xlValues, LookAt:=xlWhole)

'Je trouve ma valeur sur la feuille
Set c = Cells.Find(Alpha, LookIn:=xlValues, LookAt:=xlWhole) 'On cherche la ligne de travail qui est déterminée par la valeur inscrite dans le Textbox
    If Not c Is Nothing Then 'Si c n'est pas vide, alors ...
        Ligne = c.Row 'Une fois la ligne trouvée, on conserve dans une variable le numéro de cette ligne.
    Else 'Sinon, on envoie un message pour dire de saisir le mot comme il faut, tel que demandé dans le textbox
        MsgBox "Vous n'avez pas inscrit le mot correctement dans le Textbox." & Chr(10) & _
        " " & Chr(10) & _
        "Veuilez s'il-vous-plait recommencer. Merci !", vbOKOnly + vbExclamation, "Erreur dans la saisie"
         Exit Sub 'On sort de la macro puisqu'on a pas de ligne pour travailler.
    End If

'Je sélectionne la cellule Premier Problème
Cells(Ligne, 1).EntireRow.Delete

Unload UserForm2

End Sub

Cordialement,

Étienne
 

JulienG

XLDnaute Nouveau
Re : Supprimer une ligne d'une liste, Macro VBA

Merci pour la réponse Etienne! J'ai analysé tout ça.

Ta solution réponds à la première partie de mon problème. Je n'avais pas prévu l'éventualité que le texte ne corresponde à aucune valeur.

La ligne suivante pose toujours problème:

Cells(Ligne, 1).EntireRow.Delete

car elle efface toute la ligne, alors que je voudrais effacer uniquement les élément de ma liste. Je m'explique: ma liste est une liste active ,entouré de bleu sur Excel, et comporte deux colonnes (A et B). D'autre donnée se trouve dans les colonnes voisines (en D et E). Je ne peux donc pas effacer la ligne complète, mais uniquement les élément de la liste (ALigne:BLigne).

Update:J'ai rajouté un exemple simplifié de la liste que je cherche à modifier

C'est d'ailleurs pour ça que j'étais aller pécher la commande suivante à travers l'enregistreur de macro:
Selection.ListObject.ListRows(Ligne).Delete

Avez vous la solution?
 

Pièces jointes

  • Exemple.xls
    20.5 KB · Affichages: 290
  • Exemple.xls
    20.5 KB · Affichages: 315
  • Exemple.xls
    20.5 KB · Affichages: 314
Dernière édition:

Etienne2323

XLDnaute Impliqué
Re : Supprimer une ligne d'une liste, Macro VBA

Salut JulienG,
je comprend mieux votre problème à présent. Je crois que ce que je ferais serait quelque chose comme ceci :

Code:
Dim DerniereLigneRestante as Integer
Code:
Range(Cells(Ligne, 1), Cells(Ligne, 2)).ClearContents
DerniereLigneRestante = Cells(Ligne + 1, 1).End(xlDown).Row
Range(Cells(Ligne + 1, 1), Cells(DerniereLigneRestante, 2)).Cut
Cells(Ligne, 1).Select
ActiveSheet.Paste

De cette manière, on ne supprime pas de ligne et on conserve le format de la liste.

Vous pouvez faire le test et me donnez vos impressions.

Cordialement,

Étienne
 

Discussions similaires

Statistiques des forums

Discussions
312 226
Messages
2 086 414
Membres
103 204
dernier inscrit
alaa20dine01