Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

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

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

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
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" ...
 
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
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
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

Bon jour,

Serait-ce un cadeau empoisonné ?
En ces temps, qu'il soit Urbi ou Orbi, le On Error Resume Next absout peut-être l'erreur Rows(0) à Rome mais pas chez moi !
 

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
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
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.
 

soenda

XLDnaute Accro
Re : Explication pour ce code

Re

@kobaya : tout est possible, mais :

1 - il faudrait voir la procédure de test.
2 - Les tests doivent-être fait plus d'une fois ...

Le sujet est intéressant ...

A plus
 

Kobaya

XLDnaute Occasionnel
Re : Explication pour ce code

soenda,

D'accord avec toi, il faudrait des tests plus poussés, mais j'ai pas trop le temps en ce moment. Je m'en suis tenu à deux tests...

Allez, en attendant, Bonnes Fêtes de Fin d'Année
 

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…