[VBA]Interdire l'impression avant le click

TheLio

XLDnaute Accro
Hello Tous,
J'ai ici quelques lignes de codes qui permettent d'identifier la personne qui s'aprête à Imprimer un document "valeur", L'idéal serait de bloquer toutes possibilités d'impression tant que l'utilisateur n'a pas cliqué sur le bouton...
Code:
Private Sub CommandButton1_Click()
Application.ScreenUpdating = False
 NomUsager = Application.UserName
  With Worksheets("Contrôle")
  On Error Resume Next
  Sheets("Contrôle").Unprotect Password:="TOTO", UserInterfaceOnly:=True

     Derligne = .Range("A65536").End(xlUp).Row + 1 'on détecte la derniere ligne vide
       .Cells(Derligne, 1) = Format(Date, "dd/mm/yyyy") 'ici on mets la date du Jour
       .Cells(Derligne, 2) = Format(Time, "HH:MM:SS") 'ici on met l'heure réelle
       .Cells(Derligne, 3) = NomUsager  'ici le Nom du User
       .Cells(Derligne, 4) = Feuil3.Range("$T$3")  'ici la valeur du bon
       .Cells(Derligne, 5) = Feuil3.Range("$P$10") & ("  ") & Feuil2.Range("$B$15") 'ici le N° de série enregistré
    Sheets("Contrôle").Protect Password:="TOTO", UserInterfaceOnly:=True
  End With
 Application.ScreenUpdating = True
End Sub
A l'écoute de toutes vos suggestions...
Bonne journée
Lionel
 

TheLio

XLDnaute Accro
Re : [VBA]Interdire l'impression avant le click

Hello abc,
Mercipour ta réponse, mais je n'arrive pas (pour l'instant) à l'intégrer à mon code, le simple clique doit l'autoriser...
ce doit être une histoire de "if" mais je coince...
Merci
A++
Lionel
 

Staple1600

XLDnaute Barbatruc
Re : [VBA]Interdire l'impression avant le click

Bonjour

L'idéal serait de bloquer toutes possibilités d'impression
Il reste ces possiblités d'impression
(et je ne vois pas comment les empecher en VBA)

- Si clic-droit sur le fichier Excel non ouvert -> Imprimer
Il sera imprimer
- Si drag'n drop du fichier non ouvert sur le raccourci de l'imprimante il sera imprimé.

(Et il y en a surement d'autres)
 

TheLio

XLDnaute Accro
Re : [VBA]Interdire l'impression avant le click

Hello Staple :)
Certes, le phénomène a déja été exprimé plusieurs fois...
Mais mon idée est simple, c'est d'empêcher l'impression tant que le click n'a pas été fait.
Ainsi, une trace restera...
Ma fois, si il y a d'autres vicieux que moi dans l'entreprise qui s'amusent à tout copier, détourner, craker, (je plaisante)
Ou alors, je devrais tourner le problème de l'autre côté... lorsqu'on imprime, ça me laisse une trace sur la feuille contrôle. (tout en sachant que l'on peut contourner cette option)
A++
Lionel
 

Staple1600

XLDnaute Barbatruc
Re : [VBA]Interdire l'impression avant le click

Re


Tu peux créer un fichier log (*.lio) ;)

A chaque impression avec le Username et la date d'impression

edit: Exemple
Dans un module
Code:
Public Sub Trace_IMPRESSION(Print_LOG As String)
Const LogFileName As String = "C:\P_rn.lio"
Dim FileNum As Integer
    FileNum = FreeFile
    Open LogFileName For Append As #FileNum
    Print #FileNum, Print_LOG
    Close #FileNum
End Sub
'Ici procédure pour afficher le fichier
Public Sub Affiche_LOGS()
Const LogFileName As String = "C:\P_rn.lio"
Dim FileNum As Integer, tLine As String
    FileNum = FreeFile
    Open LogFileName For Input Access Read Shared As FileNum
    Do While Not EOF(FileNum)
        Line Input #FileNum, tLine
    Loop
    Close #FileNum
    MsgBox tLine, vbInformation, "Dernière impression:"
End Sub
Dans l'userform
Code du bouton
Code:
Private Sub CommandButton1_Click()
Dim la_date As String
Dim l_heure As String
Dim v_bon As String
Dim n_serie As String
Dim NomUsager as String
Application.ScreenUpdating = False
 NomUsager = Application.UserName
'  With Worksheets("Contrôle")
'  On Error Resume Next
'  Sheets("Contrôle").Unprotect Password:="TOTO", UserInterfaceOnly:=True
'
'     Derligne = .Range("A65536").End(xlUp).Row + 1 'on détecte la derniere ligne vide
'       .Cells(Derligne, 1) = Format(Date, "dd/mm/yyyy") 'ici on mets la date du Jour
'       .Cells(Derligne, 2) = Format(Time, "HH:MM:SS") 'ici on met l'heure réelle
'       .Cells(Derligne, 3) = NomUsager  'ici le Nom du User
'       .Cells(Derligne, 4) = Feuil3.Range("$T$3")  'ici la valeur du bon
'       .Cells(Derligne, 5) = Feuil3.Range("$P$10") & ("  ") & Feuil2.Range("$B$15") 'ici le N° de série enregistré
'    Sheets("Contrôle").Protect Password:="TOTO", UserInterfaceOnly:=True
'  End With
la_date = Format(Date, "dd/mm/yyyy")
l_heure = Format(Time, "HH:MM:SS")
v_bon = Feuil3.Range("$T$3")
n_serie = Feuil3.Range("$P$10") & ("  ") & Feuil2.Range("$B$15") 'ici le N° de série enregistré
Trace_IMPRESSION "Utilisateur: " & NomUsager & _
" |Impression: le : " & la_date & " | à: " & l_heure & " | " & _
"Valeur: " & v_bon & " | " & "N° serie : " & n_serie
Application.ScreenUpdating = True
End Sub
 
Dernière édition:

TheLio

XLDnaute Accro
Re : [VBA]Interdire l'impression avant le click

Re tous,
J'ai procédé ainsi,
Dans ThisWorkbook:
Code:
Private Sub Workbook_BeforePrint(Cancel As Boolean)

If ImpBool = True Then
Cancel = False
ImpBool = False
Else
Cancel = True
End If

End Sub
Dans un module:
Code:
Public ImpBool As Boolean
et dans mes feuilles concernées:
Code:
Private Sub CommandButton1_Click()
Application.ScreenUpdating = False
 NomUsager = Application.UserName
  With Worksheets("Contrôle")
  On Error Resume Next
  Sheets("Contrôle").Unprotect Password:="TOTO", UserInterfaceOnly:=True

     Derligne = .Range("A65536").End(xlUp).Row + 1 'on détecte la derniere ligne vide
       .Cells(Derligne, 1) = Format(Date, "dd/mm/yyyy") 'ici on mets la date du Jour
       .Cells(Derligne, 2) = Format(Time, "HH:MM:SS") 'ici on met l'heure réelle
       .Cells(Derligne, 3) = NomUsager  'ici le Nom du User
       .Cells(Derligne, 4) = Feuil2.Range("$T$3")  'ici la valeur du bon
       .Cells(Derligne, 5) = Feuil2.Range("$P$10") & Feuil2.Range("$B$15") 'ici le N° de série enregistré
    Sheets("Contrôle").Protect Password:="TOTO", UserInterfaceOnly:=True
  End With
 Application.ScreenUpdating = True
ImpBool = True
End Sub
Ca fonctionne et ça me convient ;)
Comme ça, c'est sur le forum si cela intéresse quelqu'un...
Bonne soirée
A++
Lionel
EDIT : Hello Staple (Merci pour ton code, je l'étudie à côté du mien, on s'est croisés)
 

Discussions similaires

Réponses
2
Affichages
475

Statistiques des forums

Discussions
311 730
Messages
2 081 978
Membres
101 854
dernier inscrit
micmag26