VBA-Excel: masquer une ligne en fonction de la validation d'une cellule

GuillaumA

XLDnaute Occasionnel
Bonjour à tous,
Actuellement travaillant sur un projet excel, je dois pouvoir construire un tableau évolutif.
Pour cela, une des macros nécessaire doit permettre de masquer les lignes si elles ne correspondent pas à la valeur définie dans une cellule disposé sur la même ligne mais appartenant à une autre feuille du classeur excel (voir infos projet à la fin de ce message).
Mon soucis est que je ne connaît rien en Excel et que la seul manière que j'ai trouvé jusqu'à présent pour m'en sortir était d'utiliser vos forums pour trouver des macros déja faites.
Celle qui pourrait m'être utile est celle-ci:

Nouvelle macro disponible message #8


Infos sur mon projet:
==> Cellules de validation: Doit disparaître si valeur = Non
==> Une cellule de validation par ligne de la colonne P (100 lignes), Feuille 5 (nom: Actions)
==> Les lignes devant disparaître se situe sur la feuille 7 ( Actions Retenues).
==> La ligne 1 de la feuille 5 correspond à la ligne 1 de la feuille 7, etc...


Toute aide même minime serait plus que la bienvenue!
Merci de votre considération,

Cordialement,
Guillaume
 
Dernière édition:

Hpotter

XLDnaute Junior
Re : VBA-Excel: masquer une ligne en fonction de la validation d'une cellule

Bonjour,

Dans ton projet qu'entends-tu par disparaître, est-ce simplement cachée ou bien supprimée.

Le code ci-dessous indique la cellule A1. Si je ne me trompe pas.

Code:
ActiveCell.Offset(1, 0).Select
 

GuillaumA

XLDnaute Occasionnel
Re : VBA-Excel: masquer une ligne en fonction de la validation d'une cellule

Dans ce cas, oublie le premier code donné.

Private Sub Worksheet_Change(ByVal Target As Range)

' Déclaration des variables. L pour n° de ligne
' C pour n° de colonne

Dim l As Long
Dim c As Long

c = 36
Cells(3, c).Select
For Each Cell In Range("zone_test")

If ActiveCell.Value = "Oui" Then
l = ActiveCell.Row
Sheets("Actions Retenues").Select
ActiveSheet.Cells(l, c).Select
ActiveCell.EntireRow.Select
If ActiveCell.EntireRow.Hidden = True Then
ActiveCell.EntireRow.Hidden = False
End If

Else
l = ActiveCell.Row
If ActiveCell.Value <> "Oui" Then
Sheets("Actions Retenues").Select
ActiveSheet.Cells(l, c).Select
ActiveCell.EntireRow.Select
If ActiveCell.EntireRow.Hidden = False Then
ActiveCell.EntireRow.Hidden = True
End If
End If
End If
Next
End Sub

Qu'en pensez vous? Il y a une erreur et j'aimerai savoir comment le modifier pour que cela marche!
 

GuillaumA

XLDnaute Occasionnel
Re : VBA-Excel: masquer une ligne en fonction de la validation d'une cellule

Et bien aucune erreur n'est affiché mais cela ne marche pas... Je vois la feuille excel sensé se modifier (en cachant des lignes) trembler pendant 2-3sec et puis... rien ne se passe...
Mais le code en lui même n'affiche aucune erreur!
Et je n'arrive pas à le modifier pour que cela marche!
 

GuillaumA

XLDnaute Occasionnel
Re : VBA-Excel: masquer une ligne en fonction de la validation d'une cellule

Bonjour,
J'ai finalement trouvé un code qui permet de masquer les lignes sans texte cependant 2 points m'échappent:
- Au bout d'un certain moment, la macro ne marche plus.
- Lorsque j'injecte du texte à nouveau dans une cellule par l'intermédiaire de la fonction suivante
=SI('Etape 2 - Actions Proposées'!P33="Oui";'Etape 1 - Critères'!K33;"")
, les lignes masquées (car sans texte) ne réapparaissent pas toutes seuls et je dois manuellement les démasquer.
N.b: La fonction appelle du texte de la cellule K33 (feuille Etape 1) dans la feuille ou la macro se situe (Etape 3) si la valeur de la cellule P33 de la feuille Etape 2 affiche Oui.

Serait-il possible de m'éclairer sur des moyens d'améliorer mon code afin de répondre à ce que je recherche ?

Code:
Sub Masquer()

Dim I As Long

I = 1
Do While I < 100
If Cells(I, 2).Value = "" Then
Cells(I, 2).EntireRow.Hidden = True
End If
I = I + 1
Loop

End Sub

Merci.

Cordialement,
Guillaume A.
 
Dernière édition:

soenda

XLDnaute Accro
Re : VBA-Excel: masquer une ligne en fonction de la validation d'une cellule

Bonsoir le fil, Hpotter, GuilaumeA

A la place de la boucle, on peut utiliser l'instruction suivante :
Code:
[B1:B100].SpecialCells(xlCellTypeBlanks).EntireRow.Hidden = True
A plus
 

Discussions similaires