VBA Excel macro
Résolu
olive60
Messages postés
253
Date d'inscription
Statut
Membre
Dernière intervention
-
olive60 Messages postés 253 Date d'inscription Statut Membre Dernière intervention -
olive60 Messages postés 253 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
En colonne C, j'ai une liste de nom.
En cellule B1, j'ai une liste déroulante avec des noms.
Je souhaite que quand je sélectionne un nom en B1, toutes les lignes dont le nom en colonne C ne correspond pas au nom choisi dans B1 soient effacées.
Le souci est que mon code fonctionne "à moitié". En effet, il faut que je le relance plusieurs fois pour qu'il efface toutes les lignes pertinentes. si je ne lance qu'une fois il y a des "oublis".
Bizarre non?
Voici mon code:
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
Dim ligne As Long
If MsgBox("Did you choose the right Member? Click YES only if you are sure of it." & Chr(10) & Chr(10) & "Other Projects not associated to you Member name will be definitively deleted", vbOKCancel, "JOINT") = vbCancel Then GoTo EXITER
For ligne = 3 To 1400
If Range("c" & ligne).Value <> Range("B1").Value And Range("c" & ligne).Value <> "" Then Range("c" & ligne).EntireRow.Delete
Next ligne
EXITER:
Application.EnableEvents = True
End Sub
En colonne C, j'ai une liste de nom.
En cellule B1, j'ai une liste déroulante avec des noms.
Je souhaite que quand je sélectionne un nom en B1, toutes les lignes dont le nom en colonne C ne correspond pas au nom choisi dans B1 soient effacées.
Le souci est que mon code fonctionne "à moitié". En effet, il faut que je le relance plusieurs fois pour qu'il efface toutes les lignes pertinentes. si je ne lance qu'une fois il y a des "oublis".
Bizarre non?
Voici mon code:
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
Dim ligne As Long
If MsgBox("Did you choose the right Member? Click YES only if you are sure of it." & Chr(10) & Chr(10) & "Other Projects not associated to you Member name will be definitively deleted", vbOKCancel, "JOINT") = vbCancel Then GoTo EXITER
For ligne = 3 To 1400
If Range("c" & ligne).Value <> Range("B1").Value And Range("c" & ligne).Value <> "" Then Range("c" & ligne).EntireRow.Delete
Next ligne
EXITER:
Application.EnableEvents = True
End Sub
A voir également:
- VBA Excel macro
- Telecharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Liste déroulante excel - Guide
- Word et excel gratuit - Guide
- Déplacer colonne excel - Guide
- Si ou excel - Guide
3 réponses
Re-
Fait ta boucle à l'envers :
For ligne = 1400 to 3 step -1
Quand on supprime des lignes, mieux vaux procéder comme cela pour qu'excel n'en loupe pas une au passage. En effet, la suppression fait remonter tes données...
Fait ta boucle à l'envers :
For ligne = 1400 to 3 step -1
Quand on supprime des lignes, mieux vaux procéder comme cela pour qu'excel n'en loupe pas une au passage. En effet, la suppression fait remonter tes données...