Comment forcer a accepter macro

Bonjour,

J'ai un fichier sur excel 2007 qui possède des codes vba, un des codes est d'enregistré le nom d'utilisateur qui modifie le fichier dans un fichier txt.

Pour ne pas faire accepter en permance toutes les macros, j'ai créé une signature électronique avec selfcert et enregistré mon fichier avec cette signature.

Moi même, j'ai pu mettre : accepter toutes les macros de "test", et j'ai coché faire confiance à cette signature.

Par contre, tous mes collègues qui ne vont pas activer la macro par le message option au dessus de la page, peuvent faire ce qu'ils veulent dans le fichier et mon fichier log n'enregistre rien.

Une solution ?

Bonjour mat46007

En réalité je n'ai toujours pas trouver non plus de forcer l'utilisation des macros

Par contre une solution intermédiaire consiste à masquer toutes les feuilles sauf une (par ce qu'on ne peut masquer toutes les feuilles) et mettre dans

WorkBook_Open 

un

MsgBox

du style "Vous devez accepter les Macro pour continuer"

conclusion

SI l'utilisateur n'a pas validé les macros

AORS

toutes les feuilles sont masquées (sauf une qui indique par exemple que le logiciel ne peut être utilisé qu'avec les macros)SINON

par VBA (puisque les macro ont été accepté) tu "démasque" toutes les feuilles et 'utilisateur peut commencer à travaillerFIN SI


Désolé

andrea73 a écrit :

En réalité je n'ai toujours pas trouver non plus de forcer l'utilisation des macros

en général on dit :

En réalité je n'ai toujours pas trouver non plus le moyen de forcer l'utilisation des macros

Bonjour Andrea73

En effet, cela peut être une parade.

je garde cette idée de coté.

Bonjour,

Une vieille procédure réactualisée.

Cdlt.

Option Explicit

Private Sub Workbook_Open()
Dim ws As Worksheet

    Application.ScreenUpdating = False

    For Each ws In ThisWorkbook.Worksheets
        ws.Visible = True
    Next ws

    ThisWorkbook.Worksheets(1).Visible = xlVeryHidden

End Sub

Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim i As Long

    Application.ScreenUpdating = False

    With ThisWorkbook
        .Worksheets(1).Visible = True
        For i = .Worksheets.Count To 2 Step -1
            .Worksheets(i).Visible = xlVeryHidden
        Next i
    End With

End Sub

Bonjour,

je viens d'essayer et cela e fonctionne pas, surement parce que j'ai deja du code dans thisworkbook open :

j'ai ceci :

Private Sub Workbook_Open()
Dim ws As Worksheet

    Application.ScreenUpdating = False

    For Each ws In ThisWorkbook.Worksheets
        ws.Visible = True
    Next ws

    ThisWorkbook.Worksheets(1).Visible = xlVeryHidden

Sheets(MonthName(Month(Date))).Activate
ActiveSheet.Cells(3, (1 + Day(Date))).Select
Derlign = ActiveSheet.Cells(65536, (1 + Day(Date))).End(xlUp).Row
Range(ActiveCell, ActiveCell.Offset(Derlign - 3, 0)).Select

utilisateur = Environ("username")
nomutilisateur = utilisateur

If utilisateur = "U00045" Then
        nomutilisateur = "mat"
end if
end sub

End If

Bonjour Mat

26etlacamarche.xlsm (23.67 Ko)

Re,

Ou est le problème?

Essaie cette modification en adaptant le nom de la feuille à masquer..

Cdlt.

Private Sub Workbook_Open()
Dim ws As Worksheet
Dim ACell As Range
Dim User As String, sMonth As String
Dim lRow As Long

    Application.ScreenUpdating = False

    For Each ws In ThisWorkbook.Worksheets
        ws.Visible = True
    Next ws

    ThisWorkbook.Worksheets("Feuil1").Visible = xlVeryHidden

    Application.ScreenUpdating = True

    User = Environ("username")
    'User = Application.UserName    'alternative
    sMonth = MonthName(Month(Date))

    MsgBox "Bonjour " & User

    With ThisWorkbook.Worksheets(sMonth)
        .Activate
        'ActiveCell ???
        Set ACell = .Cells(1, 1 + Day(Date))
        lRow = .Cells(Rows.Count, 1 + Day(Date)).End(xlUp).Row
        .Range(ACell, ACell.Offset(lRow - 3, 0)).Select
    End With

End Sub

Bonjour Jean Eric,

j'ai recopié ton code, mais rien ne se passe.

Bonjour andrea73,

J'ai recopié le code de ton fichier, c'est fonctionnel.

Par contre, le fait d'inserer une feuille, a modifié l'ordre de mes onglets. Cet ordre était utilisé pour recopier des cases de chaque mois sur une feuille.

Peux t on mettre cette feuille 1 comme dernier onglet au lieu de premier onglet ?

Bonjour mat46007

Excuse moi je viens de voir ta question !

J'ai essayé ça marche aussi

voici les codes à modifier

Private Sub Workbook_Open()
Dim ws As Worksheet

    Application.ScreenUpdating = False

    For Each ws In ThisWorkbook.Worksheets
        ws.Visible = True
    Next ws
    ' le numero 13 (ci-dessous) est arbitraire c'est juste pcq 12 mois +1 feuille masquee = 13
    ' tu peux le remplacer le n° de TA dernière feuile !
    ThisWorkbook.Worksheets(13).Visible = xlVeryHidden ' le numero 13 est arbitraire

et

Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim i As Long

    Application.ScreenUpdating = False

    With ThisWorkbook
        .Worksheets(13).Visible = True
'       il faut modifier cette boucle par sa version nom commentee
'
'        For i = .Worksheets.Count To 2 Step -1
'            .Worksheets(i).Visible = xlVeryHidden
'        Next i
        For i = 1 To 12
            .Worksheets(i).Visible = xlVeryHidden
        Next
    End With

Bye

Bonjour Andrea,

Cela a l'air de fonctionner, je dit "cela a l'air" car pendant un moment, tous mes onglets était visible au demarrage malgré l'ajout de la modif. Quand j'ai redemarré le pc, c'est redevnu bon.

Il faut savoir que j'ai, avec la feuil de demande d'activation des macros, 25 onglets, et quand je quitte le fichier, j'ai les 25 onglets qui se fermer 1 par 1, pas très joli à voir.

Est on obligé de mettre un code dans Workbook_BeforeClose ? car je crois avoir compris que c'est lui qui ferme tous les onglets.

Bonjour mat46007

mat46007 a écrit :

Est on obligé de mettre un code dans Workbook_BeforeClose ?

OUI
mat46007 a écrit :

je crois avoir compris que c'est lui qui ferme tous les onglets.

OUI
mat46007 a écrit :

se fermer 1 par 1, pas très joli à voir.

bah oui ! mais il faut savoir ce qu'on veut ! (non je rigole ! )

La solution c'est de mettre :

au début des deux procédures Open Et BeforeClose

Application.ScreenUpdating = False

et à la fin des deux procédures Open Et BeforeClose

Application.ScreenUpdating = True

même si théoriquement ce n'est pas obligatoire, mais par sécurité mais le qd même

Mais il y a deja :

Application.ScreenUpdating false et true !


j'ai changé "xlVeryHidden" par "false"

For i = 1 To 24

.Worksheets(i).Visible = False 'xlVeryHidden

Next i

End With

c'est concluant mais je ne sais pas l'incidence de ce changement sur la fonctionnalité.

Autre question :

Ce code fonctionne aussi en mode partagé ? chacun des utilisateurs verra apparaitre le message et le classeur se refermera sans bug ?

(re)

mat46007 a écrit :

Mais il y a deja :Application.ScreenUpdating false et true !

Effectivement je n'avais pas (re)regardé le code avant de répondre !

Par contre avec cette modif :

mat46007 a écrit :

j'ai changé "xlVeryHidden" par "false"

tes feuilles ne sont pas visibles mais peuvent le devenir !

simplement en cliquant p.ex sur un onglet quelconque et "Afficher..." et toutes les feuilles sont sélectionnables pour être visibles !

Pour ce qui est de :

andrea73 a écrit :

Ce code fonctionne aussi en mode partagé ? chacun des utilisateurs verra apparaitre le message et le classeur se refermera sans bug ?

Le mode partagé réagit "souvent différemment" ... donc il faut essayer !

Je viens de reessayer cela n'est pas concluant le "false "

comme je me trouvais sur l'avant dernier onglet, cela avait l'air fluide.

Après de nouveau essai, en me positionnant sur des onglets du debut, meme phenomene.

Je remarque une grosse lenteur au demarrage, juste après avoir active les macro. Alors que c'etait rapide avant .

Y aurait il une raison ? La page de garde ne fait elle pas juste une pause en attendant d'activer les macros ?

Bon, j'ai modifié le code et cela à l'air fonctionnel :

Private Sub Workbook_BeforeClose(Cancel As Boolean)
ThisWorkbook.Worksheets(25).Visible = xlVeryHidden
Sheets("Feuil1").Activate
Application.ScreenUpdating = False

Dim i As Long

    With ThisWorkbook
        .Worksheets(25).Visible = True

        For i = 1 To 24
            .Worksheets(i).Visible = xlVeryHidden

        Next i
    End With
Application.ScreenUpdating = True

End Sub

(re)

Tant mieux !

Bonne utilisation... Alors !

Rechercher des sujets similaires à "comment forcer accepter macro"