Protéger mes cellule en laissant la macro

Résolu
camo -  
 cococamo -
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
Configuration: Windows XP
Firefox 3.0.15

5 réponses

  1. gbinforme Messages postés 14930 Date d'inscription   Statut Contributeur Dernière intervention   4 744
     
    bonjour

    Dans ta macro il faut déprotéger au début puis remettre la protection en fin.
    0
    1. cococamo
       
      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
  2. gbinforme Messages postés 14930 Date d'inscription   Statut Contributeur Dernière intervention   4 744
     
    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
    1. cococamo
       
      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
    2. cococamo
       
      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
  3. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
     
    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
    1. cococamo
       
      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
  4. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
     
    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
    1. cococamo
       
      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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
     
    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
    1. cococamo
       
      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