Supression de lignes en vba (via usf)

Résolu
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).


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 :)

5 réponses

f894009 Messages postés 17277 Date d'inscription   Statut Membre Dernière intervention   1 713
 
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
1
lermite222 Messages postés 8724 Date d'inscription   Statut Contributeur Dernière intervention   1 191
 
Bonjour,
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.
1
remy424242
 
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.
0
f894009 Messages postés 17277 Date d'inscription   Statut Membre Dernière intervention   1 713
 
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+
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
remy424242
 
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à ?!...
0