XL 2013 Boucle qui tourne ds le vide.

  • Initiateur de la discussion Initiateur de la discussion Wyrgle
  • 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 !

W

Wyrgle

Guest
Bonjour à tous,

Voici un bout de code qui mouline dans le vide.
Je cherche à conserver seules les lignes en col 6 qui égalent l'année choisit ds un UserForm.
Je pars du haut (ligne 2) ou d'en bas (le rang de ma derniere ligne est 19038 environ...), je ne sors jamais ds la 2eme boucle.
(j'ai séparé les 2 boucles pour plus de clarté)

VB:
Last_Line = ActiveSheet.UsedRange.Rows.Count
For i = Last_Line To 2 Step -1
'---Prend l'année seule de la date :
    Cells(i, 6) = Year(Cells(i, 6))
Next i

For i = Last_Line To 2 Step -1
'---Si l'année est différente de Année choisie par le user, on efface la ligne :
    If Cells(i, 6).Value <> Annee_pour_traitement Then Rows(i).EntireRow.Delete
Next i

Ou est l'erreur ?
Merci pour votre aide !!
 
Bonsoir.
À essayer :
VB:
Sub Test()
   Dim Année As Long
   Année = 2019
   LignesOùCondR1C1(Rows(2), "YEAR(RC6)<>" & Année).Delete
   End Sub
Function LignesOùCondR1C1(ByVal LigneDéb As Range, ByVal CondR1C1 As String) As Range
Rem. ——— Lignes entières partant de LigneDéb vérifiant une condition R1C1 CondR1C1.
   Dim Rng As Range
   Set Rng = PlageÀPartirDe(LigneDéb.EntireRow): If Rng Is Nothing Then Exit Function
   Set Rng = Rng.Columns(Rng.Columns.Count + 1)
   Application.ScreenUpdating = False
   On Error Resume Next
   Rng.FormulaR1C1 = "=1/(" & CondR1C1 & ")"
   Set LignesOùCondR1C1 = Rng.SpecialCells(xlCellTypeFormulas, 1).EntireRow
   Rng.Delete xlShiftToLeft
   End Function
Function PlageÀPartirDe(ByVal CelDéb As Range) As Range
Rem. ——— Plage utilisée à partir de CelDéb.
   Dim NbrLig As Long, NBrCol As Long
   With CelDéb.Worksheet.UsedRange:
      NbrLig = .Row + .Rows.Count - CelDéb.Row
      NBrCol = .Column + .Columns.Count - CelDéb.Column
      If NbrLig <= 0 Or NBrCol <= 0 Then Exit Function
      End With
   Set PlageÀPartirDe = CelDéb.Resize(NbrLig, NBrCol)
   End Function
 
- 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
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

Réponses
15
Affichages
576
Réponses
5
Affichages
818
Réponses
8
Affichages
736
Réponses
4
Affichages
676
Réponses
10
Affichages
586
Retour