XL 2010 Fonction pour supprimer ligne

Nicodemius

XLDnaute Nouveau
Bonjour à tous.
Une fois de plus j'en appel à la communauté.
Mais là, j'ai réellement besoin d'aide.

J'ai créé 2 fonctions ; la première me permet de trouver une ligne en fonction d'une valeur recherchée. La seconde a pour but de la supprimer.
Ici, c'est la seconde qui me pose problème
J'ai beau tout essayer, pas moyen de supprimer cette foutue ligne.
J'ai trituré mon code dans tous les sens mais rien n'y fait.
Si quelqu'un avait une idée, je lui en serait vraiment reconnaissant.
De mon coté, je commence vraiment à désespérer.

Voici le code de mes fonctions :

VB:
Public Function SuppLigne(MyVal As String, NomFeuille As String) As Boolean
'Fonction utilisée pour supprimer une ligne dans une feuille Excel.
'Utilisé conjointement avec [TrouveLigne] afin de récupérer le numéro de la ligne à supprimer.

Dim Ws As Worksheet     'Réf à la feuille de calcul
Dim Plage As Range

Set Ws = ThisWorkbook.Sheets(NomFeuille)

'If (TrouveLigne(MyVal, NomFeuille)) <> 0 Then
'    Set plage = Ws.Cells(TrouveLigne(MyVal, NomFeuille)).EntireRow.Select
'    Selection.Delete Shift:=xlUp
'    SuppLigne = True
'End If

If (TrouveLigne(MyVal, NomFeuille)) <> 0 Then
    Ws.Cells((TrouveLigne(MyVal, NomFeuille)), 1).EntireRow.Delete Shift:=xlUp
'    Ws.Rows(TrouveLigne(MyVal, NomFeuille)).EntireRow.Delete Shift:=xlUp
    SuppLigne = True
End If

Set Plage = Nothing
Set Ws = Nothing

End Function


Public Function TrouveLigne(MyVal As String, NomFeuille As String) As Long
'Fonction chargée de récupérér le Numéro de ligne en rapport avec la valeur recherchée.

Dim Ws As Worksheet     'Réf à la feuille de calcul
Dim MyRange As Range    'Réf à la plage de cellules
Dim MyCell As Range     'Réf à la cellule recherchée

Dim Lng_LastRow As Long     'dernière Ligne
Dim Lng_LastCol As Long     'dernière colonne

'On définit la plage de cellule sur laquelle va s'effectuer la recherche
Set Ws = ThisWorkbook.Sheets(NomFeuille)
Lng_LastRow = Ws.Range("A" & Rows.Count).End(xlUp).Row
Lng_LastCol = Ws.Cells(1, Cells.Columns.Count).End(xlToLeft).Column

'Si le tableau est vide on quitte la procédure.
'Attention, le tableau contient 1 ligne d'en-tête
If Lng_LastRow <= 1 Then
    Set Ws = Nothing
    Exit Function
End If

TrouveLigne = 0

Set MyRange = Ws.Range(Cells(1, 1), Cells(Lng_LastRow, Lng_LastCol))
Set MyCell = MyRange.Find(What:=MyVal, LookIn:=xlValues, LookAt:=xlWhole)

If MyCell Is Nothing Then Exit Function
TrouveLigne = MyCell.Row

Set MyCell = Nothing
Set MyRange = Nothing
Set Ws = Nothing

End Function


J'attends vos réponses avec impatience.
Please Heeeeeelp
 

eriiic

XLDnaute Barbatruc
Bonjour,

tu as bien de la chance que ça fonctionne.
Une fonction, par définition, ne peut et ne doit que retourner une valeur.
(comme a= sin(x) )
En aucun cas elle doit modifier son environnement.
Pour moi c'est plus un bug que vba laisse passer ça et j'aurai moyennement confiance.
eric
 

eriiic

XLDnaute Barbatruc
Cependant elle peut modifier d'autres cellules sur leur format comme leur couleur,ou d'autres actions comme ici.
C'est une anomalie dont certains profitent oui, mais ça ne répond pas à la définition d'une fonction.
Pourquoi est-ce que ça existerait si le rôle était le même qu'un sub ?
Un sub effectue des actions, une fonction retourne une valeur (ou un tableau) et c'est son seul rôle et but de son existence.
eric
 

Discussions similaires

Statistiques des forums

Discussions
312 104
Messages
2 085 332
Membres
102 864
dernier inscrit
abderrashmaen