Bienvenue sur les forums conseil & création · S'enregistrer

Se connecter automatiquement

Forums » Tableurs et logiciels de gestion (Money, Excel, Open Office...) » Supprimer une ligne avec visual Basic · Envoyer le lien

Par lazarojule, le 15 Sep 2005, 09:02 Revenir en haut de page Répondre en citant

Bonjour,

J'ai un lèger soucis, je voudrai en fait que ma macro supprime une ligne préalablement sélectionner, c'est pourtant simple. Je met mon code de macro:


Code:
Private Sub UserForm_Click()
    Selection.Delete Shift:=xlUp
End Sub



Ma User Form se compose juste d'une fenêtre avec un bouton "OK"(CommandButton1_Click()), et d'une phrase me demandant confirmation de la suppression de la ligne déja sélectionner (c'est moi qui l'ai créé).

En fait au début je voulais mettre une ID pour chacune de mes entrées, et quand je voudrais supprimer une ligne, ma macro me demanderai l'ID à supprimer. J'ai trouvé ça un peu trop dur à mon goût, mais si vous avez le tuyau pour cette solution (si c'est pas trop dur) je suis preneur, sinon je me contenterai de sélectionner ma ligne avant, et d'activer ma macro pour la suppression.

P.S: j'aimerai bien que ça soit Cédric qui me réponde, la dernière fois mon problème de macro c'est réglé super rapidement. Wink
Par Cédric, le 15 Sep 2005, 10:29 Revenir en haut de page Répondre en citant

Salut,

En supposant que l'ID soit dans la colonne A, essaie avec l'une de ces deux fonctions :

Cette première fonction supprime la ligne entièrement... donc l'ID également. Ca permet par exemple de supprimer un produit à partir de son n° de référence.

Code:
Sub Bouton1_QuandClic()
ligne = InputBox("ID de l'entrée", "Suppression", 1)
With Range("A:A")
    Set trouve = .Find(ligne, LookIn:=xlValues, LookAt:=xlWhole)
    If Not trouve Is Nothing Then
        trouve.EntireRow.Select
        Msg = "Supprimer les éléments de la ligne " + Str(Selection.Row) + " ?"
        Response = MsgBox(Msg, vbYesNo, "Confirmation")
        If Response = vbYes Then
            Selection.Delete Shift:=xlUp
        End If
    Else: MsgBox ("Ligne introuvable")
    End If
End With
End Sub


Cette fonction ne supprime que les autres cellules... elle décale donc le n° d'ID à chaque fois. Par exemple en supprimant les éléments de l'ID 5, la ligne ID6 passe à ID5, la ligne ID7 passe à ID6 etc.
Note : dans ce cas il serait tout aussi simple d'utiliser un numéro de ligne (n° de ligne d'Excel) plutôt que de créer une colonne ID. Tout dépend de ce que tu cherches à faire.

Code:
Sub Bouton2_QuandClic()
ligne = InputBox("ID de l'entrée", "Suppression", 1)
With Range("A:A")
    Set trouve = .Find(ligne, LookIn:=xlValues, LookAt:=xlWhole)
    trouve.Select
    If Not trouve Is Nothing Then
        Range(Cells(Selection.Row, 2), Cells(Selection.Row, 5)).Select
        Msg = "Supprimer les éléments de la ligne " + Str(Selection.Row) + " ?"
        Response = MsgBox(Msg, vbYesNo, "Confirmation")
        If Response = vbYes Then
            Selection.Delete Shift:=xlUp
        End If
    End If
End With
End Sub
Par Francky, le 22 Nov 2005, 20:37 Revenir en haut de page Répondre en citant

lazarojule a écrit:
Bonjour,

J'ai un lèger soucis, je voudrai en fait que ma macro supprime une ligne préalablement sélectionner, c'est pourtant simple. Je met mon code de macro:


Code:
Private Sub UserForm_Click()
    Selection.Delete Shift:=xlUp
End Sub



Ma User Form se compose juste d'une fenêtre avec un bouton "OK"(CommandButton1_Click()), et d'une phrase me demandant confirmation de la suppression de la ligne déja sélectionner (c'est moi qui l'ai créé).

En fait au début je voulais mettre une ID pour chacune de mes entrées, et quand je voudrais supprimer une ligne, ma macro me demanderai l'ID à supprimer. J'ai trouvé ça un peu trop dur à mon goût, mais si vous avez le tuyau pour cette solution (si c'est pas trop dur) je suis preneur, sinon je me contenterai de sélectionner ma ligne avant, et d'activer ma macro pour la suppression.

P.S: j'aimerai bien que ça soit Cédric qui me réponde, la dernière fois mon problème de macro c'est réglé super rapidement. Wink


En fait je ne comprends pas bien ton problème.
Si tu as déjà sélectionné ta ligne tu n'as qu'un delete à effectuer.

Rows(i).select
selection.delete

ou mieux

rows(i).delete

i étant le numéro de ta ligne.


Franck
Par Cédric, le 30 Nov 2005, 23:42 Revenir en haut de page Répondre en citant

Franck a écrit:
En fait je ne comprends pas bien ton problème.
Si tu as déjà sélectionné ta ligne tu n'as qu'un delete à effectuer.

Oui, pour supprimer une ligne qu'il a sélectionnée... mais à la fin de son post, il a ajouté :

lazarojule a écrit:
En fait au début je voulais mettre une ID pour chacune de mes entrées, et quand je voudrais supprimer une ligne, ma macro me demanderai l'ID à supprimer.

Par ID, je pense - si j'ai bien compris - qu'il parle d'un champ des données saisies dans le tableur... pas du numéro de ligne.
Donc admettons qu'il veuille supprimer l'entrée ayant pour ID 2512, il veut pouvoir la supprimer en entrant simplement "2512" dans une boite de dialogue. Ce qui lui évite d'avoir à scroller les données du tableur jusqu'à la plus de 2000 lignes. Surtout si les ID ne sont pas classés dans l'ordre croissant, ça n'est pas forcément évident.

Donc à partir de là, un simple script peut rechercher la ligne comportant ce numéro ID et la supprimer rapidement.

Forums » Tableurs et logiciels de gestion (Money, Excel, Open Office...) » Supprimer une ligne avec visual Basic · Envoyer le lien