VBA suppression conditionnelle de valeur
Résolu/Fermé
Jle41
Messages postés
3
Date d'inscription
mardi 12 juin 2012
Statut
Membre
Dernière intervention
13 juin 2012
-
12 juin 2012 à 14:18
jle41 - 15 juin 2012 à 15:54
jle41 - 15 juin 2012 à 15:54
A voir également:
- VBA suppression conditionnelle de valeur
- Mise en forme conditionnelle excel - Guide
- Forcer suppression fichier - Guide
- Suppression page word - Guide
- Suppression compte instagram - Guide
- Logiciel gratuit calcul valeur nutritionnelle - Télécharger - Santé & Bien-être
5 réponses
lermite222
Messages postés
8702
Date d'inscription
dimanche 8 avril 2007
Statut
Contributeur
Dernière intervention
22 janvier 2020
1 190
12 juin 2012 à 23:09
12 juin 2012 à 23:09
Bonjour,
Si je comprend bien, Unité 1 est obsolète et tu voudrais le supprimer ?
A+
Si je comprend bien, Unité 1 est obsolète et tu voudrais le supprimer ?
A+
Jle41
Messages postés
3
Date d'inscription
mardi 12 juin 2012
Statut
Membre
Dernière intervention
13 juin 2012
13 juin 2012 à 09:19
13 juin 2012 à 09:19
Bonjour lermite222, et merci de ton aide!
En fait il ne faut rien supprimer (en aucun cas supprimer les lignes) car j'en aurai besoin pour avoir l'effectif de l'entreprise. Par contre, il faudra rendre égales à 0 ou "" les cellules de certains code poste en doublon. Le code poste de untel1 doit être garder car c'est le plus ancien, par contre Untel3 possède le même code poste (donc doublon), suite à un remplacement temporaire. Il faut donc garder absolument cette ligne, mais rendre la valeur de son code poste nulle.
Merci beaucoup, j'espère avoir répondu à la question
En fait il ne faut rien supprimer (en aucun cas supprimer les lignes) car j'en aurai besoin pour avoir l'effectif de l'entreprise. Par contre, il faudra rendre égales à 0 ou "" les cellules de certains code poste en doublon. Le code poste de untel1 doit être garder car c'est le plus ancien, par contre Untel3 possède le même code poste (donc doublon), suite à un remplacement temporaire. Il faut donc garder absolument cette ligne, mais rendre la valeur de son code poste nulle.
Merci beaucoup, j'espère avoir répondu à la question
Jle41
Messages postés
3
Date d'inscription
mardi 12 juin 2012
Statut
Membre
Dernière intervention
13 juin 2012
13 juin 2012 à 09:59
13 juin 2012 à 09:59
Voilà le code à partir duquel je me suis basé et que j'ai adapté à mon cas, au cas où ça peut aider. Mais j'ai environ 1500 lignes à analyser donc j'ai peur que ce genre de code prenne un temps monstre s'il fonctionne...
Sub Essai()
For i = 2 To 2500
For j = 3 To 2500
If Cells("S" & i).Value = Range("S" & j) Then
If Range("O" & i).Value = "DI" Then
If Range("N" & i) > Range("N" & j) Then
Range("S" & i).Value = ""
End If
End If
If Range("O" & i).Value = "DD" Then
Range("S" & i).Value = ""
End If
End If
Next j
Next i
End Sub
Sub Essai()
For i = 2 To 2500
For j = 3 To 2500
If Cells("S" & i).Value = Range("S" & j) Then
If Range("O" & i).Value = "DI" Then
If Range("N" & i) > Range("N" & j) Then
Range("S" & i).Value = ""
End If
End If
If Range("O" & i).Value = "DD" Then
Range("S" & i).Value = ""
End If
End If
Next j
Next i
End Sub
Salut
Si tu veux rendre ce genre de code plus efficace tu peux ajouter
Application.ScreenUpdating = false au début de ton code et
Application.ScreenUpdating = true a la fin de ton code
De cette façon, tu économisera en temps d'exécution.
Après, si le code que tu nous a donné fait ce que tu veux qu'il fasse sur des petits échantillons, il n'ya pas de raison qu'il pose des problèmes sur 1500 lignes
++
Si tu veux rendre ce genre de code plus efficace tu peux ajouter
Application.ScreenUpdating = false au début de ton code et
Application.ScreenUpdating = true a la fin de ton code
De cette façon, tu économisera en temps d'exécution.
Après, si le code que tu nous a donné fait ce que tu veux qu'il fasse sur des petits échantillons, il n'ya pas de raison qu'il pose des problèmes sur 1500 lignes
++
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Bonjour Elphealer.
Merci de ta réponse.
Entre temps j'ai résolu mon problème, voici le code si ça interesse quelqu'un :
Option Explicit
Sub Suppression_doublons()
Dim Cel As Range, Plage As Range
Dim C As Collection
Dim DerLig As Long, i As Long, j As Long, Cptr As Long
Application.ScreenUpdating = False
Set C = New Collection
On Error Resume Next
With Worksheets("Feuil1")
DerLig = .Range("S" & .Rows.Count).End(xlUp).Row
'Tri ascendant sur la date d'arrivée dans le poste
.Range("A1:T" & DerLig).Sort Key1:=.Range("N1"), Order1:=xlAscending, _
Header:=xlYes, OrderCustom:=1, MatchCase:=False
'Les codes poste sont placés dans une collection afin d'obtenir une liste sans doublon
Set Plage = .Range("S2:S" & DerLig)
For Each Cel In Plage
If Cel <> "" Then C.Add Cel, CStr(Cel)
Next Cel
On Error GoTo 0
'On boucle sur chaque élément de la collection que l'on compare aux codes de la liste.
For i = 1 To C.Count
Cptr = 0
For j = 1 To DerLig
If .Range("S" & j).Value = C.Item(i) Then
If Cptr > 0 Then .Range("S" & j) = ""
Cptr = Cptr + 1
End If
Next j
Next i
'Tri ascendant sur le nom (la liste est replacée dans l'ordre initial)
.Range("A1:T" & DerLig).Sort Key1:=.Range("A1"), Order1:=xlAscending, _
Header:=xlYes, OrderCustom:=1, MatchCase:=False
End With
Set Plage = Nothing
Set C = Nothing
Application.ScreenUpdating = True
End Sub
Merci encore
Merci de ta réponse.
Entre temps j'ai résolu mon problème, voici le code si ça interesse quelqu'un :
Option Explicit
Sub Suppression_doublons()
Dim Cel As Range, Plage As Range
Dim C As Collection
Dim DerLig As Long, i As Long, j As Long, Cptr As Long
Application.ScreenUpdating = False
Set C = New Collection
On Error Resume Next
With Worksheets("Feuil1")
DerLig = .Range("S" & .Rows.Count).End(xlUp).Row
'Tri ascendant sur la date d'arrivée dans le poste
.Range("A1:T" & DerLig).Sort Key1:=.Range("N1"), Order1:=xlAscending, _
Header:=xlYes, OrderCustom:=1, MatchCase:=False
'Les codes poste sont placés dans une collection afin d'obtenir une liste sans doublon
Set Plage = .Range("S2:S" & DerLig)
For Each Cel In Plage
If Cel <> "" Then C.Add Cel, CStr(Cel)
Next Cel
On Error GoTo 0
'On boucle sur chaque élément de la collection que l'on compare aux codes de la liste.
For i = 1 To C.Count
Cptr = 0
For j = 1 To DerLig
If .Range("S" & j).Value = C.Item(i) Then
If Cptr > 0 Then .Range("S" & j) = ""
Cptr = Cptr + 1
End If
Next j
Next i
'Tri ascendant sur le nom (la liste est replacée dans l'ordre initial)
.Range("A1:T" & DerLig).Sort Key1:=.Range("A1"), Order1:=xlAscending, _
Header:=xlYes, OrderCustom:=1, MatchCase:=False
End With
Set Plage = Nothing
Set C = Nothing
Application.ScreenUpdating = True
End Sub
Merci encore