Effacement sous condition multiple

  • Initiateur de la discussion Initiateur de la discussion baptbapt
  • Date de début Date de début

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 !

baptbapt

XLDnaute Occasionnel
Bonjour a tous

J'ai un problème lors de l'effacement de mes données.
Je suis obligé de réaliser plusieurs boucles pour suppimer toutes les lignes inutiles, mais certaines ne sont pas supprimé.

Code:
'Effacement données inutile sur feuille fournisseur
Sheets(i).Select

Dim derl As Long
derl = Cells(65536, 5).End(xlUp).Row
For f = 1 To derl
    If Cells(f, 8).Value = "." Then
    Rows(f).Select
    Selection.Delete Shift:=xlUp
    End If
    Next f

Dim derl1 As Long
derl1 = Cells(65536, 5).End(xlUp).Row
For t = 1 To derl1
    If Cells(t, 6).Value = "." Then
    Rows(t).Select
    Selection.Delete Shift:=xlUp
    End If
Next t
    
Dim derl4 As Long
derl4 = Cells(65536, 5).End(xlUp).Row
For t = 1 To derl4
    If Cells(t, 6).Value = "." Then
    Rows(t).Select
    Selection.Delete Shift:=xlUp
    End If
Next t
    
Dim derl2 As Long
derl2 = Cells(65536, 5).End(xlUp).Row
For o = 1 To derl2
    If Cells(o, 9).Value = "0" Then
    Rows(o).Select
    Selection.Delete Shift:=xlUp
    End If
Next o
    
Dim derl3 As Long
derl3 = Cells(65536, 5).End(xlUp).Row
For w = 1 To derl3
    If Cells(w, 10).Value = "0" Then
    Rows(w).Select
    Selection.Delete Shift:=xlUp
    End If
Next w

Le système ne veux pas systématiquement supprimer les lignes, il me reste parfois des lignes à "0" ou des "."

Merci
 
Re : Effacement sous condition multiple

Bonjour Baptbpt

essaye peut être d'inverser tes boucles comme ci dessous :

Code:
For f = derl to 1 Step -1

ce qui fait que tu pars de la fin de ce fait il n'y a pas de loupé...

bon après midi
@+
 
Re : Effacement sous condition multiple

bonjour baptbapt

c'est normal au vu de tes boucles
exemple :

for i = 1 to 15
suppr
next i

quand tu supprimes la ligne 4, la 5 deviendra 4 et ne sera pas traitée puisque le next te fera traiter le ligne 5 qui etait precedemment la 6
Pour faire correctement la suppression il faut partir de la fin et aller ver le debut

For i = derline to 1 step -1 ' Step -1 permet de modifier le compteur et d'affecte -1 à le prochaine valeur

Edit : oups collision : bonjour pierrot
 
Re : Effacement sous condition multiple

Par contre, y a pas un moyen d'avoir le retour a la ligne quand on écrit

Code:
Dim derl As Long
derl = Cells(65536, 5).End(xlUp).Row
For f = derl To 1 Step -1
    If Cells(f, 8).Value = "." Or Cells(f, 6).Value = "." Or Cells(f, 8).Value = "" Or Cells(f, 13).Value = "" Or Cells(f, 6).Value = "NRC" Or Cells(f, 6).Value = "CA" Or Cells(f, 6).Value = "AFFECTATION" Or Cells(f, 6).Value = "TRANSPORT" Or Cells(f, 6).Value = "FTRS" Or Cells(f, 6).Value = "DCST" Or Cells(f, 6).Value = "AOG" Then
    Rows(f).Select
    Selection.Delete Shift:=xlUp
    End If
    Next f

Car il y a encore beaucoup de condition a rentrer
 
Re : Effacement sous condition multiple

Pierrot93 à dit:
Re, bonjour Wilfried,

oui tu peux mettre plusieurs condtions en utilisant "Or" ou "And" suivant le cas comme ci dessous :

Code:
If Cells(i, 1).Value = "" Or Cells(i, 1).Value = 9 Then

@+
Salut
Ta macro, un peu modifiée
Code:
Sub test()
Dim X As Long
'Effacement données inutile sur feuille fournisseur
With Sheets("fournisseur")
    For X = .Range("E65536").End(xlUp).Row To 1 Step -1
        If .Range("M" & X) = "" Or .Range("H" & X) = "." Or _
           .Range("H" & X) = "" Or .Range("F" & X) = "." Or _
           .Range("F" & X) = "NRC" Or .Range("F" & X) = "CA" Or _
           .Range("F" & X) = "AFFECTATION" Or .Range("F" & X) = "TRANSPORT" Or _
           .Range("F" & X) = "FTRS" Or .Range("F" & X) = "DCST" Or _
           .Range("F" & X) = "AOG" Then .Rows(X).Delete
    Next X
End With
End Sub
J'ai remplacé tes cells() par des range() ça évite de faire 2 fois la F et tu vois directement si toutes tes colonnes sont traitées.

Quand tu fais une macro : regroupe toutes tes déclarations au même endroit, en début de macro. ça ne change rien pour Excel, il réserve la place mémoire lors d'un premier passage
Mais pour toi, tu sais quelles variables tu utilises, et ça t'évitera des erreurs.

Je n'utilise Cells que lorsque j'ai un compteur pour les colonnes :
Range("BX" & Lig) est plus lisible (pour moi 😛 ) que Cells(Lig, 76)

J'essaie de simplifier mes tests, par exemple :
.Range("I" & X) = 0 Or .Range("J" & X) = 0
peut être remplacé par
(.Range("I" & X) * .Range("J" & X) )= 0
si l'un ou l'autre est égal à 0 la multiplication est égale à 0

Je supprime les select : ils ralentissent la macro

La colonne F à la place de mettre toutes les valeurs pouvant entraîner une suppression de la ligne, ne serait-il pas plus simple de travailler avec l'inverse : si F est différent de ... supprimer ?
Dépend évidemment des valeurs interdisant la suppression

A+
 
Dernière édition:
- 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
5
Affichages
837
Réponses
15
Affichages
646
Réponses
4
Affichages
692
Réponses
10
Affichages
632
Réponses
5
Affichages
551
Retour