masquer des colonnes quand la feuille est protégée

  • Initiateur de la discussion yann
  • Date de début
Y

yann

Guest
Bonsoir à tous,

j'ai fait un bouton qui me permet de masquer des colonnes.

Sub masquer()
If Columns("D:F").EntireColumn.Hidden = False Then
Columns("D:F").EntireColumn.Hidden = True
Else
Columns("D:F").EntireColumn.Hidden = False
End If
End Sub

Seulement il ne fonctionne pas quand la feuille est protégée!

Que faut il rajouter?

Merci
 
L

LaurentTBT

Guest
Salut Yann,

Au début de ta procédure, tu ajoutes:

Activesheet.Unprotect password:="TonMotDePasse"
( si tu n'as pas de mot de passe, activesheet.unprotect suffit)

A la fin de ta procédure, tu rajoutes le contraire:

Activesheet.Protect password:="TonMotDePasse", _
DrawingObjects:=True, _
Contents:=True, _
Scenarios:=True
Rq: ceci est valable avec excel 2000. Avec excel XP, je crois que tu peux avoir de nouveaux arguments à la fonction Protect (voir dans ce cas l'aide de VBA).

A plus.
 
Y

yann

Guest
Je voudrais aussi pouvoir masquer des lignes... Toutes les lignes (à partir de la ligne 4 jusqu'à la ligne 86) dont la cellule de la colonne B est vide.

Quelqu'un peut il m'aider?

En tout cas merci pour votre précieuse aide jusqu'à présent.

yann
 
D

DJN90

Guest
Bonsoir,

Essaie ta macro construite comme suit :

Sub masquer()
ActiveSheet.Unprotect
If Columns("D:F").EntireColumn.Hidden = False Then
Columns("D:F").EntireColumn.Hidden = True
Else
Columns("D:F").EntireColumn.Hidden = False
End If
ActiveSheet.Protect
End Sub

Est-cela que tu souhaites

Dan
 
Y

yann

Guest
Merci à vous deux,

ça marche parfaitement. Je progresse de jour en jour à vitesse grand V grâce à vous... :)

Vous avez qq chose à me proposer pour masquer mes lignes vierges???

yann
 
D

DJN90

Guest
Tu peux utiliser le filtre automatique du menu données.

Pour ce faire, sélectionne la cellule de départ dans la colonne B (ex B3) puis menu "données -> filtre automatique".

En sélectionnant la flèche, tu obtiens une liste des valeurs se trouvant dans cette colonne.
Après la dernière valeur de cette liste, tu trouves une option "vide" et "non vide"
Choisit "vide" pour cacher les lignes contenant les cellules vides.

Dan
 
L

LaurentTBT

Guest
Sinon, par VBA:

For i=4 to 86
if range("B1").cells(i+1,1)="" then
range("B1").cells(i+1,1).entirerow.visible=false
end if
next i

J'ai pas testé, mais ça devrait pas être loin de la solution...
 
Y

yann

Guest
Oui c'est vrai. Mais cette feuille est pour mon amie et je voudrais que cette tâche puisse se faire à partir d'un bouton car moins elle aura besoin d'y gratter, mieux se sera :)))

En plus, ces lignes ont souvent besoin d'être à nouveau affichées pour pouvoir y rentrer des nouvelles données, et d'autres ont souvent besoin d'être masquées quand on vient d'effacer des données.

C'est pour cela que je cherche une petite macro qui me cherchera si la cellule de la colonne B est vide, et qui en cachera la ligne le cas échéant.

yann
 
Y

yann

Guest
Oh la la,

Je suis vraiment désolé... Je viens de me rendre compte que j'avais oublié de vous préciser quelque chose.

Je réexplique :
Ce bouton doit me permettre de masquer ET de réafficher les lignes (4 à 86)dont la cellule de la colonne B est vide. Un bouton masquer/afficher quoi... :)

Encore désolé de vous avoir fait perdre votre temps :(

ya encore quelqu'un pour la soluce???

yann
 
L

LaurentTBT

Guest
J'aurais mieux fait de tester!!!
Au lieu de entirerow.visible=false, il faut mettre
entirerow.hidden=true, comme tu l'avais fait pour les colonnes!
Au final, ça donne cela:

Sub CacherLignesSiBVides()
For i = 4 To 86
If Range("B1").Cells(i + 1, 1) = "" Then _
Range("B1").Cells(i + 1, 1).EntireRow.Hidden = True
Next i
End Sub

Cette fois, ça doit être bon, enfin j'espère.
 
Y

yann

Guest
ça les cache bien, mais ya quelques bugs...

Si une cellule autre que de la colonne B n'est pas vide, la ligne n'est pas masquée.
si je reclique sur le bouton, mes lignes ne réapparaissent pas.

j'ai dû rajouter "end if" avant "next i", car sinon ça m'affiche "next sans for"

yann
 
Y

yann

Guest
Voilà la feuille en question...

je voudrais que le bouton "masquer/afficher lignes vides" me permettent de masquer toutes les lignes dont la colonne compte client n'est pas renseignée.
Dans le fichier que j'ai envoyé, il ne devrait donc y avoir que 4 lignes non masquée (les 4 dont le numéro de compte client est renseignée).

Si je clique de nouveau dessus, toutes les lignes doivent réapparaitre, comme à l'état initial. J'espère ne pas être trop obscur!!!

yann
 

Pièces jointes

  • Classeur2.xls
    33 KB · Affichages: 85
  • Classeur2.xls
    33 KB · Affichages: 91
  • Classeur2.xls
    33 KB · Affichages: 90
@

@+Thierry

Guest
Salut Yann, DJN90, LaurentTBT et le forum

Pour moi le plus simple pour ton problème est un ToggleButton... Et une petite astuce avec SpecialCells....

Tout est dans le fichier joint....

Pour DJN, une fois que l'on sait que l'on sait que l'on parle d'une Row ou d'une Column, il n'est plus nécessaire de préciser EntireRow ou EntireColumn.Hidden...

Columns("X").Hidden = True suffit

Par contre si on fait
For Each Cell in Range
If cell.value = "" then
Cell.EntireRow.Hidden = True <= le EntireRow est nécessaire (of Course)


Je vous laisse voir ci-joint...

Bon Aprèm
@+Thierry
 

Pièces jointes

  • Yann.zip
    14.8 KB · Affichages: 28
  • Yann.zip
    14.8 KB · Affichages: 32
  • Yann.zip
    14.8 KB · Affichages: 32
D

DJN90

Guest
Grand merci à Thierry pour cette instruction plus facile qui je connaissais pas et qui permet surement de gagner en rapidité.

Par ailleurs j'avais pensé à une macro qui utiliserait l'instruction "Select case" "case is" pour vérifier le contenu de la cellule active...

Bref attendons de voir si Yann a encore besoin d'aide sur ce sujet.

Dan
 

Discussions similaires

Réponses
3
Affichages
166

Statistiques des forums

Discussions
314 653
Messages
2 111 579
Membres
111 207
dernier inscrit
max008