Protéger mes cellule en laissant la macro

Résolu/Fermé
camo - 12 déc. 2009 à 17:11
 cococamo - 16 déc. 2009 à 18:02
Bonjour,

J'ai créer un tableau avec des fonction et une macro.
Je voudrais protéger mes cellules pour que l'on ne puisse pas modifier mes fonction. Mes si je fait protège fcellule ou proptège feuille je ne peut plus faire ma macro quiest de masquer mes colonne vide

Avez-vous une idée pour que je puisse protéger mes cellules et que ma macro fonctionne quand même

Je vous remerci de votre aide
A voir également:

5 réponses

gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 4 684
12 déc. 2009 à 17:30
bonjour

Dans ta macro il faut déprotéger au début puis remettre la protection en fin.
0
Je me sui smal expliquer,

Ma macro que j'ai créer est pour masquer des colonnes dont mon résulatat d'une cellule sera = à zéro

Les personnes qui devront compléter le tableau devront cliquer sur le bouton de la macro pour masquer les colonnes afin de réduire le tableau.

Mon tableau est plein de formule, et je voudrais que les personne qui doivent le compléter ne touche pas aux formule.
Donc pour cela que je voudrais savoir comment protéger mes cellules ou il y a des formules et que ma macro fonctionne toujours même si ma cellule qui la fait fonctionner est protégée.

Merci de votre aide
0
gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 4 684
12 déc. 2009 à 21:48
bonjour

Non tu avais bien expliqué mais ma réponse était trop laconique
Public Sub ta_macro()
ActiveSheet.Unprotect ("mot de passe éventuel")
' ton code
ActiveSheet.Protect ("mot de passe éventuel", autres paramètres éventuels)
End Sub

Si tu codes ainsi ta macro elle peut se dérouler car tu déprotèges mais en fin tu remet la protection.
0
J'ai essayé d'introduire cette fonction dans ma macro mais cela ne fonctionne pas ou dois-je l'écrire car voici ma macro d'origine :

Sub cache_col()
'
' cache_col Macro
' Macro enregistrée le 26/11/2009 par Claudine Camorali
'
' Touche de raccourci du clavier: Ctrl+o
'
Application.Run _
"'Modèles tableau préparation declaration annuelle 7.1.xls'!cache_col"
Application.Goto Reference:="cache"

Dim ligne As Long, col As Integer
For col = 1 To 67
For ligne = 2 To 19
If Cells(ligne, col).Value <> 0 Then Exit For
Next ligne
If ligne > 19 Then Columns(col).Hidden = True
Next col
End Sub


Sub MasquerColonne()
Dim I As Integer, J As Integer
I = 5
Dim CelluleSelectionnee
CelluleSelectionnee = ActiveCell.AddressLocal
Do While Cells(15, I).Value <> ""
I = I + 1
Loop
I = I - 1
J = 5
For J = 5 To I
If Cells(25, J).Value = 0 Then
Columns(J).Select
Selection.EntireColumn.Hidden = True
End If
Next
Range(CelluleSelectionnee).Select
MsgBox "Traitement Terminé"
End Sub


Sub DeMasquerColonne()
Dim CelluleSelectionnee
CelluleSelectionnee = ActiveCell.AddressLocal
Cells.Select
Selection.EntireColumn.Hidden = False
Range(CelluleSelectionnee).Select
MsgBox "Traitement Terminé"
End Sub


Merci pour votre aide
0
J'ai essayé d'introduire cette fonction dans ma macro mais cela ne fonctionne pas ou dois-je l'écrire car voici ma macro d'origine :

Sub cache_col()
'
' cache_col Macro
' Macro enregistrée le 26/11/2009 par Claudine Camorali
'
' Touche de raccourci du clavier: Ctrl+o
'
Application.Run _
"'Modèles tableau préparation declaration annuelle 7.1.xls'!cache_col"
Application.Goto Reference:="cache"

Dim ligne As Long, col As Integer
For col = 1 To 67
For ligne = 2 To 19
If Cells(ligne, col).Value <> 0 Then Exit For
Next ligne
If ligne > 19 Then Columns(col).Hidden = True
Next col
End Sub


Sub MasquerColonne()
Dim I As Integer, J As Integer
I = 5
Dim CelluleSelectionnee
CelluleSelectionnee = ActiveCell.AddressLocal
Do While Cells(15, I).Value <> ""
I = I + 1
Loop
I = I - 1
J = 5
For J = 5 To I
If Cells(25, J).Value = 0 Then
Columns(J).Select
Selection.EntireColumn.Hidden = True
End If
Next
Range(CelluleSelectionnee).Select
MsgBox "Traitement Terminé"
End Sub


Sub DeMasquerColonne()
Dim CelluleSelectionnee
CelluleSelectionnee = ActiveCell.AddressLocal
Cells.Select
Selection.EntireColumn.Hidden = False
Range(CelluleSelectionnee).Select
MsgBox "Traitement Terminé"
End Sub


Merci pour votre aide
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744
14 déc. 2009 à 14:30
Salut,
Tu as trois procédures. Tu dois donc noter les lignes de code de gbinform dans les 3. En général, pour ne pas te planter, tu "déprotèges" ta feuille en début de macro (après Sub ...())et tu protèges avant la fin (donc avant la ligne End sub). Cela donne dans tes 3 procédures :
Sub cache_col()
'
' cache_col Macro
' Macro enregistrée le 26/11/2009 par Claudine Camorali
'
' Touche de raccourci du clavier: Ctrl+o
'
ActiveSheet.Unprotect ("mot de passe éventuel")
Application.Run _
"'Modèles tableau préparation declaration annuelle 7.1.xls'!cache_col"
Application.Goto Reference:="cache"

Dim ligne As Long, col As Integer
For col = 1 To 67
For ligne = 2 To 19
If Cells(ligne, col).Value <> 0 Then Exit For
Next ligne
If ligne > 19 Then Columns(col).Hidden = True
Next col
ActiveSheet.Protect ("mot de passe éventuel", autres paramètres éventuels)
End Sub

Sub MasquerColonne()
Dim I As Integer, J As Integer
ActiveSheet.Unprotect ("mot de passe éventuel")
I = 5
Dim CelluleSelectionnee
CelluleSelectionnee = ActiveCell.AddressLocal
Do While Cells(15, I).Value <> ""
I = I + 1
Loop
I = I - 1
J = 5
For J = 5 To I
If Cells(25, J).Value = 0 Then
Columns(J).Select
Selection.EntireColumn.Hidden = True
End If
Next
Range(CelluleSelectionnee).Select
MsgBox "Traitement Terminé"
ActiveSheet.Protect ("mot de passe éventuel", autres paramètres éventuels)
End Sub

Sub DeMasquerColonne()
Dim CelluleSelectionnee
ActiveSheet.Unprotect ("mot de passe éventuel")
CelluleSelectionnee = ActiveCell.AddressLocal
Cells.Select
Selection.EntireColumn.Hidden = False
Range(CelluleSelectionnee).Select
MsgBox "Traitement Terminé"
ActiveSheet.Protect ("mot de passe éventuel", autres paramètres éventuels)
End Sub
0
Merci merci beaucoup
mais j'ai encore un petit soucis pouvez-vous me dire sur quelles données je me suis trompée sur ma macro car elle fonctionne pas sur toutes les colonnes
Merci encore de votre aide
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744
14 déc. 2009 à 22:13
Il faudrait nous en dire plus sur votre tableau. Le mieux serait d'en faire une copie sans données confidentielles avec quelques petites explications sur ce que vous désirez et le placer ici grâce à c-joint par exemple.
0
voici mon tableau :
Il a 67 colonnes avec differents fluides


Catégorie de fluide HFC - R23 HFC - R32 HFC - R143a
Stock neuf 01/01/09 0 5 6
Stock récupéré 01/01/09 0 0 6 5
Quantités achetées 0 4 7
Quantités chargées dans les équipements 0 0 0 3
Quantités cédées à d'autres opérateurs 0 0 0 5
Quantités récupérées Quantités totales récupérées 0 0 5 6
Quantités traitées et recyclées 0 0 4 2
Quantités traitées et régénérées 0 0 3 2
Quantités traitées et détruites 0 0 0 1
Quantités remises aux distributeurs 0 0 0 2
Quantités réintroduites 0 0 0 3
Stock neuf et recupéré théoriques 0 0 20 21
Stock neuf 31/12/09 6 10 2 6
Stock récupéré 31/12/09 0 9 4 8
Somme des quantités par fluide 6 19 53 77
Cohérence stock -100 -100 -280 44
Cohérence récupéré 0 0 -2 -4
Nombre d'intervention 0 0 1 1


toutes les cellules ou il y a des chiffres il y a des formules et ma macro doit dire quand ma cellule 27 = 0 masque la colonne
Et depuis que j'ai modifié ma macro avec la mode protection et déprotection ma macro ne fonctionne pas sur toutes les colonnes

Merci de votre aide
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744
15 déc. 2009 à 13:12
Bonjour,
Je ne comprends pas tout. Désolé. Tu veux :
Sur 67 colonnes, si la cellule ligne 27 = 0 alors on masque la colonne. C'est bien cela? Si oui ceci devrait faire l'affaire :

Sub MasquerColonne()
Dim I As Integer
ActiveSheet.Unprotect ("mot de passe éventuel")
For I = 1 to 67
If Cells(27, I).Value = 0 Then
Columns(I).EntireColumn.Hidden = True
Enf If
Next I
MsgBox "Traitement Terminé"
ActiveSheet.Protect ("mot de passe éventuel", autres paramètres éventuels)
End Sub

Enregistre ton fichier sous un autre nom, entre ce code dans un module, teste le et reviens nous dire ce qu'il en est.
0
Bonjour,

J'ai fait ma blonde car ma formule fonctionne mais mon collègue qui devais rentré les formules dans toutes les cellules avait fait des boullettes dans les copies de cellules c'est pour cela que ma fonction ne marcher pas.

Je vous remerci très sincèrement pour l'implication de votre personne afin de m'aider dans ma tache.

Merci encor
0