XL 2019 VBA - Supprimer une ligne désignée

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

im_Guillaume

XLDnaute Nouveau
Bonjour,

Merci à ce forum qui me sauve décidément la journée,

Voici mon problème :
J'ai une base de données à disposition.
L'utilisateur doit mettre une croix devant la ligne qu'il souhaite supprimer dans l'onglet "Base de données pour modif"
Et le VBA se charge de le faire dans l'onglet "BDDsource" lorsqu'il appuie sur le bouton :

Voici mon code (boucle), qui bug et plante excel (car elle doit rester ouverte?) :

Sub Supprimer()

Dim i As Integer
i = 5

While i < Sheets("BDDsource").Range("C5").CurrentRegion.End(xlDown).Row 'i va du début (5) à la fin (l'indice de la dernière ligne de la liste)
If Sheets("Base de données pour modif").Cells(i, 2) = "x" Then
Sheets("BDDsource").Rows(i).EntireRow.Delete
i = i + 1
End If
Wend

End Sub


Merci beaucoup pour votre aide!
 

Pièces jointes

Bonjour Guillaume, bonjour le forum,

Quand on supprime plusieurs lignes dans un tableau, il faut toujours faire une boucle inversée en commençant par la fin.De plus, si tu ne supprimes que la ligne de l'onglet BDDsource, lors de la prochaine suppression tu n'auras plus de concordance entre les deux tableaux. D'ailleurs je me demande pourquoi 2 tableaux ?!...
Une proposition :

VB:
Sub Supprimer()
Dim OS As Worksheet 'déclare la variable OS (Onglet Source)
Dim OD As Worksheet 'déclare la variable OS (Onglet Destination)
Dim DL As Integer 'déclare la variable DL (Dernière Ligne)
Dim I As Integer 'déclare la variable I (Incrément)

Set OS = Worksheets("Base de données pour modif") 'définit l'onglet source OS
Set OD = Worksheets("BDDsource") 'définit l'onglet destination OD
DL = OS.Cells(Application.Rows.Count, "B").End(xlUp).Row 'définit la dernière ligne éditée DL de la colonne B de l'onglet OS
For I = DL To 5 Step -1 'boucle inversée : de DL à 5 en remontnant
    If OS.Cells(I, "B") = "x" Then 'condition : si la cellule ligne I colonne B de l'onglet OS vaut "x"
        OD.Rows(I).EntireRow.Delete 'supprime la ligne I de l'onglet OD
        'supprime la ligne I de l'onglet OS (il me semble sinon tu n'auras plus de correspondance entre les deux onglets)
        OS.Rows(I).EntireRow.Delete
    End If 'fin de la condition
Next I 'prochaine ligne de la boucle
End Sub
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
3
Affichages
582
Réponses
7
Affichages
796
  • Question Question
Microsoft 365 macro vba sumifs
Réponses
5
Affichages
629
Réponses
3
Affichages
896
Retour