VBA Dépannage sur un Range
Bonjour
Est ce que quelqu'un peut me résoudre mon problème ci-dessous, je ne m'en sors pas!!
Sub Masquerlescolonnes()
'
' Masquerlescolonnes Macro
'
Dim rng As Range
' Dim rng2 As Range
Dim DernCol As Integer
Sheets("Production").Select
DernCol = Cells(5, Cells.Columns.Count).End(xlToLeft).Column
ActiveSheet.Unprotect
Cells(1, 5) = DernCol
Application.ScreenUpdating = False
' rng2 = [Cells(5, 20): Cells(RowIndex:=5, ColumnIndex:=DernCol)]
For Each rng In [Cells(5,20),Cells(RowIndex:=5, ColumnIndex:=Derncol)]
' For Each rng In [rng2]
' For Each rng In [t5:xfd5]
If rng.Value = Range("e2") Then rng.EntireColumn.Hidden = False Else rng.EntireColumn.Hidden = True
Next rng
Application.ScreenUpdating = True
ActiveSheet.Protect
End Sub
Merci d'avance
C'est cette ligne qui coince!!
For Each rng In [Cells(5,20),Cells(RowIndex:=5, ColumnIndex:=Derncol)]
Bonjour,
Un test qui ne provoque pas d'erreur chez moi :
Sub Masquerlescolonnes()
Dim rng As Range
Dim DernCol As Integer
With Sheets("Production")
DernCol = .Cells(5, .Cells.Columns.Count).End(xlToLeft).Column
.Unprotect
.Cells(1, 5) = DernCol
Application.ScreenUpdating = False
For Each rng In .Range(.Cells(5, 20), .Cells(5, DernCol))
If rng.Value = .Range("E2") Then
rng.EntireColumn.Hidden = False
Else
rng.EntireColumn.Hidden = True
End If
Next rng
Application.ScreenUpdating = True
.Protect
End With
End Sub
Cdlt,
Edit : Pensez à baliser votre code sur le forum pour le rendre plus compréhensible.
Edit 2 : Vous ne pouvez pas mettre des [] avec des cells il me semble. De plus, mieux vaut-il qualifier les cells via le With Sheets et le .
J'ai fait le nettoyage de tous mes essais infructueux
J'en suis là:
Et le message est "Référence incorrecte ou non qualifiée" sur .cells(5,20) ligne 9
' Masquerlescolonnes Macro
'
Dim rng As Range
Dim DernCol As Integer
Sheets("Production").Select
DernCol = Cells(5, Cells.Columns.Count).End(xlToLeft).Column
ActiveSheet.Unprotect
Application.ScreenUpdating = False
For Each rng In .Range(.Cells(5, 20), .Cells(5, DernCol))
If rng.Value = Range("e2") Then rng.EntireColumn.Hidden = False Else rng.EntireColumn.Hidden = True
Next rng
Application.ScreenUpdating = True
ActiveSheet.Protect
End Sub
Bonjour tout le monde,
Un autre essai....assez similaire à la proposition d'Ergotamine (
Sub Masquerlescolonnes()
Dim cel As Range, plage As Range
Dim DernCol%
With Sheets("Production") '...................................................agit sur cette feuille uniquement
DernCol = .Cells(5, .Cells.Columns.Count).End(xlToLeft).Column '...........dernière colonne en fonction de la ligne 5
Set plage = .Range(.Cells(5, 20), .Cells(5, DernCol)) '....................définit la plage
.Unprotect '...............................................................enlève la protection
Application.ScreenUpdating = False '.......................................désactive le rafraichissement de l'écran
For Each cel In plage '...................................................boucle sur toutes les cellules de la plage
cel.EntireColumn.Hidden = IIf(cel.Value = .Range("E2"), False, True) '...si valeur cellule<>E2 : on masque la colonne
Next cel '................................................................prochaine cellule
Application.ScreenUpdating = True '........................................on réactive le rafraichissement de l'écran
.Protect '.................................................................on protège la feuille
End With
End Sub
Cordialement,
Bonsoir
Avec cela ca fonctionne.
Donc merci même si je ne vois pas ce qui a été modifié!!
Sub Masquerlescolonnes()
'
' Masquerlescolonnes Macro
'
Dim rng As Range
Dim DernCol As Integer
Sheets("Production").Select
DernCol = Cells(5, Cells.Columns.Count).End(xlToLeft).Column
ActiveSheet.Unprotect
Application.ScreenUpdating = False
For Each rng In Range(Cells(5, 20), Cells(5, DernCol))
If rng.Value = Range("e2") Then rng.EntireColumn.Hidden = False Else rng.EntireColumn.Hidden = True
Next rng
Application.ScreenUpdating = True
ActiveSheet.Protect
End Sub
Re,
même si je ne vois pas ce qui a été modifié!!
Tu as enlevé les "." à Range et Cells
Comme tu n'utilises pas
With Sheets("Production")
(qui est pourtant préférable au .Select, comme te l'a conseillé Ergotamine), ils sont inutiles.
De plus, mieux vaut-il qualifier les cells via le With Sheets et le .
Cordialement,