Visibilité des cellules/ objets


Masquer la ligne de la cellule active : activecell.entirerow.hidden = true/ false
Masquer la colonne de la cellule active : activecell.entirecolumn.hidden = true/ false
Cacher plusieurs lignes en même temps, en faisant une union des lignes concernées : news

Cacher plusieurs feuilles en même temps : worksheets(array("Sheet1","Sheet2","Sheet3")).Visible=xlHidden

Macros pour cacher et afficher des feuilles
: news

Masquer un commentaire : activesheet.comments(1).visible=false/true ou activesheet.shapes("commentaire 1").visible=false/true

Masquer un objet
(dessin, objet de la barre formulaires, etc.) : activesheet.shapes("nombojet").visible=false/true

Cacher Excel, pour ne montrer qu'un userform
: activewindow.visible = false :Userform1.show ou bien application.visible=false

Sélection de cellules visible

application.range("A2", range("A65536").end(xlUp).Specialcells(xlCelltypeVisible)).select
debug.Print application.range("A2", range("A2").end(xldown)).Specialcells(xlCelltypeVisible).address

Sélection & impression des feuilles visibles

Sub selectionsheetsVisible()
dim LstFeuilles() 'le tableau des feuilles affichées
dim i As Integer 'pour chaque feuille de sheets
dim j As Integer 'le nombre d'éléments du tableau, 1 par feuille affichée
for i = 1 to sheets.count
if sheets(i).Visible = true then
redim preserve LstFeuilles(j)
LstFeuilles(j) = sheets(i).Index
j = j + 1
end if
next
sheets(LstFeuilles).select
end Sub 'Merci catherine

Cacher les feuilles visibles & afficher les feuilles masquées & Inversement !!!

Sub toggleHidesheets()
dim sh As Worksheet
for each sh In activeworkbook.worksheets
select Case sh.Visible
Case xlSheetVisible: sh.Visible = xlSheetHidden
Case xlSheetHidden: sh.Visible = xlSheetVisible
end select
next sh
end Sub

Cacher les colonnes et les lignes vides

Sub MasquerLiCol()
dim nli As Integer, ncol As Integer
for nli = 1 to activesheet.Usedrange.rows.count
if application.Worksheetfunction.counta(rows(nli)) = 0 then
rows(nli).Hidden = true
end if
next nli
for ncol = 1 to activesheet.Usedrange.Columns.count
if application.Worksheetfunction.counta(Columns(ncol)) = 0 then
Columns(ncol).Hidden = true
end if
next ncol
end Sub

Cacher une colonne si une des cellules a un le mot "Préposé" dedans, par DeLand

Option Explicit
Option Compare Text
Sub hideprops()
dim c As range
for each c in usedrange
if c.String Like "*Préposé*" then
c.EntireColumn.Hidden = true
end if
next c
end Sub
'PS : Il y a une autre manière d'effectuer ceci, avec la méthode de recherche find, ce qui est d'ailleurs plus efficace.

Additionner les cellules visibles d'une plage

function SumVisiblecells(cellstoSum As Object)
application.Volatile
for each cell In cellstoSum
if cell.rows.Hidden = false then
if cell.Columns.Hidden = false then
total = total + cell.value
end if
end if
next
SumVisiblecells = total
end function


Faire une recopie incrémentée dans une plage qui comprend des cellules cachées (Autofill x Hidden cells) : news

 


 

Protection

Excel offre la possibilité de protéger une feuille, ses cellules ou ses objets. Pour cela, il faut que les cellules/ objets soient verrouillés, il suffit de cocher la propriété "verrouillé" dans l'onglet "propriétés" de la boîte "format" de l'objet, à laquelle vous accéderez facilement en cliquant à droite sur l'objet en question.

Qui plus est, si vous ne voulez pas que l'utilisateur voit les formules, vous pouvez protéger une feuille en cochant la propriété "masquée" dans l'onglet propriétés de la boîte format.


Protéger une feuille avec un mot de passe : activesheet.Protect password = "VotreMotdePasse", DrawingObjects:=true, contents:=true, Scenarios:=true

Déprotéger une feuille
: activesheet.unprotect password = "VotreMotdePasse"
Protéger des feuilles en batch : news
Protéger contre la copie de cellule : news

Afficher l'onglet protection de la boîte de dialogue format d'une cellule
: Application.Dialogs(Excel.XlBuiltInDialog.xlDialogCellProtection).Show

Afficher le diaogue de protection d'une feuille
: Application.Dialogs(Excel.XlBuiltInDialog.xlDialogProtectDocument).Show

Verrouiller les cellules et protéger la feuille

Sub protection()
cells.select
selection.Locked = true      'cellule verrouillée
selection.formulaHidden = false    'formule non masquée
activesheet.Protect DrawingObjects:=true, contents:=true, Scenarios:=true
activesheet.Unprotect
end Sub

Classeur protégé ou non : news
Demander un mot de passe avec 3 essais : news
Mot de passe mémorisé dans la base de registres
De Kent Schederin, sujet "Re: Encryting password", le vendredi 22 septembre 2000 14:26

Public strPassword As String
Sub Password()
strPassword = InputBox("Set password")
SaveSetting "Excel", "Protection", "PW", strPassword
End Sub

Sub OpenPassword()
Dim z As String, x As String
z = GetSetting("Excel", "Protection", "PW", strPassword)
igen:

x = InputBox("Set Password")
If x = z Then
MsgBox "Password correct"
Exit Sub
Else
strPassword = InputBox("Set new password")
SaveSetting "Excel", "Protection", "PW", strPassword
If MsgBox("Incorrect password. Do you want to try again", vbYesNo, "Index utbildning") = vbYes Then
GoTo igen
End If
End If
End Sub


Trouver le mot de passe de protection d'une feuille : news
Guaranteed Excel 97/2000 Decryptor - just released. http://www.ssl.stu.neva.ru/psw/crack/guaexcel.html


Auto-protéger une cellule
de Harlan Grove, le samedi 28 août 1999 08:09 sur microsoft.public.excel.worksheet.functions, sujet "Re: how to auto-protected a cell"

Private Sub Worksheet_Change(ByVal Target As Excel.range)
application.enableevents = false
Target.Worksheet.Unprotect
Target.Locked = true
Target.Worksheet.Protect
application.enableevents = true
end Sub


Protéger seulement A1 après saisie dans A1
Message de H. S., le mardi 12 octobre 1999 16:39 sur microsoft.public.fr.excel, sujet "Protection auto?"
Un peu de précision:
-Tu dois d'abord sélectionné toute ta feuille puis dans format\cell\protection décoché l'option Locked sinon l'ensemble de ta feuille est protégé.
-Il faut précise l'adresse de ta cellule. Par exemple pour protéger uniquement la cellule A1 après une saisie :

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
if target.address(false,false)="A1" then
ActiveSheet.Unprotect
Target.Locked = True
Target.FormulaHidden = False
ActiveSheet.Protect Contents:=True
end if
End Sub


Créer son propre message concernant la protection
(pour remplacer le message excel)

- Sélectionne toutes les cellules de la feuille (Ctrl-A)
- Fais Format -> Cellules -> Protection et désactive l'option "Verrouillée"
- Fais Données -> Validation
- Choisis comme critère "Personnalisé"; dans la zone Formule, tape FAUX
- Entre ton message personnalisé dans l'onglet "Message d'erreur", puis OK
- Protège la feuille

Le message d'erreur sera celui de la validation. Comme toutes les cellules sont déverrouillées, le message standard ne s'affichera pas, et comme le critère de validation est FAUX, il sera impossible à l'utilisateur de modifier le contenu des cellules.

 


 

Protection de l'interface


Protection de barres d'outils (news microsoft.public.fr.excel, du 24/07/99, de P. F.)

'Cette procédure n'enlève pas l'option "personnaliser", mais interdit d'apporter des changements sur les barres d'outils.
Sub OutilsBarreVerrou()
dim i
for i = 1 to toolbars.count
toolbars(i).Protection = xlNoChanges
next i
end Sub
Il est bien sûr possible de ne verrouiller que certaines barres : debug.print i, toolbars(i).name permet d'obtenir la liste des noms des barres en fonction de l'index i.

Protection des barres d'outils : voir aussi xl_bo.htm


Protection avec l'option "UserInterfaceOnly" ?

Cela vous permet d'empêcher la suppression de lignes et colonnes, et la modification de la taille des cellules, ...
If ActiveSheet.ProtectionMode Then MsgBox "Feuille protégée avec l'option UserInterfaceOnly".


Protection & Filtre automatique

'Filtrer d'abord vos données, fixer la propriété "Enableautofilter" à true et protéger l'interface de l'utilisateur POUR UNE FEUILLE DONNER. Ces deux propriétés ne semblent pas être sauvegardées !! Le seul moyen de fixer ces propriétés est de faire une macro (ou passer par la boîte Propriétés de VBE)
'=> vous pourrez alors filtrer vos données.
Sub test()
worksheets("Feuil1").Protect UserInterfaceOnly:=true
worksheets("Feuil1").Enableautofilter = false
end Sub


Autres commandes réalisables sur une feuille protégée

sheets("feuil1").EnablePivotTable = True 'utiliser les tableaux croisés dynamiques
sheets("feuil1").EnableSelection = True 'pouvoir sélectionner des cellules
sheets("feuil1").EnableCalculation = True 'permettre le recalcul
Sheets("Feuil1").EnableAutoFilter = True 'permettre le filtre
Sheets("Feuil1").EnableOutlining = True 'permettre le groupage/dégroupage



Navigation dans les données d'une feuille

Lorsqu'une feuille est protégée, vous pouvez naviguer (en tabulant notamment) de cellules non protégées à cellules non protégées. Une feuille a une propriété propre à la protection appelée Enabledselection qui peut être fixée de trois manières


propriété fixée à xlnorestrictions, toutes les objets pourront être sélectionnés (mais pas forcément modifiés)
propriété fixée à xlunlockedcells, vous pourrez toujours naviguer dans les cellules non protégées, mais vous ne pourrez pas sélectionner les autres cellules.
propriété fixée à xlnoselection, aucune cellule & objet n'est utilisable.

Comment fixer la propriété EnabledSelection de la feuille


aller dans l'explorateur de projet de Visual Basic Editor, et afficher la boite de dialogue "Propriétés", dans laquelle vous trouverez la propriété en question
ou utiliser l'instruction suivante : activesheet.enabledselection = xlnorestrictions/xlunlockedcells/xlnoselection

La propriété EnableSelection doit être remise par macro sur xlUnlockedCells à chaque ouverture, car sa valeur n'est pas enregistrée avec le classeur. Voici ce qui peut être envisagé pour Excel 97-2000 (explication par L. L. le vendredi 5 mai 2000 16:40 sur microsoft.public.fr.excel, sujet "Re: cellule interdite"

- Laisser la ou les cellules que tu veux "interdire" verrouillée(s) et déverrouiller les autres.
- Active l'éditeur VBA (Alt-F11), double-cliquer sur thisworkbook et copier le code suivant dans le module (remplace "Feuil1" par le nom de la feuille concernée):

Private Sub Workbook_Open()
With Worksheets("Feuil1")
.Protect UserInterfaceOnly:=True
.EnableSelection = xlUnlockedCells
End With
End Sub

Exécute manuellement cette procédure (touche F5) la première fois. Aux prochaines ouvertures du classeur, elle interdira automatiquement la sélection des cellules verrouillées.



Sélectionner la première cellule non protégée
Proposée par Chip Pearson, cette macro boucle sur chaque feuille pour sélectionner la première cellule visible à l'écran non verrouillée

Dim Rng As Range
For Each Rng In ActiveWindow.VisibleRange.Cells
If Rng.Locked = False Then
Rng.Select
Exit For
End If
Next Rng


Colorier les cellules non verrouillées

Sub Colorunlockedcells()
dim myCell As Excel.range
'activesheet.Unprotect
for each myCell In activesheet.Usedrange
if myCell.Locked = false then myCell.Interior.ColorIndex = 5 'blue
next myCell
end Sub

 


Protection du code VBA


Comment empêcher l'accès à Visual Basic Editor

1°) Désactiver la barre d'outils VB : application.CommandBars("Visual Basic").Enabled = false
2°) Rendre inaccessible la commande du menu Outils/ Macro

Sub MasqueMenuOutilsMacros()
application.CommandBars(1).Controls(6).Controls(10).Enabled = false
end Sub

'Pour réafficher le Menu Outils, Macros :
Sub AfficheMenuOutilsMacros()
application.CommandBars(1).Controls(6).Controls(10).Enabled = true
end Sub


voir xl_vbacode.htm

verrouiller et déverrouiller le projet VBA
: news

vous pouvez aussi tester ça mais c'est une proposition moins récente que la solution ci-dessus
Declare Function FindWindowA Lib "User32" _
(ByVal lpClassName As String, ByVal lpWindowName As String) As Long

Declare Function BringWindowToTop Lib "User32" _
(ByVal hwnd As Long) As Long

Sub Test()
Dim Wbk As Workbook
BringWindowToTop FindWindowA(vbNullString, Application.Caption)
SendKeys "%{F11}^r%{F11}", True
For Each Wbk In Workbooks
If Wbk.Windows(1).Visible And _
Wbk.VBProject.Protection = vbext_pp_locked Then
Wbk.Activate
SendKeys "%{F11}{LEFT}Zaza~%{F11}", True
End If
Next Wbk
End Sub

 


Se protéger des macros virus


les options de sécurité d'office.


sous XL 97, la possibilité d'être averti de la présence de macros et la possibilité de les désactiver
sous XL 2000, définition de niveaux de sécurité, combinés à une signature électronique qui authentifie l'auteur de la macro
=> Outils/ Macro/ Sécurité, onglet Niveau de sécurité


Niveau de sécurité Haut : seuls les macros provenant de source fiable seront éxécutées, le système vérifie la présence de la signature électronique dans une liste de "Sources Fiables". Vous pouvez vous-même ajouter une signature que vous jugez fiable
Niveau moyen : le système vous demande si vous voulez exécutez la macro
Niveau bas : exécution de toutes les macros sans exception


Comment obtenir un certificat d'authentification (le prix dépend du nombre et de la taille des macros)


www.verisign.com
www.thawte.com


Annuler une certification

il est possible d'annuler (et non de supprimer) la certification en faisant Outils/Macros/Sécurité, onglet "Sources fiables"' de sélectionner le certificat et de cliquer sur "Supprimer".


Désactiver l'alerte macro sous Excel97 (de raliment, vendredi 10 novembre 2000 15:57, "Re: désactiver l'alerte macro pour un document donné")
pour ouvrir un classeur sans alerte macro, il existe deux moyens (sans enlever la protection macro excel bien sur):
- tu enregistres ta lmacro dans le dossier XLOuvrir. le désavantage, c'est que ton fichier sera ouvert ouvert à chaque fois que tu ouvriras excel
- Tu ouvres ton fichier par une macro ex: de code ci dessous: Workbooks.Open(FileName:="nomfichier"). RunAutoMacros Which:=xlAutoOpen


Créer un certificat
Laurent Mortézai, jeudi 7 décembre 2000 19:40, microsoft.public.fr.excel, sujet :"Re: Alerte Macro"

-Tu exécutes le programme SELFCERT.EXE (quelque part sur ton disque dur)
-tu ouvres Excel, puis ton fichier, puis dans l'éditeur VBA, tu fais Outils/Signature électronique, bouton Choisir, et tu sélectionnes le certificat créé précédemment
-enregistres le tout, ferme le fichier et tente de l'ouvrir: il te propose plusieurs possibilité, dont l'affichage du certificat; tu coches la case "toujours faire à confiance..." (je ne sais plus le libellé exact!). Et voilà, la prochaine fois, il ne pose plus de questions. A+