Explication pour ce code

MuscatMimi

XLDnaute Accro
Bonjour a tout le Forum

est ce quequ'un pourrai me commenter ce code
car je cherche mais j'arrive pas a comprendre


Code:
Sub test()
Dim i As Integer, C As Range
    For i = Range("A65536").End(xlUp).Row To 1 Step -1
        For Each C In Range("A1:A" & Range("A65536").End(xlUp).Row)
            If UCase(Range("IV" & i).End(xlToLeft).Value) = "NON" Then Rows(i).Delete
            If C.Font.Strikethrough = True Then C.EntireRow.Delete
        Next C
    Next i
End Sub

Merci de votre aide par avance

Cordialement
 

Staple1600

XLDnaute Barbatruc
Re : Explication pour ce code

Bonjour



Et tu cherches ou?

Tout est déjà dans l'aide VBA non :rolleyes:

Et quelle partie ne comprends-tu pas ?

Ou sont tes propres commentaires (de ce tu comprends déjà)

Par exemple

Tu aurais pu ajouter toi-même en début de code
'Déclarations des variables

D'ailleurs Dim i As Long serait préférable


PS; comme je te l'ai déjà dit tu es XLDnaute impliqué pourtant ;)
 
Dernière édition:

JNP

XLDnaute Barbatruc
Re : Explication pour ce code

Sub test()
Dim i As Integer, C As Range
For i = Range("A65536").End(xlUp).Row To 1 Step -1
' De i = dernière ligne de la colonne A juqu'à 1 en décrémentant de 1
For Each C In Range("A1:A" & Range("A65536").End(xlUp).Row)
' Pour chaque cellule dans les cellules utilisées dans la colonne A
If UCase(Range("IV" & i).End(xlToLeft).Value) = "NON" Then Rows(i).Delete
' Si la dernière cellule utilisée de la ligne i (en balayant depuis la colonne IV vers la gauche) mise en majuscule vaut NON alors la ligne est supprimée
If C.Font.Strikethrough = True Then C.EntireRow.Delete
' si le style de la police de la cellule C est "barré" alors supprimer la ligne
Next C
' cellule suivante
Next i
' ligne au dessus (vu que le step est en -1)
End Sub
Techniquement, je ne vois pas l'intérêt des 2 boucles, une seule suffirait, mais plutôt celle en i, car celle en cellule descend, alors qu'il vaut mieux remonter quand on supprime des lignes...
Bon WE :cool:
Ajout : Salut le trombonne :). Oui, je suis d'accord, j'avoue que les posts de notre ami Vaucluse Immo sont souvent surprenants, tantot érudits, tantot maternelle... Ça doit être le syndrome "Docteur Jekyl & Mister Hide" :p...
 
Dernière édition:

MuscatMimi

XLDnaute Accro
Re : Explication pour ce code

Bonsoir Stapple,et JNP

Stapple
Je me doutais un peu de ta réponse,il est vrai que je deviens de plus en plus nul

Jnp
Merci pour ton explication
En fait me suis trompé de code,
c'était celui-ci, et je bloquais sur la ligne en Rouge

Code:
Sub test()
Dim i As Integer
    For i = Range("A65536").End(xlUp).Row To 1 Step -1
       
            [COLOR="Red"]If UCase(Range("IV" & i).End(xlToLeft).Value) = "NON" Then Rows(i).Delete[/COLOR]                Next i
End Sub

Merci encore et Bonne soirée
Cdlt
 

Staple1600

XLDnaute Barbatruc
Re : Explication pour ce code

Bonsoir à tous



En guise de cadeau de Noel (pour vaucluse immo)

Code:
Sub test()
Dim i As Long
For i = [A65536].End(xlUp).Row To 1 Step -1
On Error Resume Next
Rows(i * ((UCase(Range("IV" & i).End(xlToLeft)) = "NON") * -1)).Delete
Next i
End Sub

je te laisse trouver le commentaire expliquant ce code

(C'est cela le cadeau ;) )
 

Kobaya

XLDnaute Occasionnel
Re : Explication pour ce code

Bonsoir le Forum,
Joyeux Noël à tous :),

Ton code est très astucieux Staple1600, mais autant mettre le On Error Resume Next avant la boucle, pas dedans :D
Et puis, tant qu'à bien faire, je sortirai aussi le .End(xlUp) :
Code:
Sub test()
    Dim i As Long
    Dim l As Long
    
    On Error Resume Next
    l = [A65536].End(xlUp).Row
    For i = l To 1 Step -1
        Rows(i * ((UCase(Range("IV" & i).End(xlToLeft)) = "NON") * -1)).Delete
    Next i
End Sub
 

soenda

XLDnaute Accro
Re : Explication pour ce code

Joyeux noël à tous

@kobaya: puisque c'est noël :D
Code:
Sub test()
    Dim i As Long
    [B][COLOR=green]' Dim l As Long[/COLOR][/B] =>[B][COLOR=red] INUTILE[/COLOR][/B]
 
    On Error Resume Next
    [B][COLOR=green]' l = [A65536].End(xlUp).R[/COLOR][/B]ow [B][COLOR=red]=> Est-ce une plaisanterie ?[/COLOR][/B]
    For i = [A65536].End(xlUp).Row To 1 Step -1    [COLOR=red][B]' i n'est initialisé qu'une fois, sauf erreur de ma part ... [/B][/COLOR]
        Rows(i * ((UCase(Range("IV" & i).End(xlToLeft)) = "NON") * -1)).Delete
    Next i
End Sub
A plus
 

Lii

XLDnaute Impliqué
Re : Explication pour ce code

Re,

ma version 2002 me répond : Erreur définie par l'application ou par l'objet même avec ce :
Code:
Option Compare Text
Sub test()
  Dim i As Long
  On Error Resume Next
  For i = [A65536].End(xlUp).Row To 1 Step -1
    Rows(-i * (Range("IV" & i).End(xlToLeft) = "NON")).Delete
  Next i
End Sub
 

soenda

XLDnaute Accro
Re : Explication pour ce code

Bonjour le fil

Tout comme Stapple1600, chez moi Excel 2007 ne bronche pas.
Toutefois, le code suivant génère un résultat inattendu:
Code:
Sub b()
    Dim i As Long
 
    On Error Resume Next
 
    For i = [A65536].End(xlUp).Row To 1 Step -1
        MsgBox i
    Next i
 
End Sub
Si la Colonne A est vide : MsgBox => 1 :eek:
Je ne m'attendais pas à voir apparaitre le MsgBox, dans ce cas.

Ainsi, comme le soulignait très justement Lii :
"le On Error Resume Next <n'absout pas> l'erreur Rows(0)".

Dorénavent, je penserai à une instruction du type :eek:
If [A1] <> "" then b

Merci à tous et bonnes fêtes :)
 

Kobaya

XLDnaute Occasionnel
Re : Explication pour ce code

Bonsoir soenda,

"i n'est initialisé qu'une seule fois"
Eh oui ! moi aussi j'y ai pensé, et j'ai fait deux tests :
1 - For i = [A65536].End(xlUp).Row To 1 Step -1
puis
2 - l = [A65536].End(xlUp).Row
For i = l to 1 Step -1

Eh bien, c'était la deuxième méthode la plus rapide. :)
 

Discussions similaires

Membres actuellement en ligne

Aucun membre en ligne actuellement.

Statistiques des forums

Discussions
312 370
Messages
2 087 693
Membres
103 641
dernier inscrit
anouarkecita2