XL 2016 supprimer une plage de cellules avec la combobox

Goose

XLDnaute Occasionnel
Bjr,
suivant l'userform joint, j'aimerai supprimer une ligne de joueur avec la combobox mais sans supprimer les numéros de la colonne A ?
une idée de code ?
merci d'avance
bye
 

Pièces jointes

  • CompoEquipe.xlsm
    28.2 KB · Affichages: 6

Hasco

XLDnaute Barbatruc
Repose en paix
Bonjour,

Dans le fichier joint, j'utilise l'équivalent de la fonction EQUIV en vba pour trouver la ligne à supprimer.
Et puisque vous utilisez un tableau structuré, autant se servir de ses facilités pour trouver les bonnes plages.
VB:
Private Sub CommandButtonSupprimer_Click()
    Dim idx As Variant
    If CB_SuppJoueur.Value <> "" Then
        With Sheets("Joueurs").Range("Tableau1[#Data]")
            idx = Application.Match(CB_SuppJoueur.Value, .Columns(2), 0)
            If Not IsError(idx) Then .Rows(idx).Delete xlShiftUp
        End With
        CB_SuppJoueur = ""
    Else
        MsgBox ("Veuillez sélectionner un joueur dans la liste")
    End If
End Sub

cordialement
 

Pièces jointes

  • CompoEquipe.xlsm
    33.1 KB · Affichages: 4

Hasco

XLDnaute Barbatruc
Repose en paix
Re,

@ChTi160 Il me semble que c'est .Rows(idx) qui fait référence aux tableau et non à la feuille entière comme le fait Row(idx) sans le point !

Et en général je teste avant de poster ! Par contre visiblement vous ne l'avez pas fait.

Alors bonne continuation
 

Hasco

XLDnaute Barbatruc
Repose en paix
Re,

Le même code commenté
VB:
Private Sub CommandButtonSupprimer_Click()
   ' idx qui contiendra le résultat de la fonction MATCH (EQUIV) doit être variant car
   ' si la fonction échoue il contiendra une valeur d'erreur : xlErrNa (#N/A dans une cellule) 
   ' si elle réussit idx contiendra le numéro ordinal de la ligne dans les données du tableau (1 à n)
    Dim idx As Variant
  
'  Si on a une valeur pour le combobox
   If CB_SuppJoueur.Value <> "" Then
       'Chercher dans les données du tableau est égal à Tableau1[#Données] dans la feuille de calcul
        With Sheets("Joueurs").Range("Tableau1[#Data]")
            ' On cherche la valeur du combobox dans la deuxième colonne du tableau
            idx = Application.Match(CB_SuppJoueur.Value, .Columns(2), 0)
            ' Si trouvé (idx n'est pas une erreur) alors on supprimer la ligne des données correspondantes.            
            If Not IsError(idx) Then .Rows(idx).Delete xlShiftUp
        End With
        CB_SuppJoueur = ""
    Else
        MsgBox ("Veuillez sélectionner un joueur dans la liste")
    End If
End Sub

Le point de .Rows nous indique qu'on est toujours dans le tableau de données, qu'il s'agit d'une de ces lignes. Grâce à la Structure With...End With .Rows(idx) est équivalent à :

Sheets("Joueurs").Range("Tableau1[#Data]").Rows(idx)

Cordialement
 

ChTi160

XLDnaute Barbatruc
Re
Je Post a partir de mon téléphone
Excuses.
J'ai mal interprété ce passage.
mais sans supprimer les numéros de la colonne A ?
J'ai pensé que
VB:
 .Rows(idx).Delete xlShiftUp
supprimé toute la ligne et donc le numéro présent en colonne "A"
Donc la colonne où se trouve le numéro n'est pas effacé et c'est l'essentiel puisque c'était la demande .
' si elle réussit idx contiendra le numéro ordinal de la ligne dans les données du tableau (1 à n)
Merci de cette mise au point.
Bonne continuation
Jean marie
 
Dernière édition:

ChTi160

XLDnaute Barbatruc
Re
Histoire de participer , même si le Sujet est résolu ! Lol
Ma contribution , une adaptation du Code @Hascot
Cordialement
Jean marie
 

Pièces jointes

  • CompoEquipe Chti160.xlsm
    34 KB · Affichages: 4
Dernière édition:

Discussions similaires

Réponses
9
Affichages
233

Membres actuellement en ligne

Aucun membre en ligne actuellement.

Statistiques des forums

Discussions
312 816
Messages
2 092 361
Membres
105 378
dernier inscrit
y07