enregistrer une feuille excel au format JPG

luckiluc

XLDnaute Nouveau
Bonjour je vous expose mon problème
J’ai un classeur avec 17 feuilles et un module (mot de passe avec des astérisques)
Dans les 17 feuilles j ai une feuille index (accès au autre feuilles par mot de passe), une feuille maintenance (pour moi), et une feuille base (pour un calcul des jours férié), et une feuille tableau (récapitulatif des feuilles « employés »)
Les autres feuilles (13) sont pour remplir les heures des employés. Sur chacune des feuilles du planning se trouvent le calcul des jours automatique, le nombre de jour ouvré, … l’employe n’a plus qu’à mettre ces heures effectué.
Mon problème actuel est le suivant, je passe par la feuille maintenance (avec mot de passe) pour enregistrer une copie du classeur et ensuite effacer les cellules non verrouillé des 13 feuilles du classeur actuel. (remize à zéro du classeur)
Et j aimerais que les personnes qui accède au copie ne puissent pas faire de modification ou de doublon modifié.
Et il possible d’enregistrer les 13 feuilles « employer » au format .JPG pour sauvegarde dans un dossier ex :« sauvegarde09_2009 », et ce dans le dossier d’origine ou se trouve mon classeur grâce a un bouton « enregistrer » dans la feuille « maintenance »
De cette manière, les feuilles ne pourront être modifiées, et pourront être lu à partir du format image.JPG
Merci de m’en détailler le code car je suis novice
Je pratique VB que depuis 2 semaines…
 

job75

XLDnaute Barbatruc
Dernière édition:

luckiluc

XLDnaute Nouveau
Re : enregistrer une feuille excel au format JPG

Bonjour luckiluc,



Comprends pas, qu'est-ce que ce module ?



A+

le module est prévu pour me crée un mot de passe avec des *****

en voici le code
---------------------------------------------------------------
Private Declare Function GetActiveWindow Lib "user32" () As Long
Private Declare Function GetWindowLong Lib "user32" _
Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
Private Declare Function GetCurrentThreadId Lib "kernel32" () As Long

Private Declare Function SetWindowsHookEx Lib "user32" _
Alias "SetWindowsHookExA" (ByVal idHook As Long, ByVal lpfn As Long, ByVal hmod As Long, _
ByVal dwThreadId As Long) As Long

Private lgHook As Long

Private Declare Function GetClassName Lib "user32" _
Alias "GetClassNameA" (ByVal hwnd As Long, ByVal lpClassName As String, _
ByVal nMaxCount As Long) As Long

Private Declare Function SetWindowLong Lib "user32" _
Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, _
ByVal dwNewLong As Long) As Long

Private Declare Function UnhookWindowsHookEx Lib "user32" _
(ByVal hHook As Long) As Long
Sub Mot_de_passe_Simple()
Const WH_CBT As Long = &H5
Const GWL_HINSTANCE As Long = -6
Dim lgInst As Long, PassW As String, Authentification As String
If Sheets("maintenance").Visible = True Then Exit Sub
PassW = "votremotdepasse"
lgInst = GetWindowLong(GetActiveWindow(), GWL_HINSTANCE)
#If VBA6 Then
lgHook = SetWindowsHookEx(WH_CBT, AddressOf PassWord_InputBox_Simple, lgInst, GetCurrentThreadId)
#Else
lgHook = SetWindowsHookEx(WH_CBT, AddrOf("PassWord_InputBox_Simple"), lgInst, GetCurrentThreadId)
#End If
Authentification = InputBox("Veuillez entrer le mot de passe, svp.", "Attention Accès réservé !")
If Authentification = "" Or Authentification <> PassW Then
MsgBox "Le mot de passe que vous avez saisie est erroné ? "
Exit Sub
Else
Sheets("maintenance").Visible = xlSheetVisible

Sheets("maintenance").Activate
Sheets("index").Visible = False
End If
'MsgBox "Le mot de passe que vous avez saisie est : " & InputBox("Veuillez entrer le mot de passe, svp.", "Attention Accès réservé !")
End Sub
Private Function PassWord_InputBox_Simple(ByVal lMsg As Long, ByVal wParam As Long, ByRef lParam As Long) As Long

Const HCBT_CREATEWND = 3
Const GWL_STYLE = (-16)
Const ES_PASSWORD = &H20

Dim ClassName As String, RetVal As Long

If lMsg = HCBT_CREATEWND Then
ClassName = String$(128, Chr$(0))
RetVal = GetClassName(wParam, ClassName, Len(ClassName))
If Left(ClassName, RetVal) = "Edit" Then
SetWindowLong wParam, GWL_STYLE, GetWindowLong(wParam, GWL_STYLE) Or ES_PASSWORD
UnhookWindowsHookEx lgHook
End If
PassWord_InputBox_Simple = False
End If
End Function
 

luckiluc

XLDnaute Nouveau
Re : enregistrer une feuille excel au format JPG

Bonjour luckiluc, re-bonjour job75
Une petite impression au format .pdf des feuilles concernées ne serait-elle pas une alternative intéressante (et plus légère, probablement) ?​
ROGER2327

merci pour vos réponse rapide
si il est possible de lire les feuilles en PDF et de ne pas les modifier je veut bien adopter cette solution je travaille avec Excel 2003 et Windows xp et 98sur des pc assez anciens '' administration'' donc les fichiers PDF moins lourd me conviendrais.
 

ROGER2327

XLDnaute Barbatruc
Re : enregistrer une feuille excel au format JPG

Re...
La lecture des fichiers .pdf ne devrait pas être un problème : on trouve gratuitement Adobe Reader® partout, à commencer évidemment sur le site d'Adobe®.
Pour l'enregistrement, on peut utiliser une extension créée par Adobe® pour la suite Office® de Microsoft®. On peut aussi utiliser un logiciel gratuit comme PdfCreator (à ne pas confondre avec Pdf Creator qui, me semble-t-il, n'est pas gratuit). Un tel logiciel s'utilise comme une imprimante : il suffit de le sélectionner dans le menu des imprimantes.​
ROGER2327
_
_

__________________
Bonjour gwenlorin
 
Dernière édition:

gwenlorin

XLDnaute Occasionnel
Re : enregistrer une feuille excel au format JPG

Bonjour Roger,

Je vais aller dans ton sens.
PDFcreator est gratuit LUI et s'utilise comme une imprimante. C'est très pratique même sans macro :).

Pour l'utiliser avec VBA, c'est un print avec imprimante=PDFCreator + options de l'imprimante à gérer.

L'impression se fait feuille par feuille avec fusion dans un doc à la fin.

Le site proposé est très complet et la solution fonctionne bien
 

job75

XLDnaute Barbatruc
Re : enregistrer une feuille excel au format JPG

Re à tous,

Grâce au fil de MJ13 que j'ai indiqué, j'ai écrit (merci MichelXLD) ces macros :

Code:
Private Declare Sub keybd_event Lib "user32" ( _
ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, _
ByVal dwExtraInfo As Long)

Sub CreerImage()
keybd_event vbKeySnapshot, 1, 0&, 0&
DoEvents
Application.ScreenUpdating = False
Range("A1").Select
ActiveSheet.Paste
FichierJPEG
End Sub

Sub FichierJPEG()
Dim ob As Object, nb As Byte
Set ob = Selection
ob.CopyPicture
With ActiveSheet.ChartObjects.Add(0, 0, ob.Width, ob.Height).Chart
    .Paste
    .Export ThisWorkbook.Path & "\" & ob.Name & ".jpg", "JPG"
End With
nb = ActiveSheet.ChartObjects.Count
ActiveSheet.ChartObjects(nb).Delete
ob.Delete
End Sub

Elles créent un fichier JPEG de la feuille active.

Avec une boucle il est facile de créer l'image de plusieurs feuilles.

Enregistrer le fichier joint sur le bureau. Le fichier JPEG sera créé au même endroit.

Edit : je constate que le fichier Excel augmente de taille au fur et à mesure que l'on crée des fichiers JPEG. Je ne sais pas pour l'instant comment y remédier.

A+
 

Pièces jointes

  • Fichier JPEG.xls
    23 KB · Affichages: 201
Dernière édition:

luckiluc

XLDnaute Nouveau
Re : enregistrer une feuille excel au format JPG

merci job75
peut tu me dire comment ont fait une boucle pour mettre plusieurs feuilles??
je suis sur vb depuis 2 semaine alors il faut m'expliquer un peut
donne moi un exemple avec marquer feuil1 feuil2 après cela devrait aller
Par avance merci pour tout ces renseignements
 

job75

XLDnaute Barbatruc
Re : enregistrer une feuille excel au format JPG

Re luckiluc,

J'ai donc fait une boucle pour 4 feuilles enregistrées en JPEG.

Par ailleurs, je n'ai pas trouvé pourquoi le fichier augmente de taille à chaque enregistrement. Mais j'ai trouvé une solution (en rouge) pour l'éviter : enregistrer le fichier, puis après les enregistrements, le fermer sans enregistrer les modifications, et le faire rouvrir grâce à une macro temporisée.

Code:
Private Declare Sub keybd_event Lib "user32" ( _
ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, _
ByVal dwExtraInfo As Long)

Sub CreerImage()
Dim tablo(), i As Byte
[COLOR="Red"]ThisWorkbook.Save 'enregistre le fichier[/COLOR]
tablo = Array("Feuil1", "Feuil2", "Feuil3", "Feuil4")
For i = 0 To UBound(tablo) 'sur chaque feuille du tableau
  Sheets(tablo(i)).Activate
  Application.ScreenUpdating = True
  keybd_event vbKeySnapshot, 1, 0, 0
  DoEvents
  Application.ScreenUpdating = False
  Range("A1").Select
  ActiveSheet.Paste
  Call FichierJPEG(Selection, ActiveSheet.Name)
Next
[COLOR="Red"]Application.OnTime Now, "Ouvre" 'permet de rouvrir le fichier
ThisWorkbook.Close False 'ferme le fichier sans enregistrer les modifications[/COLOR]
End Sub

Sub FichierJPEG(ob As Object, feuil As String)
Dim nb As Byte
ob.CopyPicture
With ActiveSheet.ChartObjects.Add(0, 0, ob.Width, ob.Height).Chart
  .Paste
  .Export ThisWorkbook.Path & "\" & feuil & ".jpg", "JPG"
End With
nb = ActiveSheet.ChartObjects.Count
ActiveSheet.ChartObjects(nb).Delete
ob.Delete
End Sub

[COLOR="Red"]Sub Ouvre()
End Sub[/COLOR]
 

Pièces jointes

  • Fichier JPEG(1).xls
    35.5 KB · Affichages: 158
Dernière édition:

luckiluc

XLDnaute Nouveau
Re : enregistrer une feuille excel au format JPG

merci job75 j'essaye ta méthode des que possible et je te tien au courant
--edit--
Après essai sur mon classeur cela me donne:
1° problème: la cellule ou le graphique et protégé en lecture seule( ôtez la protection) vous devez peut être mettre un code pour déverrouiller
Au deuxième clic sa passe a l’erreur suivante

2° problème: Excel ne peut pas coller les données quand je clic sur débogage il m envois sur la ligne ActiveSheet.Paste

en esperant que vous auraient la solution
merci
ps sur l'exemple que tu me donne fichier jpeg.xls de chez moi avec excel 2007 il ne m'enregistre pas correctement la feuille 2 et 4 es-que je doit passez par excel 2003 ?
 
Dernière édition:

job75

XLDnaute Barbatruc
Re : enregistrer une feuille excel au format JPG

Bonjour luckiluc, le forum,

Vos feuilles sont protégées, et il faut donc ôter leur protection.

Dans le fichier ci-joint, les 4 feuilles sont protégées par 4 mots de passe différents, aa bb cc dd. Si le mot de passe est unique, le tableau mdp() est bien sûr inutile.

Chez moi (Excel 2003) les 4 fichiers JPEG se créent sans problème. N'ayant pas Excel 2007 je ne peux pas faire mieux.

A+
 

Pièces jointes

  • Fichier JPEG(2).xls
    37 KB · Affichages: 154

Discussions similaires

Statistiques des forums

Discussions
312 389
Messages
2 087 933
Membres
103 678
dernier inscrit
bibitm