Supprimer ligne

Bonsoir.

Je suis en train de faire une macro qui représente un annuaire.

Sur le fichier Excel, j'ai placé un bouton.

Ce bouton ouvre un userform avec comme choix:

  • ajouter une nouvelle personne
  • Chercher une personne par son nom
  • Quitter le menu
  • Supprimer une personne

Pour chaque option de l'userform, j'ai crée une sous-routine dans le module annuaire.

Seul le module Supprimer ne marche pas.

Avec le bouton supprimer, je veux que quand on rentre le nom dans l'userform, la macro supprime la ligne

entière où il y a ce nom.

Sub supprimer()
    Dim nom As String, i As Integer
    nom = Annu.TextBox1.Value

    For i = 1 To Range("A65000").End(xlUp).Row
        If StrComp(nom, Worksheets(1).Cells(i, 1)) = 0 Then
            MsgBox "la boucle fonctionnne"
            Rows(i & ":" & i).Select
            Selection.Delete shift:=xlUp
        End If

        Exit Sub
    Next i
End Sub

J'ai le pressentiment que c'est la boucle qui ne marche pas, mais pourquoi, je ne le sais pas.

J'ai essayé plusieurs codes avec les indications des forums et de l'enregistreur de macros.

Mais la ligne en question n'est jamais supprimée.

Pouvez-vous me dire ce qui cloche dans ma sous-routine Supprimer, svp ?

Merci.

Au revoir.

35depart.xlsm (24.32 Ko)

Salut,

J'ai fait des essais en supprimant le passage Exit Sub dans ta macro supprimer et il semble que ça fonctionne.

A tester.

Bonne fin de soirée.

Bonsoir

Essaie comme ceci :

Sub supprimer()
Dim nom As String, i As Integer
nom = Annu.TextBox1.Value
On Error Resume Next
i = WorksheetFunction.Match(nom, Range("A2:A" & Range("A" & Rows.Count).End(xlUp).Row), 0) + 1
If i > 0 Then
Rows(i & ":" & i).Delete shift:=xlUp
End If
End Sub

Si ok, n'oublie pas de cliquer sur le V vert pour cloturer le fil

Amicalement

Merci pour les réponses.

J'ai d'abord tenté ce que m'a dit Yvouille mais en gardant le exit sub. Je l'ai déplacé dans la condition et ça marche.

Sub supprimer()
    Dim nom As String, i As Integer
    nom = Annu.TextBox1.Value

    For i = 1 To Range("A65000").End(xlUp).Row
        If StrComp(nom, Worksheets(1).Cells(i, 1)) = 0 Then
            MsgBox "la boucle fonctionnne"
            Rows(i & ":" & i).Select
            Selection.Delete shift:=xlUp
            Exit Sub
        End If

    Next i
End Sub

Mais ce que je ne comprends pas, c'est pourquoi en déplaçant le exit sub ça marche et pas avant (quand il était hors de la boucle).

DAN> Peux tu m'expliquer ce que fait On Error resume next, stp ?

(Même si j'ai la réponse, j'attends un peu avant de cloturer le sujet, car j'ai d'autres questions.)

En étant après la boucle, le Exit Sub faisait qu'après avoir contrôlé ta première occurence, quel qu'était le résultat de ce contrôle If, tu sortais de la macro.

Alors qu'en le déplaçant comme tu la fais, seulement si la condition testée est vraie, tu passes par Exit Sub.

Essaie ta macro pas-à-pas et tu verras bien tout ça .

En supprimant purement et simplement ce Exit Sub, je laissais en fait la macro continuer ses boucles inutilement après que la ligne désirée était supprimée. Mais ça ne mangeait pas de foin.

Ciao

re

DAN> Peux tu m'expliquer ce que fait On Error resume next, stp ?

Si par hasard dans le code le nom que tu as entré dans l'USF n'existe pas dans ta colonne A, i te renverra une erreur. D'où cette instruction.

Le code que je t'ai proposé est à utiliser si tu es sur de ne pas avoir de doublons de nom dans la colonne A. Sinon utilise le tien qui fait une boucle. Change toutefois cette instruction :

Rows(i & ":" & i).Select
Selection.Delete shift:=xlUp

par

Rows(i & ":" & i).Delete shift:=xlUp

Amicalement

Pour le Exit Sub, j'aurais du m'en rendre compte moi même. (on va dire que j'étais fatigué )

Merci aussi à DAN.

Au passage, je sais que sur internet on trouve plein de tutoriels sur VBA, mais par hasard connaîtriez vous pas un où il y a cours, exercices et TP complet, et synthétique.

Merci.

Rechercher des sujets similaires à "supprimer ligne"