Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

XL 2016 Afficher et masquer les lignes en fonction des critères

YANNISE

XLDnaute Junior
Bonjour le forum,

Je sollicite votre aide pour l’amélioration d’une macro qu’est me permet d’afficher les lignes des formulaires masqués par défaut (si les cellules sont vides ou « OK ») selon un critère

A la saisi de critère « KO » sur l’une des cellules il s’affiche le formulaire relatif à la lettre, exemple ci-après :



J’ai fait une macro mais avec le style débiteur , mon besoin est d’afficher chaque formulaire s’y correspond à KO automatiquement a la saisie.

je vous remercie d'avance.
 
Solution
Ceci fait ce que vous demandez :
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim P As Range, i
Application.EnableEvents = False
If Target.Address = "$C$26" Then
    Importer_New
ElseIf Not Intersect(Target, [D26:G26]) Is Nothing Then
    Transfert_2
End If
Application.EnableEvents = True
Application.ScreenUpdating = False
Set P = [30:37,39:46,48:55,57:64]
P.EntireRow.Hidden = True 'masque tout
For i = 1 To 4
    If LCase(Cells(26, i + 3)) = "ko" Then P.Areas(i).EntireRow.Hidden = False
Next
End Sub
Mais à mon avis vos 2 macros sont à revoir.

YANNISE

XLDnaute Junior
Bonsoir Oneida,

merci pour la réponse, c'est bien ça seulement il manque

si toutes les cellules sont vides ou OK alors toutes les plages seront masquées

si j'ai deux cellules qui sont KO par exemple Q et D alors les il doit s'afficher deux plages


Merci bcp
 

job75

XLDnaute Barbatruc
Bonjour YANNISE, Oneida,

Vous ne dites pas ce que vous voulez faire avec la macro Worksheet_Change.

Si vous voulez juste la modifier utilisez :
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim P As Range, i
Set P = [30:37,39:46,48:55,57:64]
Application.ScreenUpdating = False
P.EntireRow.Hidden = True 'masque tout
For i = 1 To 4
    If LCase(Cells(26, i + 3)) = "ko" Then P.Areas(i).EntireRow.Hidden = False
Next
End Sub
A+
 

Pièces jointes

  • Exemple_Masquer_Aff.xlsm
    60.6 KB · Affichages: 7

YANNISE

XLDnaute Junior
Bonjour @job75, le fil le forum

merci @job75 c'est parfait et plus dynamic, seulement pour les macros déjà impliquer sur la feuil1 dans la macro Worksheet_Change

je veux garder l'ancien code
si la valeur de la cellule C26 change alors call Importer_New
pour la macro Transfert_2 ca sera mieux de l'exécuter a chaque changement des valeurs "D26:E26:F26:G26"
pourriez-vous l'adapter avec votre code svp

l'ancien code ci-après

VB:
Private Sub Worksheet_Change(ByVal Target As Range)
  If Target.Address = "$G$26" And Range("G26") <> "" Then
    Call Transfert_2
  ElseIf Target.Address = "$C$26" Then
    Importer_New
  Else
    Exit Sub
  End If
Debug.Print mymodule
End Sub

merci bcp
 
Dernière édition:

job75

XLDnaute Barbatruc
Ceci fait ce que vous demandez :
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim P As Range, i
Application.EnableEvents = False
If Target.Address = "$C$26" Then
    Importer_New
ElseIf Not Intersect(Target, [D26:G26]) Is Nothing Then
    Transfert_2
End If
Application.EnableEvents = True
Application.ScreenUpdating = False
Set P = [30:37,39:46,48:55,57:64]
P.EntireRow.Hidden = True 'masque tout
For i = 1 To 4
    If LCase(Cells(26, i + 3)) = "ko" Then P.Areas(i).EntireRow.Hidden = False
Next
End Sub
Mais à mon avis vos 2 macros sont à revoir.
 

YANNISE

XLDnaute Junior
Effectivement par ce que la macro de transfert fait le contrôle pour les cellules "D26:E26:F26:G26"

c'est pour cela que je l'ai associe la première fois seulement à la cellule G26

vous avez peut-être d'autres remarques
 

Discussions similaires

Réponses
12
Affichages
519
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…