Supprimer une ligne sous condition

Résolu
Bonjour,

je sais que la question à déjà été posée des dixaines de fois; j'ai fait des tests avec les solutions proposées sur le site, mais je n'arrive à aucun résultat.

Voici ce que j'ai pour l'instant:

La procédure supprime la dernière ligne.

Dim derligne As String
derligne = Range("a65536").End(xlUp).Row
If Cells(derligne + 1, 1).Value = "" Then
Cells(derligne, 1).EntireRow.Delete
End If

Comment utilisé cette même procédure en disant que:

Si Cells.Value est égale au nom ou prénom recherché
activé la cellule et supprimer la ligne.

Dans le cas ou ça peux aider:

Sheets("Liste") - Nb colonnes 9.

TextBox's = Rechercher.Value - Nom.Value - Prénom.Value



--
Sage est celui qui veut apprendre.

1 réponse

  1. Modérateur
    SAlut,
    En fait, la première démarche est de donner à Visual Basic le nom (et/ou le prénom) dont tu souhaites supprimer la ligne.
    Un exemple avec une InputBox :
    Dim result As String
    result = InputBox("Veuillez saisir le nom et/ou le prénom à supprimer :")
    

    Ensuite, rechercher dans la base de données le n° de ligne correspondant :
    Dim Trouve As Range
    Dim i As Integer
    Set Trouve = Sheets("Liste").Columns(1).Cells.Find(result)
    If Trouve Is Nothing Then
            MsgBox "Ce nom n'existe pas dans la base, veuillez le vérifier"
    Else
            i = Sheets("Liste").Columns(1).Cells.Find(result).Row
    End If
    Set Trouve = Nothing

    Ne reste qu'à supprimer cette ligne :
    Cells(i, 1).EntireRow.Delete

    Soit le code complet :
    Sub suppression_lignes()
    Dim result As String
    Dim Trouve As Range
    Dim i As Integer
    
    result = InputBox("Veuillez saisir le nom et/ou le prénom à supprimer :")
    'indiquer à la place du 1 le n° de la colonne ou se trouvent les données à trouver...
    Set Trouve = Sheets("Liste").Columns(1).Cells.Find(result)
    If Trouve Is Nothing Then
            MsgBox "Ce nom n'existe pas dans la base, veuillez le vérifier"
    Else
            i = Sheets("Liste").Columns(1).Cells.Find(result).Row
            Cells(i, 1).EntireRow.Delete
    End If
    
    Set Trouve = Nothing
    End Sub
    

    Attention, comme on utilise Delete, il convient de tester d'abord cette procédure sur une copie du fichier et non sur l'original!!!!!
    0
    1. Bonsoir pijaku,

      Désolé pour le retard.

      Le code est efficace, mais comme j'ai déjà une textbox pour rechercher,
      tu voudrais bien refaire le code sans l'imputbox?
      0
    2. Modérateur
      Salut,
      Bien sur : en gras, à remplacer par le nom de ta textbox
      Sub suppression_lignes()
      Dim Trouve As Range
      Dim i As Integer
      
      'indiquer à la place du 1 le n° de la colonne ou se trouvent les données à trouver...
      Set Trouve = Sheets("Liste").Columns(1).Cells.Find(TextBox1.Value)
      If Trouve Is Nothing Then
              MsgBox "Ce nom n'existe pas dans la base, veuillez le vérifier"
      Else
              i = Sheets("Liste").Columns(1).Cells.Find(result).Row
              Cells(i, 1).EntireRow.Delete
      End If
      
      Set Trouve = Nothing
      End Sub
      

      Tu peux encore mieux faire en remplaçant cette TextBox par une combobox qui listerait les noms contenus dans ta colonne. Ca limite les erreurs de saisie...
      0
    3. Bonjour pijaku,

      Merci d'avoir répondu.

      Et encore merci pour ton aide.

      Juste une petite correction: Cells.Find(result) remplacer par Cells.Find(Trouve).

      J'aurais encore une question.

      J'ai une listbox qui liste les adresses emails dans un autre formulaire.

      Est-il possible que, suite à la recherche elle ne prenne pas en cosidération la personne (adresse email) recherchée?

      A+
      0
    4. Modérateur
      J'ai une listbox qui liste les adresses emails dans un autre formulaire Par formulaire tu entends quoi exactement? UserForm? Comment est complétée ta ListBox? Grâce à son "RowSource"?
      0
    5. Je t'ai envoyer un email avec le fichier.

      A+
      0