Boucles et conditions

Bonjour à tous,

Je cherche à appliquer une condition au code suivant afin que la macro se termine lorsque la variable "Donnee" n'est pas trouvée.

Est-il possible d'appliquer une condition à la boucle While...Wend ou faut-il modifier la boucle en Do...Loop ?

Private Sub CommandButton1_Click()
Dim Donnee As String

Donnee = ComboBox1.Value

Sheets("Principal").Range("B2").Select
    While ActiveCell.Value <> Donnee
        ActiveCell.Offset(1, 0).Range("A1").Select
    Wend
    Selection.EntireRow.Delete
End Sub

Je vous remercie d'avance pour vos réponses,

AliasOne

Bonjour

Pas très claire ta question

Aliasone a écrit :

Je cherche à appliquer une condition au code suivant afin que la macro se termine lorsque la variable "Donnee" n'est pas trouvée.

Ce que j'ai compris

C'est à dire tant que tu trouves la variable "Donnee" tu supprimes la ligne et dès que tu ne la trouves pas tu sors

Private Sub CommandButton1_Click()
Dim Donnee As String

  Donnee = ComboBox1.Value

  With Sheets("Principal")
    Do
      If .Range("B2").Value = Donnee Then
        .Rows(2).Delete
      Else
        Exit Do
      End If
    Loop
  End With
End Sub

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")

Bonjour

Je pense être réveillé

Et je me suis basé (mal) sur l'explication

La question

Aliasone a écrit :

Je cherche à appliquer une condition au code suivant afin que la macro se termine lorsque la variable "Donnee" n'est pas trouvée.

La réponse

On boucle jusqu'à trouver une valeur différente de la variable "donnee"

Où cela pêche ?

Gorfael a écrit :

B2 = vide => je sorts ?

Bien sur parce que la variable "Donnee" n'est pas trouvée

Bonjour Banzai64, bonjour Gorfael

Je vous remercie tous les deux pour vos messages.

Cela m'a permis de trouver une solution!

Meilleures salutations,

AliasOne

Rechercher des sujets similaires à "boucles conditions"