Boostez vos compétences Excel avec notre communauté !
Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force.
Apprenez, échangez, progressez – et tout ça gratuitement !
👉 Inscrivez-vous maintenant !
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
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 conditionTHEN (=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.
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 :
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
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)
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
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.
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.
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
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.
- Navigue sans publicité - Accède à Cléa, notre assistante IA experte Excel... et pas que... - Profite de fonctionnalités exclusives Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel. Je deviens Supporter XLD