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

Explication pour ce code

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 !

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
 
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:
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:
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
 
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 😉 )
 
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
 
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
 
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 😱 !
 
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
 
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 🙂
 
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. 🙂
 
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
 
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 🙂
 
- 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
15
Affichages
788
Réponses
5
Affichages
914
Réponses
4
Affichages
281
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…