XL 2016 supprimer une plage de cellules avec la combobox

  • Initiateur de la discussion Initiateur de la discussion Goose
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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

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

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
 
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
 
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:
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
40
Affichages
1 K
Réponses
10
Affichages
453
  • Question Question
Autres Code VBA
Réponses
11
Affichages
251
Réponses
17
Affichages
411
Réponses
10
Affichages
163
Retour