Supression de lignes en vba (via usf)
Résolu
remy424242
-
remy424242 -
remy424242 -
Bonjour, j'ai fais un userform, pour effacer une ligne dans mon classeur, avec une textbox et un combobox où l'utilisateur aurait juste à rentrer le nom de la feuille où il souhaite effacer la ligne ( choix de la feuille via le combobox) et rentrer le numéro de la ligne dans la textbox.
J'ai donc fais le code ci-dessous pour permettre ceci. Cependant, il ne fonctionne pas mais ne bug pas non plus. Voilà donc bien un souci pour pouvoir le faire fonctionner s'il ne détecte pas d'erreur. En effet, lorsque je lance la procédure, je rentre la feuille, le numéro de ligne, click sur terminer pour exécuter et fermer l'userform et l'userform se ferme sans me renvoyer d'erreur et sans pour autant avoir supprimé quoi que se soit.
J'ai beau relire mon code, je ne vois pas ce que je fais mal (rien apparement puisqu'il ne me signale aucun souci).
Un peu d'aide serait la bienvenue :)
J'ai donc fais le code ci-dessous pour permettre ceci. Cependant, il ne fonctionne pas mais ne bug pas non plus. Voilà donc bien un souci pour pouvoir le faire fonctionner s'il ne détecte pas d'erreur. En effet, lorsque je lance la procédure, je rentre la feuille, le numéro de ligne, click sur terminer pour exécuter et fermer l'userform et l'userform se ferme sans me renvoyer d'erreur et sans pour autant avoir supprimé quoi que se soit.
J'ai beau relire mon code, je ne vois pas ce que je fais mal (rien apparement puisqu'il ne me signale aucun souci).
Dim a As String, b As String, cherche1 as string a = Workbooks("GMAO.xls").Worksheets("machines").Cells(2, 1) 'historique des pannes b = Workbooks("GMAO.xls").Worksheets("machines").Cells(3, 1) 'stock If ComboBox_nom.Value = "" Then MsgBox ("aucune page choisie"): Beep TextBox_sup.SetFocus ElseIf TextBox_sup.Value = "" Then MsgBox ("aucune ligne saisie"): Beep Else cherche1 = TextBox_sup.Value If ComboBox_nom.Value = a Then Worksheets("historique des pannes").Select With Workbooks("GMAO.xls").Worksheets("historique des pannes").Range("E8:E65536") Set e = .Find(cherche1, LookIn:=xlValues) If Not e Is Nothing Then firstAddress = e.Address e.Rows.Select Selection.Delete Shift:=xlUp End If End With ElseIf ComboBox_nom.Value = b Then Worksheets("stock").Select With Workbooks("GMAO.xls").Worksheets("stock").Range("E12:E65536") Set e = .Find(cherche1, LookIn:=xlValues) If Not e Is Nothing Then firstAddress = e.Address e.Rows.Select Selection.Delete Shift:=xlUp End If End With End if
Un peu d'aide serait la bienvenue :)
A voir également:
- Supression de lignes en vba (via usf)
- Partage de photos en ligne - Guide
- Mètre en ligne - Guide
- Formulaire en ligne de meta - Guide
- Site de vente en ligne particulier - Guide
- Excel trier par ordre alphabétique en gardant les lignes - Guide
5 réponses
Bonjour,
J'ai teste votre code: il fait ce qui est prevu (il manque un end if du au copier/coller je suppose, cela ferait une erreur s'il manquait reelement)
Vous pouvez le simplifie dans cette partie:
If ComboBox_nom.Value = a Then
With Worksheets("historique des pannes").Range("E8:E65536")
Set e = .Find(cherche1, LookIn:=xlValues)
If Not e Is Nothing Then
e.Rows.Delete Shift:=xlUp
End If
End With
ElseIf ComboBox_nom.Value = b Then
With Worksheets("stock").Range("E12:E65536")
Set e = .Find(cherche1, LookIn:=xlValues)
If Not e Is Nothing Then
e.Rows.Delete Shift:=xlUp
End If
End With
End If
Vous pouvez mettre un ou plusieurs points d'arret pour verifier que vos variables sont bien affectees.
Bonne suite
J'ai teste votre code: il fait ce qui est prevu (il manque un end if du au copier/coller je suppose, cela ferait une erreur s'il manquait reelement)
Vous pouvez le simplifie dans cette partie:
If ComboBox_nom.Value = a Then
With Worksheets("historique des pannes").Range("E8:E65536")
Set e = .Find(cherche1, LookIn:=xlValues)
If Not e Is Nothing Then
e.Rows.Delete Shift:=xlUp
End If
End With
ElseIf ComboBox_nom.Value = b Then
With Worksheets("stock").Range("E12:E65536")
Set e = .Find(cherche1, LookIn:=xlValues)
If Not e Is Nothing Then
e.Rows.Delete Shift:=xlUp
End If
End With
End If
Vous pouvez mettre un ou plusieurs points d'arret pour verifier que vos variables sont bien affectees.
Bonne suite
Bonjour,
Essaye avec ce code...
A+
Edit: te relisant je vois que tu agit sur différent classeurs, il faudrait une petite modif si oui.
Tu dis.
Si tu te cognes à un pot et que ça sonne creux, c'est pas forcément le pot qui est vide. ;-)(Confucius)
NOTE : Je ne répond pas aux MP pour les questions techniques.
Essaye avec ce code...
Option Explicit Private Sub CommandButton1_Click() If ComboBox_nom.Text = "" Then MsgBox ("aucune page choisie"): Beep TextBox_sup.SetFocus ElseIf TextBox_sup.Value = "" Then MsgBox ("aucune ligne saisie"): Beep Else If MsgBox("confirmation suppression ligne " & TextBox_sup.Value & " de la feuille " & ComboBox_nom.Text) = 1 Then Sheets(ComboBox_nom.Text).Rows(TextBox_sup.Text).Delete End If End If End Sub Private Sub UserForm_Initialize() Dim i As Integer For i = 1 To Sheets.Count 'ici éventuellement tester des feuilles qui ne doivent pas êtres présente. ComboBox_nom.AddItem Sheets(i).Name Next i End Sub
A+
Edit: te relisant je vois que tu agit sur différent classeurs, il faudrait une petite modif si oui.
Tu dis.
Si tu te cognes à un pot et que ça sonne creux, c'est pas forcément le pot qui est vide. ;-)(Confucius)
NOTE : Je ne répond pas aux MP pour les questions techniques.
oui il manque un end if, c'est juste du au copier/coller. Mon code réelle possède bien plus de feuilles, j'ai mis seulement les 2 premiers paragraphes pour l'exemple (d'où le manque d'une END IF).
Après oui il y a des simplifications, j'ai un peu détaillé mes actions du fait que cela ne fonctionne pas chez moi pour voir si ca venait de la synthaxe...j'ai changé pour mettre votre synthaxe, cependant j'ai pas + d'effet qu'avant ( j'ai néanmoins garder mes lignes où je précise le classeur, la feuille etc...). Je vais essayer en les enlevants.
Après oui il y a des simplifications, j'ai un peu détaillé mes actions du fait que cela ne fonctionne pas chez moi pour voir si ca venait de la synthaxe...j'ai changé pour mettre votre synthaxe, cependant j'ai pas + d'effet qu'avant ( j'ai néanmoins garder mes lignes où je précise le classeur, la feuille etc...). Je vais essayer en les enlevants.
Re,
La simplification du code est pour enlever le superflu. Si chez moi votre code marche, il doit marcher chez vous!
Avez vous essayez les points d'arret?? Pour verifier vos variables cherche1 et autres
A+
La simplification du code est pour enlever le superflu. Si chez moi votre code marche, il doit marcher chez vous!
Avez vous essayez les points d'arret?? Pour verifier vos variables cherche1 et autres
A+
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Avec les points d'arrets, je n'ai eu aucun problème, rien d'anormal. J'ai testé la solution de lermite222 et elle fonctionne parfaitement. A adapter aux besoins bien entendu si ceux ci sont plus précis mais ça fonctionne. Même si le mystère persiste, je vais marquer le sujet comme résolu. J'utilise excel 2003 pour ma part, est-ce que le fait que mon code fonctionne chez vous et pas chez moi vient de là ?!...