| Par lazarojule, le 15 Sep 2005, 09:02 |
Revenir en haut de page |
|
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.  |
|
 |
| Par Cédric, le 15 Sep 2005, 10:29 |
Revenir en haut de page |
|
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 |
|
| 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.  |
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 |
|
| 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. |
|
 |