Masquer des lignes sous condition

francis15

XLDnaute Occasionnel
Bonjour
j'ai un fichier avec des MFC, mais je bloque sur une fonction.
J'ai recherché, ici des réponses oui , mais que je n'arrive pas à apliquer à mon problème.

Jaimerai que quand la cellule B6 est vide de texte, les lignes: 38,39,40,41 et 42, soit masqués.

j'ai fait disparaitre les bordures et le texte de ces lignes, mais comme j'ai un espace (les lignes 38 à 42) et que j'ai de nouveau des celulles a remplire plus bas, j'aimerais enlever cet espace

si vous me donnez un code en vba, donner moi la methode et l'endroit exacte ou le mettre, je suis encore trop nul avec ses fonctions.
Merci pour tout
Francis
 

Excel-lent

XLDnaute Barbatruc
Re : Masquer des lignes sous condition

Bonsoir Francis15,

Voici une méthode simple et tout en douceur.

Etape 1 : utiliser l'enregistreur de macro (tu connais?)
Une fois l'enregistreur de macro lancé :
-> sélectionner les lignes 38 à 42
-> les masquer ("format"/"ligne"/"masquer")

Tu obtiens ainsi la macro ci-dessous qui s'enregistre automatiquement dans "Module..." :
Code:
Sub Macro1()
' Macro enregistrée par l'enregistreur de macro

    Rows("38:42").[COLOR="Red"][B]Select
    Selection.[/B][/COLOR]EntireRow.Hidden = True
End Sub

Etape 2 : simplification
Après avec l'expérience, tu seras repérer et enlever ce qui ne sert à rien. Cf. le code ci-dessous :
Code:
Sub Macro2()
' Macro simplifié par Excel-lent

    Rows("38:42").EntireRow.Hidden = True
End Sub

Etape 3 : rajoute la(es) condition(s) + la(es) éventuelle(s) boucle(s)
(ici tu n'as pas besoin de boucle)

Maintenant tu as donc le cœur de ta macro. Il ne te reste plus qu'à rajouter la condition. Dans ton cas, tu as besoin de la condition : IF - THEN - End If.

Elle s'articule ainsi :
IF (=si) mettre ici ta condition THEN (=alors)
mettre ici ce que la macro doit faire lorsque la condition est juste
END IF (=fin de la condition "si")

Code:
Sub Macro3()
' Macro finalisé par Excel-lent

[COLOR="Blue"][B]If [/B][/COLOR]Range("B6") = "" [COLOR="Blue"][B]Then[/B][/COLOR]
    Rows("38:42").EntireRow.Hidden = True
[COLOR="Blue"][B]End If[/B][/COLOR]

End Sub

Évidement tu peux encore la raccourcir, mais pour débuter, c'est suffisant, ça fonctionne très bien.

Si tu n'avais pas simplifié la macro (étape 2) tu aurais donc eu :
Code:
Sub Macro3()
' Macro finalisé et non simplifié

[COLOR="Blue"][B]If [/B][/COLOR]Range("B6") = "" [COLOR="Blue"][B]Then[/B][/COLOR]
     Rows("38:42").[COLOR="Blue"]Select
    Selection.[/COLOR]EntireRow.Hidden = True
[COLOR="Blue"][B]End If[/B][/COLOR]

End Sub

Pour information, cette macro ci fonctionne très bien également. Donc si tu ne sais pas enlever l'inutile ou peur de te tromper, ce n'est pas grave ne le fait pas.

Etape 4 : comment lancer la macro

Dans un premier temps, le plus simple est de créer un bouton et lui affecter ta macro.

Ainsi à chaque fois que tu cliqueras sur le bouton, la macro se déclenchera.

Bonne soirée
 
Dernière édition:

francis15

XLDnaute Occasionnel
Re : Masquer des lignes sous condition

Un grand merci pour ce cours.
mais je ne veux pas que celà fonctionne avec un bouton.

mais que cela s'execute tout seul , si la cellule b6 est remplie, alors les ligne 38 à 42 sont apparentes sinon masquer 38 à 42

mais je garde ton cours sous le coude car il me servira pour d'autre applications
merci
 

Excel-lent

XLDnaute Barbatruc
Re : Masquer des lignes sous condition

Bonsoir,

francis15 à dit:
je ne veux pas que celà fonctionne avec un bouton. Mais que cela s'execute tout seul , si la cellule b6 est remplie, alors les ligne 38 à 42 sont apparentes sinon masquer 38 à 42

Alors dans ce cas, on ne joue plus du tout dans la même cours!!!!

Voici ci-dessous le code adéquat! Par contre celui-ci il ne faut pas le mettre dans Module... mais sur la feuille concerné!

Code:
[COLOR="Orange"][U]Private Sub Worksheet_Change(ByVal Target As Range)[/U][/COLOR]
'Macro enregistré par Excel-lent

On Error GoTo fin

[COLOR="DimGray"][B]If[/B][/COLOR] [COLOR="Sienna"][B]Target.Column = 2 And Target.Row = 6[/B][/COLOR] [COLOR="DimGray"][B]Then[/B][/COLOR]

   [COLOR="Red"][B]If[/B][/COLOR] Range("B6") = "" [B][COLOR="Red"]Then[/COLOR][/B]
[COLOR="Blue"][B]       Rows("38:42").EntireRow.Hidden = True[/B][/COLOR]
   [COLOR="Red"][B]Else[/B][/COLOR]
[COLOR="DarkSlateBlue"][B]       Rows("38:42").EntireRow.Hidden = False[/B][/COLOR]
   [COLOR="Red"][B]End If[/B][/COLOR]

[COLOR="DimGray"][B]End If[/B][/COLOR]

fin:

End Sub

Comme tu peux le voir, la base est la même. Mais on complique encore d'un cran (voir... plusieurS)
Une condition IF - THEN - END IF
Une condition : IF-THEN-ELSE-END IF

IF = si... (ta condition)
THEN = alors (si la condition est rempli faire ...)
ELSE = sinon (si la condition n'est pas rempli faire ...)
END IF = fin de la condition

Permet de déclencher la macro à chaque fois qu'il y a un changement dans LA feuille où se trouve cette macro


Target.Column = 2 And Target.Row = 6
=> si le changement à lieu en [B6] alors ...

Grâce à l'enregistreur de macro, tu as pu constater que pour masquer des lignes, il fallait écrire :
Code:
[COLOR="Blue"]Rows("38:42").EntireRow.Hidden = [B][U]True[/U][/B][/COLOR]

Donc tout naturellement, le contraire (afficher les lignes), c'est :
Code:
[COLOR="DarkSlateBlue"]Rows("38:42").EntireRow.Hidden = [B][U]False[/U][/B][/COLOR]

Bonne soirée
 
Dernière édition:

francis15

XLDnaute Occasionnel
Re : Masquer des lignes sous condition

Je chercher un jolie compliment pour te remercié, mais je n'ai rien trouvé de mieux que ton pseudo qui te va comme un gant
je ne vais pas me remettre sur mon fichier ce soir, quoi que je suis impatient de voir et comprendre, et de vérifié mes nouvelles capacités, grâce a toi, mais mon boulot m'oblige a me coucher pour me reposer un peu.
merci, vraiment, beaucoup
et je repasse par ici, prochainement pour te dire si j'ai réussiet si celà marche.
merci
Francis
 

Excel-lent

XLDnaute Barbatruc
Re : Masquer des lignes sous condition

J'ai testé la macro sur mon PC avant de la mettre sur le forum, elle fonctionne.

Mais si tu as le moindre soucis ou envi de plus de détail sur un point particulier, pas de problème tu peux revenir ici!

Merci pour le compliment, sympa :)

A+
 

francis15

XLDnaute Occasionnel
Re : Masquer des lignes sous condition

en fait pas pu me coucher sans essayer, j'ai tatonné un peu pour mettre ça ou il falait, pas sur d'avoir tout compris, mais ça marche impec, j'ai essayer toutes les configues liés a mes differents mfc, + cette macro, et c'est mieux que sur le plan!
Je viens de temps en temps ici, et je connais le sérieux de ce forum et je sais que j'ai toujours une réponse rapide à mes problèmes.
merci pour le temps que tu as passé pour moi et à ta pédagogie.
Passe une bonne nuit
Francis (un peu plus grandi ce soir)
 

francis15

XLDnaute Occasionnel
Re : Masquer des lignes sous condition

Bonjour
j'ai un message d'erreur par moment, et entre autre quand je fait un copié-collé, entre la cellule: b2 et b6, voici le message:erreur d'éxécution'1004': Impossible de définir la propriété Hidden de la classe Range.
et quand je clic sur "debogage", la ligne :"Rows("38:42").EntireRow.Hidden = True," est en jaune
quel est le probléme ?
Francis
 
Dernière édition:

Excel-lent

XLDnaute Barbatruc
Re : Masquer des lignes sous condition

Bonsoir Francis15,

J'ai re-testé macro sur une feuille blanche (faute de pouvoir le faire sur ton fichier), j'ai tout essayé :
-> saisie normal
-> copier coller de ... vers B6, de B6 vers ...
-> couper coller ....
-> étirer vers le bas, vers le haut, ...
-> cellules contenant du texte, des chiffres

=> aucun soucis.

Seul hic, mais cela ne génère pas de message d'erreur :
Lorsque la cellule B6 contient une formule (saisie à la mano, copier-coller), il ne se passe rien! Il réagit comme si la cellule était vide!

Pour palier à ce problème, remplacer la macro par celle ci-dessous :
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
'Macro enregistré par Excel-lent

On Error GoTo fin

If Target.Column = 2 And Target.Row = 6 Then

   If Range("B6") [COLOR="Blue"][B]<>[/B][/COLOR] "" Then
       Rows("38:42").EntireRow.Hidden = [COLOR="Blue"][B]False[/B][/COLOR]
   Else
       Rows("38:42").EntireRow.Hidden = [COLOR="Blue"][B]True[/B][/COLOR]
   End If

End If

fin:

End Sub

En bleu les modifications

Sinon rien d'anormal! Tout est ok!

Faudrait voir ton fichier pour en savoir plus.

Peux-tu en mettre un extrait ici? Nous permettant ainsi de recréer les conditions du problème, le comprendre, et si cela est dans nos compétences : le solutionner.

Bonne soirée
 

Excel-lent

XLDnaute Barbatruc
Re : Masquer des lignes sous condition

Bonsoir,

francis15 à dit:
Comment je fais pour envoyer un fichier ?

Lorsque tu écrit ton nouveau post, clic en bas sur "aller en mode avancé".

Dans la liste des icones au dessus, il y a un trombone!

Clic dessus, c'est pour insérer un fichier à ton post (que cela soit une photo, un fichier excel, un zip, la technique est la même).

Dans la nouvelle fenêtre, clic sur parcourir, indique où se trouve ton fichier sur ton disque dur, clic sur "envoyer", puis fermer la fenêtre.

Tu retourne ainsi sur ton post que tu peux continuer à le modifier, puis clic sur "envoyer la réponse" pour valider ton post (+pièce jointe).

PS. : pour des raisons évidente de place sur le serveur, tu es limité à 48,8 Ko. Si tu as dépersonnalisé et enlever TOUT ce qui est inutile, ça rentre largement.

ATH
(=A Tout à l'Heure)
 
Dernière édition:

Fo_rum

XLDnaute Accro
Re : Masquer des lignes sous condition

Salut,

le problème vient de la protection des feuilles. Essaie :
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
  If Target.Address = "$B$6" Then
    ActiveSheet.Unprotect  [COLOR="Green"]'Déprotège (sans mot de passe)[/COLOR]
    Rows("38:42").EntireRow.Hidden = IIf(Target = "", 0, 1)
    ActiveSheet.Protect  [COLOR="Green"]'reprotège (sans mot de passe)[/COLOR]
  End If
End Sub
 

francis15

XLDnaute Occasionnel
Re : Masquer des lignes sous condition

bonjour
Sub masque()
'
' masque Macro
' Macro enregistrée le 06/02/2009 par francis
'

'
ActiveSheet.Unprotect Password:="123"
Rows("38:44").Select
Selection.EntireRow.Hidden = True
ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True, Password:="123"
End Sub
 
Dernière édition:

Excel-lent

XLDnaute Barbatruc
Re : Masquer des lignes sous condition

Bonjour,

Voici ton code simplifié :

Code:
Sub MasqueLignes()
[COLOR="Green"]' Masquer les lignes 38 à 44[/COLOR]

    ActiveSheet.Unprotect Password:="123"      [COLOR="Green"]'Enlève la protection[/COLOR]
    Rows("38:44").EntireRow.Hidden = True      [COLOR="Green"]'Masque les lignes 38 à 44[/COLOR]
    ActiveSheet.Protect DrawingObjects:=True, Contents:=True,
        Scenarios:=True, Password:="123"         [COLOR="Green"]'Ces 2 lignes remettent la protection[/COLOR]

End Sub

Comme indiqué, tout ce qui suit le signe ' n'est pas pris en compte par Excel lors de l'exécution de la macro.

Il s'agit de commentaires pour t'aider plus tard à te souvenir de ce que fais ta macro, pour d'éventuelles améliorations, modifications.

Comme tu vois, un commentaire peut se mettre sur une ligne entière, mais également à la fin d'une ligne.

Bonne soirée
 

Discussions similaires

Statistiques des forums

Discussions
312 508
Messages
2 089 143
Membres
104 050
dernier inscrit
Pepito93100