Salut Aliasoneet le forum
Changer le type de boucle ne changera pas le problème
Ta macro
Private Sub CommandButton1_Click()
Dim Donnee As String
Donnee = ComboBox1.Value
Donnée = valeur de ta combobox => serait sans doute préférable de lancer le code en cas de changement de ta combobox1
Sheets("Principal").Range("B2").Select
Cellule active = B2 de "Principal" => comme tu travaille avec des Select/Activecell (beurk) ta feuille active doit obligatoirement être la feuille "Principal" => pas besoin de la mentionnée
Si tes bouton/combobox1 ne sont pas sur la feuille "Principal", il faut l'activer avant
While ActiveCell.Value <> Donnee
ActiveCell.Offset(1, 0).Range("A1").Select
Wend
Ta boucle : tant que la cellule active est différente de combobox1, on passe à la ligne supérieure et on boucle. Si cellule active= Combobox1, on sort
Selection.EntireRow.Delete
End Sub
et on efface la ligne.
Mes remarques sur ta macro :
- ne supprime qu'une unique occurence (la première à partir de B2
- utilise des Select/Activecell :
- -- seule la feuille concernée peut être utilisée.
- -- ton code est ralenti
- -- s'il n'existe aucune valeur en B égale à Combobox1, tu vas parcourir toute la colonne B, avant de déclarer une erreur de ligne trop grande
- ActiveCell.Offset(1, 0).Range("A1").Select : selectionner la cellule A1 de la plage cellule active décalée de 1 ligne => ActiveCell.Offset(1, 0).Select donne le même résultat
A+
EDIT :Salut Banzai64. Pas réveillé à cette heure ?
B2 = vide => je sorts ? Pas tout compris (mais je me base sur le code, pas sur "l'explication")