Problème de macro VBA
RésoluRemi2236 Messages postés 86 Date d'inscription Statut Membre Dernière intervention -
Bonjour la communauté,
Je viens vers vous concernant un problème sur une macro. J'explique le but de la macro.
Dans la feuille nommée "Suivi_du_courrier", j'ai un tableau nommé "Tableau1" pour le suivi du courrier départ. dans la colonne A de ce tableau, il y a l'ordre du courrier envoyé qui va de 1 à l'infini. Je souhaite pouvoir, à l'aide d'un bouton, pouvoir supprimer une ligne par rapport au numéro d'envoi.
Pour cela, j'ai fait un UserForm nommé "userForm2" qui contient une TextBox nommée "TextBox1" et un bouton de commande nommé "CommandButton1". Le personnel inscrit le numéro de la ligne à supprimer dasn la TextBox1 et clique sur le CommandButton1 et cela doit supprimer la ligne qui correspond en colonne A ç la valeur de la TextBox1.
Je souhaite donc que la macro :
1) sélectionne la ligne du tableau correspondant à la valeur dans la TextBox1 dans la colonne A
2) supprime cette ligne
3) recalcule la valeur des cellules en colonne A pour que ces valeurs soient toujours de +1 par rapport à la cellule située au dessus : exemple, si l'ordre est de 1, 2, 3, 4 si je supprime la ligne correspondant au chiffre 2, pas que cela fasse 1, 3, 4 mais 1, 2, 3 (que le calcule se refasse)
J'ai écris ça mais cela me mets "L'indice n'appartient pas à la sélection :
Private Sub CommandButton1_Click() Dim ws As Worksheet Dim tbl As ListObject Dim foundCell As Range Dim selectedRow As ListRow Dim i As Integer ' Spécifiez la feuille et le tableau Set ws = ThisWorkbook.Sheets("Suivi_du_courrier") Set tbl = ws.ListObjects("Tableau1") ' Cherche la valeur dans la TextBox1 dans la colonne A Set foundCell = tbl.ListColumns("Colonne1").DataBodyRange.Find(Val(TextBox1), LookIn:=xlValues) If Not foundCell Is Nothing Then ' Sélectionne la ligne correspondante Set selectedRow = tbl.ListRows(foundCell.row - tbl.ListRows(1).Range.row + 1) ' Supprime la ligne sélectionnée selectedRow.Delete ' Récalcule les valeurs de la colonne A For i = 2 To tbl.ListRows.Count tbl.ListRows(i).Range.Cells(1, 1).Value = IIf(i = 2, 1, tbl.ListRows(i - 1).Range.Cells(1, 1).Value + 1) Next i Else MsgBox "La valeur spécifiée n'a pas été trouvée dans la colonne A.", vbExclamation End If End Sub
Si l'un de vous peut me débloquer la situation se serait très gentil.
Cdlt,
Rémi
- Problème de macro VBA
- Telecharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Télécharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Jitbit macro recorder - Télécharger - Confidentialité
- Excel compter cellule couleur sans vba - Guide
- Macro word - Guide
1 réponse
Bonjour,
Par rapport à ce que vous présentez, je vois une façon plus simple de renuméroter
Par ailleurs, il serait plus sûr d'ajouter dans votre "Find" , le paramètre de recherche complète, notamment en cas de tri de votre tableau.
Private Sub CommandButton1_Click() Dim ws As Worksheet Dim tbl As ListObject Dim foundCell As Range Dim selectedRow As ListRow Dim i As Integer ' Spécifiez la feuille et le tableau Set ws = ThisWorkbook.Sheets("Suivi_du_courrier") Set tbl = ws.ListObjects("Tableau1") ' Cherche la valeur dans la TextBox1 dans la colonne A Set foundCell = tbl.ListColumns("Colonne1").DataBodyRange.Find(Val(TextBox1), LookIn:=xlValues, LookAt:=xlWhole) If Not foundCell Is Nothing Then ' Sélectionne la ligne correspondante Set selectedRow = tbl.ListRows(foundCell.Row - tbl.HeaderRowRange.Row) ' Supprime la ligne sélectionnée selectedRow.Delete ' Tri selon les valeurs de la colonne A With tbl .Range.Sort key1:=.ListColumns(1), Order1:=xlAscending, Header:=xlGuess End With ' Récalcule les valeurs de la colonne A For i = 1 To tbl.ListRows.Count tbl.ListRows(i).Range.Cells(1, 1).Value = i Next i Else MsgBox "La valeur spécifiée n'a pas été trouvée dans la colonne A.", vbExclamation End If End Sub
Bonjour,
ça fonctionne très bien merci ! Je viens de percuter avec votre ajout de code que j'ai mis
ListColumns("Colonne1")
au lieu de
ListColumns(1)
Du coup ça marche beaucoup mieux...Merci du coup de main !
Cdlt
Rémi