Problème VB avec End(xlUp)

toony.m

XLDnaute Nouveau
Bonjour à tous!

Voici une fonction appliquée à une feuille qui permet de cacher des lignes dont une certaine colonne n'a pas la bonne valeure.
Ce script marche TB.

Code:
Option Explicit

Private Sub Worksheet_Activate()
Application.ScreenUpdating = False
Dim i As Integer
With ActiveSheet
    .Rows.Hidden = False
    For i = .Cells(.Rows.Count, 2).End(xlUp).Row To 6 Step -1
        If .Cells(i, 1).Value < 1 Then .Rows(i).Hidden = True
        
    Next i
End With
Application.ScreenUpdating = True
End Sub

'ThisWorkbook.Sheets("Profil1").range("B6").interior.color
Private Sub Worksheet_SelectionChange(ByVal Target As Range)

End Sub

Le problème est que des que j'insère une nouvelle ligne (en faisant un clic droit et insertion sur la colonne des lignes) ce script ne marche plus et j'obtiens une erreur VB n°13 à ce niveau :
Code:
 If .Cells(i, 1).Value < 1 Then .Rows(i).Hidden = False

Idem si je vais ou couper/coller de certaines lignes
Alors que cela fonctionne avec un copier/coller.

La fonction End(xlUp) semble ne pas aimer les modifications de lignes...
D'où pourrait venir le problème ?
Peut-on le contourner ?
 

mutzik

XLDnaute Barbatruc
Re : Problème VB avec End(xlUp)

bonjour,
essaie :
Derlig = .Cells(.Rows.Count, 2).End(xlUp).Row
For i = Derlig To 6 Step -1
CellVal = .Cells(i, 1).Value
If .Cells(i, 1).Value < 1 Then .Rows(i).Hidden = True
Next i

et tu mets un point d'arret sur la ligne contenant CellVal = ...
le code s'arretera à cet endroit et tu pourras vérifier ta condition
 

Catrice

XLDnaute Barbatruc
Re : Problème VB avec End(xlUp)

Bonjour,

Je ne reproduit pas le probleme.
Peux tu detailler le pas à pas pour reproduire le probleme ?
Eventuellement poster ton fichier ...

voir le fichier joint (testé en Excel XP)
 

Pièces jointes

  • Classeur1.xls
    22 KB · Affichages: 56
  • Classeur1.xls
    22 KB · Affichages: 61
  • Classeur1.xls
    22 KB · Affichages: 67

toony.m

XLDnaute Nouveau
Re : Problème VB avec End(xlUp)

Merci pour vos réponses !

En attendant voici le fichier en question qui fonctionne bien sans couper/coller ou suppresion/insertion.

Et voici celui qui pose problème.

Mutzik: En tant que débutant que je suis quand même:

Comment met-on un point d'arret ?

Et j'ai essayé en déclarant les variables comme suit:
Code:
Option Explicit

Private Sub Worksheet_Activate()
Application.ScreenUpdating = False
Dim i As Integer
Dim Derlig As Integer
Dim CellVal As Integer

With ActiveSheet
    .Rows.Hidden = False
       
    Derlig = .Cells(.Rows.Count, 2).End(xlUp).Row
    For i = Derlig To 6 Step -1
    CellVal = .Cells(i, 1).Value
    If .Cells(i, 1).Value < 1 Then .Rows(i).Hidden = True
    Next i

End With
Application.ScreenUpdating = True
End Sub

Mais j'ai encore l'erreur 13...
 
Dernière édition:

Discussions similaires

Réponses
3
Affichages
248

Statistiques des forums

Discussions
312 495
Messages
2 088 964
Membres
103 992
dernier inscrit
Christine 974