Bonjour à tous !
Je suis en plein dans la finalisation d'un classeur excel pour aider d'autres personnes à organiser l'écriture de leurs romans. J'ai un léger problème sur une de mes macros qui vise à supprimer une fiche personnage créee par l'utilisateur. Tout ce passe bien sur 90% de la macro, sauf à un moment tout bête. Dans une de mes feuilles, j'ai un tableau avec la liste des fiches personnages que l'utilisateur a créé (ce tableau m'est utile pour créer des validations de données en liste, mais là n'est pas le souci). Je vous joints une photo du tableau (Tableau 3 qui se trouve dans la feuille "Liste personnage", sachant que l'utilisateur appuie sur un bouton déclenchant la macro dans la feuille "Personnages").
Voici le code dans son intégralité qui marche :
Donc, quand l'utilisateur appuie sur la macro pour supprimer la fiche personnage, la feuille correspondante se supprime sans souci et dans le cas où le nom de la fiche personnage (dans le tableau 3) se trouve en première position, je n'ai également aucun problème, la ligne correspondante se supprime parfaitement. Mais, dans le cas où le nom de ma fiche personnage se trouve un peu plus bas dans le tableau (par exemple en ligne 3 ou 4), ce sont toutes les lignes au dessus de lui et lui compris qui sont supprimés et non seulement lui. Mais par contre, le reste de la macro fonctionne bien.
Voici en particulier, le bout du code qui ne marche pas lorsque la donnée recherchée n'est pas la première du tableau :
Pouvez-vous m'aidez à comprendre ce qui ne va pas ? Je suis encore une novice sur vba. Merci d'avance !
Je suis en plein dans la finalisation d'un classeur excel pour aider d'autres personnes à organiser l'écriture de leurs romans. J'ai un léger problème sur une de mes macros qui vise à supprimer une fiche personnage créee par l'utilisateur. Tout ce passe bien sur 90% de la macro, sauf à un moment tout bête. Dans une de mes feuilles, j'ai un tableau avec la liste des fiches personnages que l'utilisateur a créé (ce tableau m'est utile pour créer des validations de données en liste, mais là n'est pas le souci). Je vous joints une photo du tableau (Tableau 3 qui se trouve dans la feuille "Liste personnage", sachant que l'utilisateur appuie sur un bouton déclenchant la macro dans la feuille "Personnages").
Voici le code dans son intégralité qui marche :
VB:
Sub DelPerso()
Dim i As Integer
Dim wb As Workbook
Set wb = ActiveWorkbook
Set wh = Worksheets(ActiveSheet.Name)
Sheets("Personnages").Select
If wh.Range("D29").Value <> "" Then
Sheets("Personnages").Select
Range("D30").Select
Selection.Copy
Range("D31").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.DisplayAlerts = False
Worksheets(Range("D31").Value).Delete
Application.DisplayAlerts = True
Sheets("Liste personnage").Select
With ThisWorkbook.Sheets("Liste personnage")
For i = .Range("E" & .Rows.Count).End(xlUp).Row To 2 Step -1
'je travaille sur la colonne E car mes feuilles correspondant aux fiches personnages sont nommées d'après E
'Rows.count permet de retourner le nombre de ligne de la plage range
If .Range("E" & i).Value = Sheets("Personnages").Range("D31").Value Then
Range("A" & i & ": E" & i).Select
Selection.ListObject.ListRows(1).Delete
End If
Next i
End With
Sheets("Personnages").Select
Range("D29").Select
Selection.ClearContents
Else
Sheets("Personnages").Select
Range("D29").Select
MsgBox "Indique le nom du personnage ou de la fiche personnage que tu souhaites supprimer."
End If
End Sub
Donc, quand l'utilisateur appuie sur la macro pour supprimer la fiche personnage, la feuille correspondante se supprime sans souci et dans le cas où le nom de la fiche personnage (dans le tableau 3) se trouve en première position, je n'ai également aucun problème, la ligne correspondante se supprime parfaitement. Mais, dans le cas où le nom de ma fiche personnage se trouve un peu plus bas dans le tableau (par exemple en ligne 3 ou 4), ce sont toutes les lignes au dessus de lui et lui compris qui sont supprimés et non seulement lui. Mais par contre, le reste de la macro fonctionne bien.
Voici en particulier, le bout du code qui ne marche pas lorsque la donnée recherchée n'est pas la première du tableau :
Code:
With ThisWorkbook.Sheets("Liste personnage")
For i = .Range("E" & .Rows.Count).End(xlUp).Row To 2 Step -1
'je travaille sur la colonne E car mes feuilles correspondant aux fiches personnages sont nommées d'après E
'Rows.count permet de retourner le nombre de ligne de la plage range
If .Range("E" & i).Value = Sheets("Personnages").Range("D31").Value Then
Range("A" & i & ": E" & i).Select
Selection.ListObject.ListRows(1).Delete
End If
Next i
End With
Pouvez-vous m'aidez à comprendre ce qui ne va pas ? Je suis encore une novice sur vba. Merci d'avance !