IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Modifier une macro espion


Sujet :

Macros et VBA Excel

  1. #21
    Membre Expert Avatar de Godzestla
    Homme Profil pro
    Chercheur de bonheur
    Inscrit en
    Août 2007
    Messages
    2 403
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de bonheur
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2007
    Messages : 2 403
    Par défaut
    Le user est enregistré, meme dans le cas ou on ouvre le TCD en lecture seule et ensuite on l'enregistre sous un autre nom. (Ce cas la aussi je voudrais aussi l'éviter).
    Insère la ligne en gras du code ci-dessous dans Sub Workbook_BeforeSave de ThisWorkbook pour empécher le Saveas

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
        If SaveAsUI Then Cancel = True
    End Sub
    Est-ce que alors cela résout ton problème résiduel ?
    Est il possible de n'enregistrer le log uniquement dans le cas ou on rentre le mot de passe lors de l'ouverture du classeur quand il demande "Tapez le mot de passe autorisant l'acces en ecriture ou en lecture" ?
    Je precise que j'ai mis le mot de passe par : outil, Option, securite puis mot de passe pour la modification.
    Il me semble que oui.

  2. #22
    Membre éclairé
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2006
    Messages
    239
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2006
    Messages : 239
    Par défaut
    Peux tu me dire si le code est correct. Tout se trouve dans Thisworkbook, car il enregistre toujours le log à la fermeture? et je ne vois pas ou est l'erreur.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    Public Save_log As Boolean
    Public Wb As Workbook
     
     
     
     
    Private Sub Workbook_Open()
    Dim Wb As Workbook
    Save_Log = False
    Dim a As Long
    Dim Fs As Object, F As Object
     
    Set Fs = CreateObject("Scripting.FileSystemObject")
    Set F = Fs.GetFile(ActiveWorkbook.FullName)
    a = F.Attributes
    If F.Attributes = 32 Then
    Application.ScreenUpdating = False 'Masquer l'affichage
    Set Wb = Workbooks.Open(Filename:="\\TB\test\Service\Divers\LOG\CE")
    a = Wb.Sheets("Trace").Range("A65536").End(xlUp).Row + 1
    Wb.Sheets("Trace").Range("A" & a).Value = Application.UserName
    Wb.Sheets("Trace").Range("B" & a).Value = VBA.Date
    Wb.Sheets("Trace").Range("C" & a).Value = Now - Int(Now)
    Wb.Close True
    Application.ScreenUpdating = True
     
    End If
     
    End Sub
     
     
     
     
    Private Sub Workbook_close()
    Wb.Close Save_Log
    End Sub
     
     
     
     
    Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
    If SaveAsUI Then Cancel = True
     
    End Sub

  3. #23
    Membre Expert Avatar de Godzestla
    Homme Profil pro
    Chercheur de bonheur
    Inscrit en
    Août 2007
    Messages
    2 403
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de bonheur
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2007
    Messages : 2 403
    Par défaut


    je vois plusieurs problèmes :

    1) dans Workbook_Open : la ligne en gars enregistre le log, je crois.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    Private Sub Workbook_Open()
    Dim Wb As Workbook
    Save_Log = False
    Dim a As Long
    Dim Fs As Object, F As Object
     
    Set Fs = CreateObject("Scripting.FileSystemObject")
    Set F = Fs.GetFile(ActiveWorkbook.FullName)
    a = F.Attributes
    If F.Attributes = 32 Then
    Application.ScreenUpdating = False 'Masquer l'affichage
    Set Wb = Workbooks.Open(Filename:="\\TB\test\Service\Divers\LOG\CE")
    a = Wb.Sheets("Trace").Range("A65536").End(xlUp).Row + 1
    Wb.Sheets("Trace").Range("A" & a).Value = Application.UserName
    Wb.Sheets("Trace").Range("B" & a).Value = VBA.Date
    Wb.Sheets("Trace").Range("C" & a).Value = Now - Int(Now)
    Wb.Close True
    Application.ScreenUpdating = True
     
    End If
    End Sub
    2) Il manque des lignes dans Workbook_BeforeSaveas

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
    If SaveAsUI Then 
     Cancel = True
     else
    Save_log = true 
    endif
    End Sub

    3) Il Manque Workbook_Close
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Private Sub Workbook_close()
    Wb.Close Save_log
    end sub

  4. #24
    Membre éclairé
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2006
    Messages
    239
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2006
    Messages : 239
    Par défaut
    Désolé mais les enregistrements se font toujours dans le cas ou on ouvre le TCD en lecture seule et ensuite on l'enregistre sous un autre nom.


    Je pense que la meiileure solution serait de n'enregistrer le log uniquement dans le cas ou on rentre le mot de passe lors de l'ouverture du classeur quand il demande "Tapez le mot de passe autorisant l'acces en ecriture ou en lecture" ?
    Je precise que j'ai mis le mot de passe par : outil, Option, securite puis mot de passe pour la modification.

  5. #25
    Membre Expert Avatar de Godzestla
    Homme Profil pro
    Chercheur de bonheur
    Inscrit en
    Août 2007
    Messages
    2 403
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de bonheur
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2007
    Messages : 2 403
    Par défaut
    Désolé mais les enregistrements se font toujours dans le cas ou on ouvre le TCD en lecture seule et ensuite on l'enregistre sous un autre nom.
    Comment cela est-il possible puisque tu as bloqué le Saveas

  6. #26
    Membre éclairé
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2006
    Messages
    239
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2006
    Messages : 239
    Par défaut
    Je ne vois pas du tout d'ou cela peu venir.

    C'est pour cela que la meilleure solution serait de n'enregistrer le log uniquement dans le cas ou on rentre le mot de passe lors de l'ouverture du classeur quand il demande "Tapez le mot de passe autorisant l'acces en ecriture ou en lecture" ?
    Je precise que j'ai mis le mot de passe par : outil, Option, securite puis mot de passe pour la modification

  7. #27
    Membre Expert Avatar de Godzestla
    Homme Profil pro
    Chercheur de bonheur
    Inscrit en
    Août 2007
    Messages
    2 403
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de bonheur
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2007
    Messages : 2 403
    Par défaut
    C'est pour cela que la meilleure solution serait de n'enregistrer le log uniquement dans le cas ou on rentre le mot de passe lors de l'ouverture du classeur quand il demande "Tapez le mot de passe autorisant l'acces en ecriture ou en lecture" ?
    Je vois que tu insistes avec une insistance plus que certaine, mais je ne sais pas comment faire cela.

    Je persiste à dire que le code proposé doit marcher et que s'il ne fait pas ce qu'il doit, il faudrait mettre un debug sur la routine BeforeSaveas entre autres et analyser en detail ce qui sa passe dans les differents modules (_Close, _OPen, _BeforeSave).

    Le Saveas ne doit pas marcher, c'est certain.

    Il doit y avoir une floche dans ton code.

    Je te propose de montrer ton code actuel, pour que je controle encore une fois.

    Et dis moi aussi ce qui se passe aund tu essaie de faire un Saveas . cela ne doit pas marcher.

  8. #28
    Membre éclairé
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2006
    Messages
    239
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2006
    Messages : 239
    Par défaut
    Voila tout le code qui se trouve dans Thisworkbook :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    Private Sub Workbook_Open()
    Dim Wb As Workbook
    Save_log = False
    Dim a As Long
    Dim Fs As Object, F As Object
     
    Set Fs = CreateObject("Scripting.FileSystemObject")
    Set F = Fs.GetFile(ActiveWorkbook.FullName)
    a = F.Attributes
    If F.Attributes = 32 Then
    Application.ScreenUpdating = False 'Masquer l'affichage
    Set Wb = Workbooks.Open(Filename:="\\TB\test\Service\Divers\LOG\CE")
    a = Wb.Sheets("Trace").Range("A65536").End(xlUp).Row + 1
    Wb.Sheets("Trace").Range("A" & a).Value = Application.UserName
    Wb.Sheets("Trace").Range("B" & a).Value = VBA.Date
    Wb.Sheets("Trace").Range("C" & a).Value = Now - Int(Now)
    Wb.Close True
    Application.ScreenUpdating = True
     
    End If
     
    End Sub
     
    Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
    If SaveAsUI Then
     Cancel = True
     Else
    Save_log = True
    End If
    End Sub
     
     
    Private Sub Workbook_close()
    Wb.Close Save_log
    End Sub

  9. #29
    Membre Expert Avatar de Godzestla
    Homme Profil pro
    Chercheur de bonheur
    Inscrit en
    Août 2007
    Messages
    2 403
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de bonheur
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2007
    Messages : 2 403
    Par défaut
    Ben oui, c'est ce que je craignais.... tu n'as pas l'air d'avoir lu mes réponses précédentes, car tu ne corriges pas les fautes.

    C'est cette instruction qie te sauve ton LOG DANS TOUS LES CAS..... !!!!

    Enlève-moi donc cette p.... de ligne.

    Et encore
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Dim Wb As Workbook
    Cette ligne n'a rien à faire dans this Workbook car WB est defini en public dans un module.

    Ton code c'est mot pour mot ce qu'on t'a proposé, sauf que tu y as rajouté des erreurs.
    Comment veux-tu que j'y arrive ainsi.

    Allez pause pour moi. Pfuiiiiiiiii.

  10. #30
    Membre éclairé
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2006
    Messages
    239
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2006
    Messages : 239
    Par défaut
    Après avoir repris le code ligne par ligne et de nombreux tests, le but recherché bon.

    Voici le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
    If SaveAsUI Then
     Cancel = True
     Else
    Save_Log = True
     
    Dim a As Long
    Dim Fs As Object, F As Object
     
    Set Fs = CreateObject("Scripting.FileSystemObject")
    Set F = Fs.GetFile(ActiveWorkbook.FullName)
    a = F.Attributes
    If F.Attributes = 32 Then
    Application.ScreenUpdating = False 'Masquer l'affichage
    Set Wb = Workbooks.Open(Filename:="\\TB\test\Service\Divers\LOG\CE")
    a = Wb.Sheets("Trace").Range("A65536").End(xlUp).Row + 1
    Wb.Sheets("Trace").Range("A" & a).Value = Application.UserName
    Wb.Sheets("Trace").Range("B" & a).Value = VBA.Date
    Wb.Sheets("Trace").Range("C" & a).Value = Now - Int(Now)
    Wb.Close True
    Application.ScreenUpdating = True
     
    End If
     
     End If
     
    End Sub
    Je te remercie Godzestla, je t'offrirais bien un café....mais il ne peut être que virtuel !!!!!!!!!
    Merci encore et bonne fin de journée.
    Cordialement

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. Réponses: 3
    Dernier message: 23/10/2009, 18h25
  2. Réponses: 1
    Dernier message: 11/09/2009, 17h32
  3. [WD-2002] Macro qui modifie une macro
    Par Wanaka dans le forum VBA Word
    Réponses: 2
    Dernier message: 09/05/2009, 10h46
  4. Modifier une macro avec une autre
    Par Teppic dans le forum Macros et VBA Excel
    Réponses: 22
    Dernier message: 04/03/2008, 10h24
  5. Réponses: 5
    Dernier message: 04/01/2007, 16h46

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo