Excel VBA - cacher des lignes

Résolu/Fermé
bobie - 17 oct. 2009 à 17:06
eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 - 17 oct. 2009 à 19:49
Salut à tous,

dans une feuille j'ai nommé des plages (en fait des lignes). Par exemple:

NOM1 = ligne entière de 3 à 23

j'aimerais sous VBA que si la cellule F16 est égale à une erreur (#DIV!0) alors on cache NOM1

Comment je peux faire? merci
A voir également:

5 réponses

eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 7 213
17 oct. 2009 à 17:30
Bonjour,

à mettre dans la feuille :
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If IsError([F16]) Then
        Range("plage1").EntireRow.Hidden = True
    Else
        Range("plage1").EntireRow.Hidden = False
    End If
End Sub


Sélectionner une autre cellule rafraichira
eric
1
meric eric

et si j'ai plusieur plage?

je peux demultiplier ce code cidessous?

If IsError([F16]) Then
Range("plage1").EntireRow.Hidden = True
Else
Range("plage1").EntireRow.Hidden = False

merci
0
bobie > bobie
17 oct. 2009 à 18:02
C'est ok j'ai compris le systeme pour mettre plusieurs if.

un grand merci Eric.

Bobie
0
bobie > bobie
17 oct. 2009 à 18:21
EN fait j'ai une derniere question:

voila j'ai fais mon code sur la base du code d'Eriiiic. Mais dès que je selectionne une cellule dans ma feuille alors la macro se lance (c'est normal).

Par contre cela bloque mon pc pendant une seconde. En fait je n'ai pas besoin d'une actualisation a chaque selection de cellule. Je n'en ai besoin q'une seule fois, à la fin de mon autre macro Sub Consolidation_OWILOU().

Comment puis-je faire?
merci





Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Application.ScreenUpdating = False

If IsError([F16]) Then
Range("AA").EntireRow.Hidden = True
Else
Range("AA").EntireRow.Hidden = False
End If
If IsError([F33]) Then
Range("AIUS").EntireRow.Hidden = True
Else
Range("AIUS").EntireRow.Hidden = False
End If

If IsError([F50]) Then
Range("ALNIA").EntireRow.Hidden = True
Else
Range("ALNIA").EntireRow.Hidden = False
End If

If IsError([F67]) Then
Range("DS").EntireRow.Hidden = True
Else
Range("DS").EntireRow.Hidden = False
End If

If IsError([F84]) Then
Range("DNA").EntireRow.Hidden = True
Else
Range("DNA").EntireRow.Hidden = False
End If
If IsError([F101]) Then
Range("CTL").EntireRow.Hidden = True
Else
Range("CTL").EntireRow.Hidden = False
End If
If IsError([F118]) Then
Range("NAV").EntireRow.Hidden = True
Else
Range("NAV").EntireRow.Hidden = False
End If
If IsError([F135]) Then
Range("REQUENTIS").EntireRow.Hidden = True
Else
Range("REQUENTIS").EntireRow.Hidden = False
End If
If IsError([F152]) Then
Range("ONEYWELL").EntireRow.Hidden = True
Else
Range("ONEYWELL").EntireRow.Hidden = False
End If
If IsError([F169]) Then
Range("NDRA").EntireRow.Hidden = True
Else
Range("NDRA").EntireRow.Hidden = False
End If
If IsError([F186]) Then
Range("ATMIG").EntireRow.Hidden = True
Else
Range("ATMIG").EntireRow.Hidden = False
End If
If IsError([F203]) Then
Range("ATS").EntireRow.Hidden = True
Else
Range("ATS").EntireRow.Hidden = False
End If
If IsError([F220]) Then
Range("ORACON").EntireRow.Hidden = True
Else
Range("ORACON").EntireRow.Hidden = False
End If
If IsError([F237]) Then
Range("EAC").EntireRow.Hidden = True
Else
Range("EAC").EntireRow.Hidden = False
End If
If IsError([F254]) Then
Range("ELEx").EntireRow.Hidden = True
Else
Range("ELEX").EntireRow.Hidden = False
End If
If IsError([F271]) Then
Range("TLES").EntireRow.Hidden = True
Else
Range("TLES").EntireRow.Hidden = False
End If
Application.ScreenUpdating = True
End Sub
0
Bonjour, tu pourrais me faire un screen ( impr écran syst ) pour que je voie un peux ce que tu voudrais faire ? merci
0
salut tony

voila une copie d'ecran.

j'aimerais que les lignes 8 a 23 soient cachées si la cellule E16 renvoie #DIV!0

Le "tableau" que tu vois est répété 15 fois en dessous. Mais pour le moment j'aimerais juste une bout de code
pour juste cette plage, ensuite j'adapterai.

merci
0
bobie > bobie
17 oct. 2009 à 17:25
oups le lien:

http://www.cijoint.fr/cjlink.php?file=cj200910/cijEbsMtzM.bmp
0
eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 7 213
17 oct. 2009 à 18:39
et bien tu l'enleves de Worksheet_SelectionChange et tu le mets dans un sub masquer() (par exemple) que tu appelles à la fin de ta macro.
Et si tu veux l'accelérer tu mémorises l'état de tes plages et tu ne fais l'action que si c'est nécessaire. (à l'ouverture toutes les démasquer pour être sûr de leur état)
eric
0
Merci eriiic pour ton précieux aide.

bonne soirée,
bob
0
Eriiic

losque je veux appeler ma macro masquer() (se trouve dans sheet2) à la fin de ma macro Sub Consolidation_OWILOU() (se trouve dans module1), j'ai l'erreur suivante: Sub or Function not defined

quel est le probleme?
merci
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 7 213
17 oct. 2009 à 19:49
met masquer() dans le module et précise sur quelle feuille tu veux travailler.

dim sh1 as worksheet
sh1=worksheets("Sheet2")
If IsError(sh1.[F16]) Then
sh1.Range("AA").EntireRow.Hidden = True
Else
sh1.Range("AA").EntireRow.Hidden = False
End If
....

(non testé...)

eric
0