Problème macro suppression de ligne

Bonjour à tous,

J'ai créer une base sur excel avec des articles, chaque article est désigné avec un numéro qui est généré automatiquement à l'ajout de celui-ci (ce num ce situe dans la colonne A) et il s’incrémente au fur et à mesure qu'on ajoute un article. Je souhaiterai créer une macro qui me permet de saisir le n° de l'article que je souhaite supprimer, une fois saisie, la macro ira rechercher ce numéro d'article dans la colonne A et supprimera la ligne. J'ai essayé plusieurs code mais cela ne marche pas, voici ou j'en suis actuellement je n'arrive pa à voir ce qui bug :

Private Sub BTN_Supprimer_article_Click() Dim i As Integer Dim Supprimer As String Supprimer = InputBox("Veuillez taper le numéro d'article que vous souhaitez supprimer", "SUPPRESSION") With ThisWorkbook.Sheets("Source") For i = .Range("A" & .Rows.Count).End(x1Up).Row To 2 Step -1 If Range("A" & i).Value = Supprimer Then Rows(i).Delete End If Next i End With End Sub

En vous remerciant d'avance,

Bonjour,

Si je comprends bien ... tu es en train d'apprendre VBA ...

Dans le cas que tu présentes ... le choix de la boucle pour supprimer une seule ligne n'est pas adapté ...

Tu as intérêt à utiliser la procédure Find ... qui va directement à la ligne concernée ...

Si tu as des difficultés ... il ne faut pas hésiter à revenir ....

Yes en effet, je suis actuellement en plein apprentissage de VBA! Je ne connaissais pas cette procédure, aurais tu un exemple d'utilisation de celle ci stp ?

Re,

La dernière macro que j'ai proposée cet après-midi pour une recherche pourrait te servir d'inspiration...

A étudier ....

Bonjour Ledébutantenvba, James007, le forum,

Private Sub BTN_Supprimer_article_Click()

Dim i As Integer, dl As Integer
 Dim Supprimer As String

     Supprimer = InputBox("Veuillez taper le numéro d'article que vous souhaitez supprimer", "SUPPRESSION")

  With ThisWorkbook.Sheets("Source")
     dl = .Range("A" & .Rows.Count).End(xlUp).Row

      Application.ScreenUpdating = False

   For i = dl To 2 Step -1
    If Range("A" & i).Value = Supprimer Then
      Rows(i).Delete
    End If
   Next i
  End With

     Application.ScreenUpdating = True

End Sub
0classeur1.xlsm (18.22 Ko)

@James007:

J'en profite de ce sujet pour satisfaire ma curiosité:

le choix de la boucle pour supprimer une seule ligne n'est pas adapté

Inadaptée car si une seule ligne à supprimer , on boucle inutilement sur toutes les lignes ?

En revanche, si le numéro est utilisé plusieurs fois, la méthode est préférable au "Find" ?

Merci pour ces précisions.

Cordialement,

Salut xorsankukai

Concètement ... Ledébutantenvba ... ce qui est très sympa ...c'est quil l'admet dès le départ ...

Donc pour trouver un Unique élément je voulais simplement qu'il sache que Find va bien plus vite qu'une n'importe quelle boucle ...

Maintenant, si nous devons parler ensemble ... une fois les bases maîtrisées ...

Quelle est LA MEILLEURE méthode ... pour supprimer des records ...?

En fait ... c'est ni l'une ... ni l'autre ...

Pour de très larges bases de données ... et également dès que tu auras ... pas un seul ... mais plusieurs critères de sélection ...

Tu as intérêt à Filter ... et ensuite ... à supprimer la plage des cellules visibles ...

J'espère que cette explication contribue à satisfaire ta curiosité ...

Re,

J'espère que cette explication contribue à satisfaire ta curiosité ...

Merci d'avoir éclairé ma lanterne,

N'étant pas familiarisé avec la méthode find, peux-tu me confirmer que ce code (qui semble opérationnel) est correct ?

Spoiler
Sub BTN_Supprimer_article()

 Dim Supprimer As String, Rng As Range

     Supprimer = InputBox("Veuillez taper le numéro d'article que vous souhaitez supprimer", "SUPPRESSION")

  With ThisWorkbook.Sheets("Source")

     Application.ScreenUpdating = False

     Set Rng = .Columns("A:A").Find(What:=Supprimer, After:=.Range("A1"), SearchOrder:=xlByRows)
      If Rng Is Nothing Then
      Else
          Rng.Rows.Delete
      End If
  End With

     Application.ScreenUpdating = True

End Sub

Amitiés,

@ xorsankukai

Re-Bonjour,

Une toute petite modif ...

Sub BTN_Supprimer_article()
Dim Supprimer As String, Rng As Range
  Supprimer = InputBox("Veuillez taper le numéro d'article que vous souhaitez supprimer", "SUPPRESSION")  
  Application.ScreenUpdating = False
  With ThisWorkbook.Sheets("Source")
     Set Rng = .Columns("A:A").Find(What:=Supprimer, After:=.Range("A1"), SearchOrder:=xlByRows)
     ' Petite modification pour la Suppression de toute la ligne
     If Not Rng Is Nothing Then Rng.EntireRow.Delete
   End With
  Application.ScreenUpdating = True
End Sub

Merci James007, c'est parfait,

Amitiés,

Merci James007, c'est parfait,

Amitiés,

You are more than Welcome ...

Rechercher des sujets similaires à "probleme macro suppression ligne"