OVH Cloud OVH Cloud

Transferer des images

23 réponses
Avatar
René MATHIEU
Bonjour,
Grâce à Michdenis qui m'a fournit une macro VBA, j'ai pu transférer 430
photos d'un répertoire du disque c dans une feuille Excel et y adjoindre une
série de critères de tri.
Je dois maintenant retransferer après tri ces photos dans un répertoire sur
le disque dur.
(Ces photos devraient servir à un diaporama pour un club.)
Est-ce faisable et comment?
Un grand merci d'avance.
René

10 réponses

1 2 3
Avatar
michdenis
Bonjour René,

Je suis heureux que tu aies réussi à transférer 430 images ... comme je suis payé à l'unité
tu vas avoir une surprise !!! ;-)

Et pour doubler la mise, copie les 2 procédures suivantes dans le classeur où sont tes images.

Ces procédures vont transformer ces images en fichier vers un répertoire que tu vas
toi même désigner. Le nom de chaque fichier image recevra le nom de l'image dans ton
fichier + l'extension PNG ... si tu préféres JPG, tu n'as qu'à modifier cette ligne de code:
" .Chart.Export Repertoire & S.Name & ".png", "PNG"


Ceci est valide pour TOUTES LES IMAGES de toutes les feuilles de ton classeur.

'---------------------------------------
Sub CréerDesFichiersImages()

Dim Wk As Workbook, Sh As Worksheet
Dim S As Shape
Application.ScreenUpdating = False
Set Wk = Workbooks.Add
With ThisWorkbook
For Each Sh In .Worksheets
For Each S In Sh.Shapes
If TypeName(S.OLEFormat.Object) = "Picture" Then
ImageVersFichier Wk, S, "c:"
End If
Next
Next
End With
Wk.Close False
Set Wk = Nothing: Set Sh = Nothing: Set S = Nothing

End Sub

'---------------------------------------
Sub ImageVersFichier(Wk As Workbook, S As Shape, _
Repertoire As String)
S.CopyPicture
With Wk
With .Sheets(1)
.Paste
With .ChartObjects.Add(0, 0, _
S.Width, S.Height).Chart
.Paste
.ChartArea.Border.LineStyle = 0
End With
With .ChartObjects(1)
.Top = 0
.Left = 0
.Chart.Export Repertoire & S.Name & ".png", "PNG"
Selection.Delete
.Delete
End With
End With
End With
End Sub
'---------------------------------------


Salutations!







"René MATHIEU" a écrit dans le message de news: 4391eee7$0$10967$
Bonjour,
Grâce à Michdenis qui m'a fournit une macro VBA, j'ai pu transférer 430
photos d'un répertoire du disque c dans une feuille Excel et y adjoindre une
série de critères de tri.
Je dois maintenant retransferer après tri ces photos dans un répertoire sur
le disque dur.
(Ces photos devraient servir à un diaporama pour un club.)
Est-ce faisable et comment?
Un grand merci d'avance.
René
Avatar
michdenis
Bonjour René,

dans cette ligne de code ,
remplace "c:" par le chemin et le répertoire
où tu veux sauvegarder les fichiers images
(ne pas oublier le back lash)

ImageVersFichier Wk, S, "c:"


Salutations!


"René MATHIEU" a écrit dans le message de news: 4391eee7$0$10967$
Bonjour,
Grâce à Michdenis qui m'a fournit une macro VBA, j'ai pu transférer 430
photos d'un répertoire du disque c dans une feuille Excel et y adjoindre une
série de critères de tri.
Je dois maintenant retransferer après tri ces photos dans un répertoire sur
le disque dur.
(Ces photos devraient servir à un diaporama pour un club.)
Est-ce faisable et comment?
Un grand merci d'avance.
René
Avatar
René MATHIEU
Merci MichDenis,
Je suis soufflé de la rapidité avec laquelle tu trouves une solution.
Bien, je vais implanter ces nouvelles procédures et te tiens au courant.
Si tu n'habites pas trop loin de chez moi je peux t'offrir un pot.
amitiés
René (Braine - Belgique)




Je suis heureux que tu aies réussi à transférer 430 images ... comme je
suis payé à l'unité
tu vas avoir une surprise !!! ;-)

Et pour doubler la mise, copie les 2 procédures suivantes dans le classeur
où sont tes images.

Ces procédures vont transformer ces images en fichier vers un répertoire
que tu vas
toi même désigner. Le nom de chaque fichier image recevra le nom de
l'image dans ton
fichier + l'extension PNG ... si tu préféres JPG, tu n'as qu'à modifier
cette ligne de code:
" .Chart.Export Repertoire & S.Name & ".png", "PNG"


Ceci est valide pour TOUTES LES IMAGES de toutes les feuilles de ton
classeur.

'---------------------------------------
Sub CréerDesFichiersImages()

Dim Wk As Workbook, Sh As Worksheet
Dim S As Shape
Application.ScreenUpdating = False
Set Wk = Workbooks.Add
With ThisWorkbook
For Each Sh In .Worksheets
For Each S In Sh.Shapes
If TypeName(S.OLEFormat.Object) = "Picture" Then
ImageVersFichier Wk, S, "c:"
End If
Next
Next
End With
Wk.Close False
Set Wk = Nothing: Set Sh = Nothing: Set S = Nothing

End Sub

'---------------------------------------
Sub ImageVersFichier(Wk As Workbook, S As Shape, _
Repertoire As String)
S.CopyPicture
With Wk
With .Sheets(1)
.Paste
With .ChartObjects.Add(0, 0, _
S.Width, S.Height).Chart
.Paste
.ChartArea.Border.LineStyle = 0
End With
With .ChartObjects(1)
.Top = 0
.Left = 0
.Chart.Export Repertoire & S.Name & ".png", "PNG"
Selection.Delete
.Delete
End With
End With
End With
End Sub
'---------------------------------------


Salutations!







"René MATHIEU" a écrit dans le message de news:
4391eee7$0$10967$
Bonjour,
Grâce à Michdenis qui m'a fournit une macro VBA, j'ai pu transférer 430
photos d'un répertoire du disque c dans une feuille Excel et y adjoindre
une
série de critères de tri.
Je dois maintenant retransferer après tri ces photos dans un répertoire
sur
le disque dur.
(Ces photos devraient servir à un diaporama pour un club.)
Est-ce faisable et comment?
Un grand merci d'avance.
René





Avatar
René MATHIEU
bonsoir MichDenis,

Voila, j'ai implanté les deux macros, cela fonctionne très bien, j'ai ce que
j'avais demandé.
Mais j'ai fait une grosse erreur en formulant mes demandes (en fait je n'ai
pas pensé à cela), car comme les photos ont été réduites à la dimension des
cellules, je récupère dans le nouveau répertoire des fichiers de deux ou
trois ko, ce qui est trop petit pour le diaporama (et ne peux être
agrandit ).
En fait je dois importer dans de très grandes cellules, puis les diminuer
pour le traitement (tri sur critères), puis les réagrandir pour la création
du nouveau répertoire.
De toute faon c'est jouable car c'est pas tout les jours que l'on fait cela.
Un tout grand merci.
René

"René MATHIEU" a écrit dans le message de news:
4391eee7$0$10967$
Bonjour,
Grâce à Michdenis qui m'a fournit une macro VBA, j'ai pu transférer 430
photos d'un répertoire du disque c dans une feuille Excel et y adjoindre
une
série de critères de tri.
Je dois maintenant retransferer après tri ces photos dans un répertoire
sur
le disque dur.
(Ces photos devraient servir à un diaporama pour un club.)
Est-ce faisable et comment?
Un grand merci d'avance.
René





Avatar
michdenis
Bonjour René,

à partir d'une procédure publiée ici par Michel Perron,

Tu exécutes la procédure : Sub CréerDesFichiersImages()
Attention, il y a quelques variables à renseigner :
A ) Chemin : lieu de sauvegare

B ) Tu peux modifier la largeur et la hauteur que l'image aura
dans le fichier image...là.
.Width = 250 'à déterminer
.Height = 175 'à déterminer

C) Ext pour l'extension du fichier.



Dans le haut d'un module standard, déclaration des API
'-------------------------
Option Explicit
Private Declare Function CloseClipboard Lib "user32" () As Long
Private Declare Function OpenClipboard Lib "user32" _
(ByVal hwnd As Long) As Long
Private Declare Function EmptyClipboard Lib "user32" () As Long
Private Declare Function IsClipboardFormatAvailable Lib "user32" _
(ByVal wFormat As Long) As Long
Private Declare Function CopyImage& Lib "user32" (ByVal handle& _
, ByVal un1&, ByVal n1&, ByVal n2&, ByVal un2&)
Private Declare Function GetClipboardData Lib "user32" _
(ByVal wFormat As Long) As Long
Private Declare Function IIDFromString Lib "ole32" _
(ByVal lpsz As String, ByRef lpiid As GUID) As Long
Private Declare Function OleCreatePictureIndirect Lib "olepro32" _
(pPictDesc As PICTDESC, ByRef riid As GUID, ByVal fOwn As Long _
, ByRef ppvObj As IPicture) As Long

Private Type GUID
Data1 As Long
Data2 As Integer
Data3 As Integer
Data4(8) As Byte
End Type

Private Type PICTDESC
cbSize As Long
picType As Long
hImage As Long
End Type

'-------------------------
Sub CréerDesFichiersImages()

Dim sh As Worksheet
Dim S As Shape, Chemin As String
Dim T As Double, L As Double
Dim H As Double, W As Double
Dim Ext As String

'répertoire où seront copiés les images
Chemin = "c:" 'à définir
'L'extension du fichier
Ext = ".jpg"
Application.ScreenUpdating = False
With ThisWorkbook
For Each sh In .Worksheets
For Each S In sh.Shapes
If TypeName(S.OLEFormat.Object) = "Picture" Then
With S
T = .Top
L = .Left
H = .Height
W = .Width
.Width = 250 'à déterminer
.Height = 175 'à déterminer
MakeImgFile Chemin, S, Ext
.Top = T
.Left = L
.Height = H
.Width = W
End With
End If
Next
Next
End With
Set sh = Nothing: Set S = Nothing

End Sub
'-------------------------

Sub MakeImgFile(Repertoire As String, S As Shape, Ext As String)

'If TypeName(Selection) = "Range" Then
'If Selection.Areas.Count > 1 Then
'MsgBox " Multiple selections !", 48
'Exit Sub
'End If
'End If
'Selection.CopyPicture 1, 2
S.CopyPicture 1, 2
Dim hCopy&: OpenClipboard 0&
If IsClipboardFormatAvailable(2) = 0 Then GoTo 1
hCopy = CopyImage(GetClipboardData(2), 0, 0, 0, &H4)
If hCopy = 0 Then GoTo 1
Const IPictureIID = "{7BF80981-BF32-101A-8BBB-00AA00300CAB}"
Dim iPic As IPicture, ID As GUID, PCT As PICTDESC, Ret As Long
Ret = IIDFromString(StrConv(IPictureIID, vbUnicode), ID)
If Ret Then GoTo 1
With PCT
.cbSize = Len(PCT)
.picType = 1
.hImage = hCopy
End With
Ret = OleCreatePictureIndirect(PCT, ID, 1, iPic)
If Ret Then GoTo 1
' Sauve l'image sur le disque (format bmp)
SavePicture iPic, Repertoire & S.Name & Ext
Set iPic = Nothing
1: EmptyClipboard
CloseClipboard
End Sub
'-------------------------


Salutations!





"René MATHIEU" a écrit dans le message de news: 43921d02$0$3641$
bonsoir MichDenis,

Voila, j'ai implanté les deux macros, cela fonctionne très bien, j'ai ce que
j'avais demandé.
Mais j'ai fait une grosse erreur en formulant mes demandes (en fait je n'ai
pas pensé à cela), car comme les photos ont été réduites à la dimension des
cellules, je récupère dans le nouveau répertoire des fichiers de deux ou
trois ko, ce qui est trop petit pour le diaporama (et ne peux être
agrandit ).
En fait je dois importer dans de très grandes cellules, puis les diminuer
pour le traitement (tri sur critères), puis les réagrandir pour la création
du nouveau répertoire.
De toute faon c'est jouable car c'est pas tout les jours que l'on fait cela.
Un tout grand merci.
René

"René MATHIEU" a écrit dans le message de news:
4391eee7$0$10967$
Bonjour,
Grâce à Michdenis qui m'a fournit une macro VBA, j'ai pu transférer 430
photos d'un répertoire du disque c dans une feuille Excel et y adjoindre
une
série de critères de tri.
Je dois maintenant retransferer après tri ces photos dans un répertoire
sur
le disque dur.
(Ces photos devraient servir à un diaporama pour un club.)
Est-ce faisable et comment?
Un grand merci d'avance.
René





Avatar
René MATHIEU
Bonjour,
Merci pour ces nouvelles macros, je l'ai mises , j'obtient un fichier avec
des images
que l'on peut passer dans un diaporama, d'autant plus que l'on peut modifier
les dimensions.
Il me reste un problème que j'essaye de résoudre sans résultat en bricolant
dans la macro
" Creerdesfichiersimages", c'est de remettre les photos avec leur nom
d'origine
plutôt que " Picture "+ numéro d'image Excel + ".jpg". Ce numéro change
d'ailleurs chaque fois.
Dans la feuille, j'ai une colonne NOMS qui reprend les noms de fichier
photos, les cellules ou j'ai inséré les photos ont elles un Name identique
au nom de fichier.
J'avoue que j'y perd mon latin.
René


à partir d'une procédure publiée ici par Michel Perron,

Tu exécutes la procédure : Sub CréerDesFichiersImages()
Attention, il y a quelques variables à renseigner :
A ) Chemin : lieu de sauvegare

B ) Tu peux modifier la largeur et la hauteur que l'image aura
dans le fichier image...là.
.Width = 250 'à déterminer
.Height = 175 'à déterminer

C) Ext pour l'extension du fichier.



Dans le haut d'un module standard, déclaration des API
'-------------------------
Option Explicit
Private Declare Function CloseClipboard Lib "user32" () As Long
Private Declare Function OpenClipboard Lib "user32" _
(ByVal hwnd As Long) As Long
Private Declare Function EmptyClipboard Lib "user32" () As Long
Private Declare Function IsClipboardFormatAvailable Lib "user32" _
(ByVal wFormat As Long) As Long
Private Declare Function CopyImage& Lib "user32" (ByVal handle& _
, ByVal un1&, ByVal n1&, ByVal n2&, ByVal un2&)
Private Declare Function GetClipboardData Lib "user32" _
(ByVal wFormat As Long) As Long
Private Declare Function IIDFromString Lib "ole32" _
(ByVal lpsz As String, ByRef lpiid As GUID) As Long
Private Declare Function OleCreatePictureIndirect Lib "olepro32" _
(pPictDesc As PICTDESC, ByRef riid As GUID, ByVal fOwn As Long _
, ByRef ppvObj As IPicture) As Long

Private Type GUID
Data1 As Long
Data2 As Integer
Data3 As Integer
Data4(8) As Byte
End Type

Private Type PICTDESC
cbSize As Long
picType As Long
hImage As Long
End Type

'-------------------------
Sub CréerDesFichiersImages()

Dim sh As Worksheet
Dim S As Shape, Chemin As String
Dim T As Double, L As Double
Dim H As Double, W As Double
Dim Ext As String

'répertoire où seront copiés les images
Chemin = "c:" 'à définir
'L'extension du fichier
Ext = ".jpg"
Application.ScreenUpdating = False
With ThisWorkbook
For Each sh In .Worksheets
For Each S In sh.Shapes
If TypeName(S.OLEFormat.Object) = "Picture" Then
With S
T = .Top
L = .Left
H = .Height
W = .Width
.Width = 250 'à déterminer
.Height = 175 'à déterminer
MakeImgFile Chemin, S, Ext
.Top = T
.Left = L
.Height = H
.Width = W
End With
End If
Next
Next
End With
Set sh = Nothing: Set S = Nothing

End Sub
'-------------------------

Sub MakeImgFile(Repertoire As String, S As Shape, Ext As String)

'If TypeName(Selection) = "Range" Then
'If Selection.Areas.Count > 1 Then
'MsgBox " Multiple selections !", 48
'Exit Sub
'End If
'End If
'Selection.CopyPicture 1, 2
S.CopyPicture 1, 2
Dim hCopy&: OpenClipboard 0&
If IsClipboardFormatAvailable(2) = 0 Then GoTo 1
hCopy = CopyImage(GetClipboardData(2), 0, 0, 0, &H4)
If hCopy = 0 Then GoTo 1
Const IPictureIID = "{7BF80981-BF32-101A-8BBB-00AA00300CAB}"
Dim iPic As IPicture, ID As GUID, PCT As PICTDESC, Ret As Long
Ret = IIDFromString(StrConv(IPictureIID, vbUnicode), ID)
If Ret Then GoTo 1
With PCT
.cbSize = Len(PCT)
.picType = 1
.hImage = hCopy
End With
Ret = OleCreatePictureIndirect(PCT, ID, 1, iPic)
If Ret Then GoTo 1
' Sauve l'image sur le disque (format bmp)
SavePicture iPic, Repertoire & S.Name & Ext
Set iPic = Nothing
1: EmptyClipboard
CloseClipboard
End Sub
'-------------------------


Salutations!





"René MATHIEU" a écrit dans le message de news:
43921d02$0$3641$
bonsoir MichDenis,

Voila, j'ai implanté les deux macros, cela fonctionne très bien, j'ai ce
que
j'avais demandé.
Mais j'ai fait une grosse erreur en formulant mes demandes (en fait je
n'ai
pas pensé à cela), car comme les photos ont été réduites à la dimension
des
cellules, je récupère dans le nouveau répertoire des fichiers de deux ou
trois ko, ce qui est trop petit pour le diaporama (et ne peux être
agrandit ).
En fait je dois importer dans de très grandes cellules, puis les diminuer
pour le traitement (tri sur critères), puis les réagrandir pour la
création
du nouveau répertoire.
De toute faon c'est jouable car c'est pas tout les jours que l'on fait
cela.
Un tout grand merci.
René

"René MATHIEU" a écrit dans le message de news:
4391eee7$0$10967$
Bonjour,
Grâce à Michdenis qui m'a fournit une macro VBA, j'ai pu transférer 430
photos d'un répertoire du disque c dans une feuille Excel et y adjoindre
une
série de critères de tri.
Je dois maintenant retransferer après tri ces photos dans un répertoire
sur
le disque dur.
(Ces photos devraient servir à un diaporama pour un club.)
Est-ce faisable et comment?
Un grand merci d'avance.
René










Avatar
michdenis
Bonjour René,

Informations insuffisantes dans ta présentation de ta problématique.

Prend seulement le cas d'une image....
A )
à l'origine quel le nom + extension du fichier Image que tu insères dans ta colonne

B ) Quel est le NOM COMPLET de l'image que tu viens tout juste d'insérer dans le classeur ?

C) A la fin, quand tu transformes l'image en fichier quel est le nom du fichier + extension ?

D ) Quel nom voudrais-tu qu'il ait ?

P.S. Si tu fais référence au fait que la macro transforme "image 1" et "Picture 1" , c'est normal pour excel, il travaille en VBA,
et là c'est Américain (en anglais) . Excel fait la transformation tout seul. Quelle gentillesse ? Cependant, ceci se résout
facilement.


Salutations!




"René MATHIEU" a écrit dans le message de news: 43934824$0$31129$
Bonjour,
Merci pour ces nouvelles macros, je l'ai mises , j'obtient un fichier avec
des images
que l'on peut passer dans un diaporama, d'autant plus que l'on peut modifier
les dimensions.
Il me reste un problème que j'essaye de résoudre sans résultat en bricolant
dans la macro
" Creerdesfichiersimages", c'est de remettre les photos avec leur nom
d'origine
plutôt que " Picture "+ numéro d'image Excel + ".jpg". Ce numéro change
d'ailleurs chaque fois.
Dans la feuille, j'ai une colonne NOMS qui reprend les noms de fichier
photos, les cellules ou j'ai inséré les photos ont elles un Name identique
au nom de fichier.
J'avoue que j'y perd mon latin.
René


à partir d'une procédure publiée ici par Michel Perron,

Tu exécutes la procédure : Sub CréerDesFichiersImages()
Attention, il y a quelques variables à renseigner :
A ) Chemin : lieu de sauvegare

B ) Tu peux modifier la largeur et la hauteur que l'image aura
dans le fichier image...là.
.Width = 250 'à déterminer
.Height = 175 'à déterminer

C) Ext pour l'extension du fichier.



Dans le haut d'un module standard, déclaration des API
'-------------------------
Option Explicit
Private Declare Function CloseClipboard Lib "user32" () As Long
Private Declare Function OpenClipboard Lib "user32" _
(ByVal hwnd As Long) As Long
Private Declare Function EmptyClipboard Lib "user32" () As Long
Private Declare Function IsClipboardFormatAvailable Lib "user32" _
(ByVal wFormat As Long) As Long
Private Declare Function CopyImage& Lib "user32" (ByVal handle& _
, ByVal un1&, ByVal n1&, ByVal n2&, ByVal un2&)
Private Declare Function GetClipboardData Lib "user32" _
(ByVal wFormat As Long) As Long
Private Declare Function IIDFromString Lib "ole32" _
(ByVal lpsz As String, ByRef lpiid As GUID) As Long
Private Declare Function OleCreatePictureIndirect Lib "olepro32" _
(pPictDesc As PICTDESC, ByRef riid As GUID, ByVal fOwn As Long _
, ByRef ppvObj As IPicture) As Long

Private Type GUID
Data1 As Long
Data2 As Integer
Data3 As Integer
Data4(8) As Byte
End Type

Private Type PICTDESC
cbSize As Long
picType As Long
hImage As Long
End Type

'-------------------------
Sub CréerDesFichiersImages()

Dim sh As Worksheet
Dim S As Shape, Chemin As String
Dim T As Double, L As Double
Dim H As Double, W As Double
Dim Ext As String

'répertoire où seront copiés les images
Chemin = "c:" 'à définir
'L'extension du fichier
Ext = ".jpg"
Application.ScreenUpdating = False
With ThisWorkbook
For Each sh In .Worksheets
For Each S In sh.Shapes
If TypeName(S.OLEFormat.Object) = "Picture" Then
With S
T = .Top
L = .Left
H = .Height
W = .Width
.Width = 250 'à déterminer
.Height = 175 'à déterminer
MakeImgFile Chemin, S, Ext
.Top = T
.Left = L
.Height = H
.Width = W
End With
End If
Next
Next
End With
Set sh = Nothing: Set S = Nothing

End Sub
'-------------------------

Sub MakeImgFile(Repertoire As String, S As Shape, Ext As String)

'If TypeName(Selection) = "Range" Then
'If Selection.Areas.Count > 1 Then
'MsgBox " Multiple selections !", 48
'Exit Sub
'End If
'End If
'Selection.CopyPicture 1, 2
S.CopyPicture 1, 2
Dim hCopy&: OpenClipboard 0&
If IsClipboardFormatAvailable(2) = 0 Then GoTo 1
hCopy = CopyImage(GetClipboardData(2), 0, 0, 0, &H4)
If hCopy = 0 Then GoTo 1
Const IPictureIID = "{7BF80981-BF32-101A-8BBB-00AA00300CAB}"
Dim iPic As IPicture, ID As GUID, PCT As PICTDESC, Ret As Long
Ret = IIDFromString(StrConv(IPictureIID, vbUnicode), ID)
If Ret Then GoTo 1
With PCT
.cbSize = Len(PCT)
.picType = 1
.hImage = hCopy
End With
Ret = OleCreatePictureIndirect(PCT, ID, 1, iPic)
If Ret Then GoTo 1
' Sauve l'image sur le disque (format bmp)
SavePicture iPic, Repertoire & S.Name & Ext
Set iPic = Nothing
1: EmptyClipboard
CloseClipboard
End Sub
'-------------------------


Salutations!





"René MATHIEU" a écrit dans le message de news:
43921d02$0$3641$
bonsoir MichDenis,

Voila, j'ai implanté les deux macros, cela fonctionne très bien, j'ai ce
que
j'avais demandé.
Mais j'ai fait une grosse erreur en formulant mes demandes (en fait je
n'ai
pas pensé à cela), car comme les photos ont été réduites à la dimension
des
cellules, je récupère dans le nouveau répertoire des fichiers de deux ou
trois ko, ce qui est trop petit pour le diaporama (et ne peux être
agrandit ).
En fait je dois importer dans de très grandes cellules, puis les diminuer
pour le traitement (tri sur critères), puis les réagrandir pour la
création
du nouveau répertoire.
De toute faon c'est jouable car c'est pas tout les jours que l'on fait
cela.
Un tout grand merci.
René

"René MATHIEU" a écrit dans le message de news:
4391eee7$0$10967$
Bonjour,
Grâce à Michdenis qui m'a fournit une macro VBA, j'ai pu transférer 430
photos d'un répertoire du disque c dans une feuille Excel et y adjoindre
une
série de critères de tri.
Je dois maintenant retransferer après tri ces photos dans un répertoire
sur
le disque dur.
(Ces photos devraient servir à un diaporama pour un club.)
Est-ce faisable et comment?
Un grand merci d'avance.
René










Avatar
René MATHIEU
Bonsoir MichDenis,
merci pour ta réponse, voilà

point A: Dans le répertoire c:airbus
j'ai les fichiers: A380.jpg
A380_cockpit.jpg
A380_fuselage.jpg
"" ""
point B : Nom dans la feuille du classeur = le même que dans le répertoire,
(obtenu par transfert )

point C : Actuellement pour A380.jpg j'obtiens : Picture532.jpg
pour A380_cockpit j'obtiens
Picture533.jpg et ainsi de suite.
point D : Je voudrai obtenir si c'est possible le nom d'origine, soit
A380.jpg pour la première photo,
a380_cockpit.jpg pour la deuxième , etc...


Informations insuffisantes dans ta présentation de ta problématique.

Prend seulement le cas d'une image....
A )
à l'origine quel le nom + extension du fichier Image que tu insères dans
ta colonne

B ) Quel est le NOM COMPLET de l'image que tu viens tout juste d'insérer
dans le classeur ?

C) A la fin, quand tu transformes l'image en fichier quel est le nom du
fichier + extension ?

D ) Quel nom voudrais-tu qu'il ait ?

P.S. Si tu fais référence au fait que la macro transforme "image 1" et
"Picture 1" , c'est normal pour excel, il travaille en VBA,
et là c'est Américain (en anglais) . Excel fait la transformation tout
seul. Quelle gentillesse ? Cependant, ceci se résout
facilement.


Salutations!




"René MATHIEU" a écrit dans le message de news:
43934824$0$31129$
Bonjour,
Merci pour ces nouvelles macros, je l'ai mises , j'obtient un fichier avec
des images
que l'on peut passer dans un diaporama, d'autant plus que l'on peut
modifier
les dimensions.
Il me reste un problème que j'essaye de résoudre sans résultat en
bricolant
dans la macro
" Creerdesfichiersimages", c'est de remettre les photos avec leur nom
d'origine
plutôt que " Picture "+ numéro d'image Excel + ".jpg". Ce numéro change
d'ailleurs chaque fois.
Dans la feuille, j'ai une colonne NOMS qui reprend les noms de fichier
photos, les cellules ou j'ai inséré les photos ont elles un Name identique
au nom de fichier.
J'avoue que j'y perd mon latin.
René


à partir d'une procédure publiée ici par Michel Perron,

Tu exécutes la procédure : Sub CréerDesFichiersImages()
Attention, il y a quelques variables à renseigner :
A ) Chemin : lieu de sauvegare

B ) Tu peux modifier la largeur et la hauteur que l'image aura
dans le fichier image...là.
.Width = 250 'à déterminer
.Height = 175 'à déterminer

C) Ext pour l'extension du fichier.



Dans le haut d'un module standard, déclaration des API
'-------------------------
Option Explicit
Private Declare Function CloseClipboard Lib "user32" () As Long
Private Declare Function OpenClipboard Lib "user32" _
(ByVal hwnd As Long) As Long
Private Declare Function EmptyClipboard Lib "user32" () As Long
Private Declare Function IsClipboardFormatAvailable Lib "user32" _
(ByVal wFormat As Long) As Long
Private Declare Function CopyImage& Lib "user32" (ByVal handle& _
, ByVal un1&, ByVal n1&, ByVal n2&, ByVal un2&)
Private Declare Function GetClipboardData Lib "user32" _
(ByVal wFormat As Long) As Long
Private Declare Function IIDFromString Lib "ole32" _
(ByVal lpsz As String, ByRef lpiid As GUID) As Long
Private Declare Function OleCreatePictureIndirect Lib "olepro32" _
(pPictDesc As PICTDESC, ByRef riid As GUID, ByVal fOwn As Long _
, ByRef ppvObj As IPicture) As Long

Private Type GUID
Data1 As Long
Data2 As Integer
Data3 As Integer
Data4(8) As Byte
End Type

Private Type PICTDESC
cbSize As Long
picType As Long
hImage As Long
End Type

'-------------------------
Sub CréerDesFichiersImages()

Dim sh As Worksheet
Dim S As Shape, Chemin As String
Dim T As Double, L As Double
Dim H As Double, W As Double
Dim Ext As String

'répertoire où seront copiés les images
Chemin = "c:" 'à définir
'L'extension du fichier
Ext = ".jpg"
Application.ScreenUpdating = False
With ThisWorkbook
For Each sh In .Worksheets
For Each S In sh.Shapes
If TypeName(S.OLEFormat.Object) = "Picture" Then
With S
T = .Top
L = .Left
H = .Height
W = .Width
.Width = 250 'à déterminer
.Height = 175 'à déterminer
MakeImgFile Chemin, S, Ext
.Top = T
.Left = L
.Height = H
.Width = W
End With
End If
Next
Next
End With
Set sh = Nothing: Set S = Nothing

End Sub
'-------------------------

Sub MakeImgFile(Repertoire As String, S As Shape, Ext As String)

'If TypeName(Selection) = "Range" Then
'If Selection.Areas.Count > 1 Then
'MsgBox " Multiple selections !", 48
'Exit Sub
'End If
'End If
'Selection.CopyPicture 1, 2
S.CopyPicture 1, 2
Dim hCopy&: OpenClipboard 0&
If IsClipboardFormatAvailable(2) = 0 Then GoTo 1
hCopy = CopyImage(GetClipboardData(2), 0, 0, 0, &H4)
If hCopy = 0 Then GoTo 1
Const IPictureIID = "{7BF80981-BF32-101A-8BBB-00AA00300CAB}"
Dim iPic As IPicture, ID As GUID, PCT As PICTDESC, Ret As Long
Ret = IIDFromString(StrConv(IPictureIID, vbUnicode), ID)
If Ret Then GoTo 1
With PCT
.cbSize = Len(PCT)
.picType = 1
.hImage = hCopy
End With
Ret = OleCreatePictureIndirect(PCT, ID, 1, iPic)
If Ret Then GoTo 1
' Sauve l'image sur le disque (format bmp)
SavePicture iPic, Repertoire & S.Name & Ext
Set iPic = Nothing
1: EmptyClipboard
CloseClipboard
End Sub
'-------------------------


Salutations!





"René MATHIEU" a écrit dans le message de news:
43921d02$0$3641$
bonsoir MichDenis,

Voila, j'ai implanté les deux macros, cela fonctionne très bien, j'ai ce
que
j'avais demandé.
Mais j'ai fait une grosse erreur en formulant mes demandes (en fait je
n'ai
pas pensé à cela), car comme les photos ont été réduites à la dimension
des
cellules, je récupère dans le nouveau répertoire des fichiers de deux ou
trois ko, ce qui est trop petit pour le diaporama (et ne peux être
agrandit ).
En fait je dois importer dans de très grandes cellules, puis les diminuer
pour le traitement (tri sur critères), puis les réagrandir pour la
création
du nouveau répertoire.
De toute faon c'est jouable car c'est pas tout les jours que l'on fait
cela.
Un tout grand merci.
René

"René MATHIEU" a écrit dans le message de news:
4391eee7$0$10967$
Bonjour,
Grâce à Michdenis qui m'a fournit une macro VBA, j'ai pu transférer 430
photos d'un répertoire du disque c dans une feuille Excel et y adjoindre
une
série de critères de tri.
Je dois maintenant retransferer après tri ces photos dans un répertoire
sur
le disque dur.
(Ces photos devraient servir à un diaporama pour un club.)
Est-ce faisable et comment?
Un grand merci d'avance.
René















Avatar
michdenis
Bonjour René,

Comme le nom des images a déjà l'extension .jpg , j'ai modifié légèrement la macro.
Je publie l'ensemble pour que ce soit plus facile de t'y retrouver.

Cela devrait rouler... c'était le cas pour mon petit test !

'----------------------------
Option Explicit
Private Declare Function CloseClipboard Lib "user32" () As Long
Private Declare Function OpenClipboard Lib "user32" _
(ByVal hwnd As Long) As Long
Private Declare Function EmptyClipboard Lib "user32" () As Long
Private Declare Function IsClipboardFormatAvailable Lib "user32" _
(ByVal wFormat As Long) As Long
Private Declare Function CopyImage& Lib "user32" (ByVal handle& _
, ByVal un1&, ByVal n1&, ByVal n2&, ByVal un2&)
Private Declare Function GetClipboardData Lib "user32" _
(ByVal wFormat As Long) As Long
Private Declare Function IIDFromString Lib "ole32" _
(ByVal lpsz As String, ByRef lpiid As GUID) As Long
Private Declare Function OleCreatePictureIndirect Lib "olepro32" _
(pPictDesc As PICTDESC, ByRef riid As GUID, ByVal fOwn As Long _
, ByRef ppvObj As IPicture) As Long

Private Type GUID
Data1 As Long
Data2 As Integer
Data3 As Integer
Data4(8) As Byte
End Type

Private Type PICTDESC
cbSize As Long
picType As Long
hImage As Long
End Type
'----------------------------
Sub CréerDesFichiersImages()

Dim sh As Worksheet
Dim S As Shape, Chemin As String
Dim T As Double, L As Double
Dim H As Double, W As Double
Dim Ext As String

'répertoire où seront copiés les images
Chemin = "c:" 'à définir
'L'extension du fichier
Ext = ".jpg"
Application.ScreenUpdating = False
With ThisWorkbook
For Each sh In .Worksheets
For Each S In sh.Shapes
If TypeName(S.OLEFormat.Object) = "Picture" Then
With S
T = .Top
L = .Left
H = .Height
W = .Width
.Width = 250 'à déterminer
.Height = 175 'à déterminer
MakeImgFile Chemin, S
.Top = T
.Left = L
.Height = H
.Width = W
End With
End If
Next
Next
End With
Set sh = Nothing: Set S = Nothing

End Sub

'----------------------------
Sub MakeImgFile(Repertoire As String, S As Shape)
Dim Nom As String
Nom = S.Name
S.CopyPicture 1, 2
Dim hCopy&: OpenClipboard 0&
If IsClipboardFormatAvailable(2) = 0 Then GoTo 1
hCopy = CopyImage(GetClipboardData(2), 0, 0, 0, &H4)
If hCopy = 0 Then GoTo 1
Const IPictureIID = "{7BF80981-BF32-101A-8BBB-00AA00300CAB}"
Dim iPic As IPicture, ID As GUID, PCT As PICTDESC, Ret As Long
Ret = IIDFromString(StrConv(IPictureIID, vbUnicode), ID)
If Ret Then GoTo 1
With PCT
.cbSize = Len(PCT)
.picType = 1
.hImage = hCopy
End With
Ret = OleCreatePictureIndirect(PCT, ID, 1, iPic)
If Ret Then GoTo 1
' Sauve l'image sur le disque (format bmp)
SavePicture iPic, Repertoire & Nom
Set iPic = Nothing
1: EmptyClipboard
CloseClipboard

End Sub
'----------------------------


Salutations!




"René MATHIEU" a écrit dans le message de news: 43935b06$0$6103$
Bonsoir MichDenis,
merci pour ta réponse, voilà

point A: Dans le répertoire c:airbus
j'ai les fichiers: A380.jpg
A380_cockpit.jpg
A380_fuselage.jpg
"" ""
point B : Nom dans la feuille du classeur = le même que dans le répertoire,
(obtenu par transfert )

point C : Actuellement pour A380.jpg j'obtiens : Picture532.jpg
pour A380_cockpit j'obtiens
Picture533.jpg et ainsi de suite.
point D : Je voudrai obtenir si c'est possible le nom d'origine, soit
A380.jpg pour la première photo,
a380_cockpit.jpg pour la deuxième , etc...


Informations insuffisantes dans ta présentation de ta problématique.

Prend seulement le cas d'une image....
A )
à l'origine quel le nom + extension du fichier Image que tu insères dans
ta colonne

B ) Quel est le NOM COMPLET de l'image que tu viens tout juste d'insérer
dans le classeur ?

C) A la fin, quand tu transformes l'image en fichier quel est le nom du
fichier + extension ?

D ) Quel nom voudrais-tu qu'il ait ?

P.S. Si tu fais référence au fait que la macro transforme "image 1" et
"Picture 1" , c'est normal pour excel, il travaille en VBA,
et là c'est Américain (en anglais) . Excel fait la transformation tout
seul. Quelle gentillesse ? Cependant, ceci se résout
facilement.


Salutations!




"René MATHIEU" a écrit dans le message de news:
43934824$0$31129$
Bonjour,
Merci pour ces nouvelles macros, je l'ai mises , j'obtient un fichier avec
des images
que l'on peut passer dans un diaporama, d'autant plus que l'on peut
modifier
les dimensions.
Il me reste un problème que j'essaye de résoudre sans résultat en
bricolant
dans la macro
" Creerdesfichiersimages", c'est de remettre les photos avec leur nom
d'origine
plutôt que " Picture "+ numéro d'image Excel + ".jpg". Ce numéro change
d'ailleurs chaque fois.
Dans la feuille, j'ai une colonne NOMS qui reprend les noms de fichier
photos, les cellules ou j'ai inséré les photos ont elles un Name identique
au nom de fichier.
J'avoue que j'y perd mon latin.
René


à partir d'une procédure publiée ici par Michel Perron,

Tu exécutes la procédure : Sub CréerDesFichiersImages()
Attention, il y a quelques variables à renseigner :
A ) Chemin : lieu de sauvegare

B ) Tu peux modifier la largeur et la hauteur que l'image aura
dans le fichier image...là.
.Width = 250 'à déterminer
.Height = 175 'à déterminer

C) Ext pour l'extension du fichier.



Dans le haut d'un module standard, déclaration des API
'-------------------------
Option Explicit
Private Declare Function CloseClipboard Lib "user32" () As Long
Private Declare Function OpenClipboard Lib "user32" _
(ByVal hwnd As Long) As Long
Private Declare Function EmptyClipboard Lib "user32" () As Long
Private Declare Function IsClipboardFormatAvailable Lib "user32" _
(ByVal wFormat As Long) As Long
Private Declare Function CopyImage& Lib "user32" (ByVal handle& _
, ByVal un1&, ByVal n1&, ByVal n2&, ByVal un2&)
Private Declare Function GetClipboardData Lib "user32" _
(ByVal wFormat As Long) As Long
Private Declare Function IIDFromString Lib "ole32" _
(ByVal lpsz As String, ByRef lpiid As GUID) As Long
Private Declare Function OleCreatePictureIndirect Lib "olepro32" _
(pPictDesc As PICTDESC, ByRef riid As GUID, ByVal fOwn As Long _
, ByRef ppvObj As IPicture) As Long

Private Type GUID
Data1 As Long
Data2 As Integer
Data3 As Integer
Data4(8) As Byte
End Type

Private Type PICTDESC
cbSize As Long
picType As Long
hImage As Long
End Type

'-------------------------
Sub CréerDesFichiersImages()

Dim sh As Worksheet
Dim S As Shape, Chemin As String
Dim T As Double, L As Double
Dim H As Double, W As Double
Dim Ext As String

'répertoire où seront copiés les images
Chemin = "c:" 'à définir
'L'extension du fichier
Ext = ".jpg"
Application.ScreenUpdating = False
With ThisWorkbook
For Each sh In .Worksheets
For Each S In sh.Shapes
If TypeName(S.OLEFormat.Object) = "Picture" Then
With S
T = .Top
L = .Left
H = .Height
W = .Width
.Width = 250 'à déterminer
.Height = 175 'à déterminer
MakeImgFile Chemin, S, Ext
.Top = T
.Left = L
.Height = H
.Width = W
End With
End If
Next
Next
End With
Set sh = Nothing: Set S = Nothing

End Sub
'-------------------------

Sub MakeImgFile(Repertoire As String, S As Shape, Ext As String)

'If TypeName(Selection) = "Range" Then
'If Selection.Areas.Count > 1 Then
'MsgBox " Multiple selections !", 48
'Exit Sub
'End If
'End If
'Selection.CopyPicture 1, 2
S.CopyPicture 1, 2
Dim hCopy&: OpenClipboard 0&
If IsClipboardFormatAvailable(2) = 0 Then GoTo 1
hCopy = CopyImage(GetClipboardData(2), 0, 0, 0, &H4)
If hCopy = 0 Then GoTo 1
Const IPictureIID = "{7BF80981-BF32-101A-8BBB-00AA00300CAB}"
Dim iPic As IPicture, ID As GUID, PCT As PICTDESC, Ret As Long
Ret = IIDFromString(StrConv(IPictureIID, vbUnicode), ID)
If Ret Then GoTo 1
With PCT
.cbSize = Len(PCT)
.picType = 1
.hImage = hCopy
End With
Ret = OleCreatePictureIndirect(PCT, ID, 1, iPic)
If Ret Then GoTo 1
' Sauve l'image sur le disque (format bmp)
SavePicture iPic, Repertoire & S.Name & Ext
Set iPic = Nothing
1: EmptyClipboard
CloseClipboard
End Sub
'-------------------------


Salutations!





"René MATHIEU" a écrit dans le message de news:
43921d02$0$3641$
bonsoir MichDenis,

Voila, j'ai implanté les deux macros, cela fonctionne très bien, j'ai ce
que
j'avais demandé.
Mais j'ai fait une grosse erreur en formulant mes demandes (en fait je
n'ai
pas pensé à cela), car comme les photos ont été réduites à la dimension
des
cellules, je récupère dans le nouveau répertoire des fichiers de deux ou
trois ko, ce qui est trop petit pour le diaporama (et ne peux être
agrandit ).
En fait je dois importer dans de très grandes cellules, puis les diminuer
pour le traitement (tri sur critères), puis les réagrandir pour la
création
du nouveau répertoire.
De toute faon c'est jouable car c'est pas tout les jours que l'on fait
cela.
Un tout grand merci.
René

"René MATHIEU" a écrit dans le message de news:
4391eee7$0$10967$
Bonjour,
Grâce à Michdenis qui m'a fournit une macro VBA, j'ai pu transférer 430
photos d'un répertoire du disque c dans une feuille Excel et y adjoindre
une
série de critères de tri.
Je dois maintenant retransferer après tri ces photos dans un répertoire
sur
le disque dur.
(Ces photos devraient servir à un diaporama pour un club.)
Est-ce faisable et comment?
Un grand merci d'avance.
René















Avatar
René MATHIEU
Bonsoir Michel (je pense),

Merci pour la nouvelle macro,
je vais l'implanter et te tiendrai au courant probablement demain.
amicalement
René



Comme le nom des images a déjà l'extension .jpg , j'ai modifié légèrement
la macro.
Je publie l'ensemble pour que ce soit plus facile de t'y retrouver.

Cela devrait rouler... c'était le cas pour mon petit test !

'----------------------------
Option Explicit
Private Declare Function CloseClipboard Lib "user32" () As Long
Private Declare Function OpenClipboard Lib "user32" _
(ByVal hwnd As Long) As Long
Private Declare Function EmptyClipboard Lib "user32" () As Long
Private Declare Function IsClipboardFormatAvailable Lib "user32" _
(ByVal wFormat As Long) As Long
Private Declare Function CopyImage& Lib "user32" (ByVal handle& _
, ByVal un1&, ByVal n1&, ByVal n2&, ByVal un2&)
Private Declare Function GetClipboardData Lib "user32" _
(ByVal wFormat As Long) As Long
Private Declare Function IIDFromString Lib "ole32" _
(ByVal lpsz As String, ByRef lpiid As GUID) As Long
Private Declare Function OleCreatePictureIndirect Lib "olepro32" _
(pPictDesc As PICTDESC, ByRef riid As GUID, ByVal fOwn As Long _
, ByRef ppvObj As IPicture) As Long

Private Type GUID
Data1 As Long
Data2 As Integer
Data3 As Integer
Data4(8) As Byte
End Type

Private Type PICTDESC
cbSize As Long
picType As Long
hImage As Long
End Type
'----------------------------
Sub CréerDesFichiersImages()

Dim sh As Worksheet
Dim S As Shape, Chemin As String
Dim T As Double, L As Double
Dim H As Double, W As Double
Dim Ext As String

'répertoire où seront copiés les images
Chemin = "c:" 'à définir
'L'extension du fichier
Ext = ".jpg"
Application.ScreenUpdating = False
With ThisWorkbook
For Each sh In .Worksheets
For Each S In sh.Shapes
If TypeName(S.OLEFormat.Object) = "Picture" Then
With S
T = .Top
L = .Left
H = .Height
W = .Width
.Width = 250 'à déterminer
.Height = 175 'à déterminer
MakeImgFile Chemin, S
.Top = T
.Left = L
.Height = H
.Width = W
End With
End If
Next
Next
End With
Set sh = Nothing: Set S = Nothing

End Sub

'----------------------------
Sub MakeImgFile(Repertoire As String, S As Shape)
Dim Nom As String
Nom = S.Name
S.CopyPicture 1, 2
Dim hCopy&: OpenClipboard 0&
If IsClipboardFormatAvailable(2) = 0 Then GoTo 1
hCopy = CopyImage(GetClipboardData(2), 0, 0, 0, &H4)
If hCopy = 0 Then GoTo 1
Const IPictureIID = "{7BF80981-BF32-101A-8BBB-00AA00300CAB}"
Dim iPic As IPicture, ID As GUID, PCT As PICTDESC, Ret As Long
Ret = IIDFromString(StrConv(IPictureIID, vbUnicode), ID)
If Ret Then GoTo 1
With PCT
.cbSize = Len(PCT)
.picType = 1
.hImage = hCopy
End With
Ret = OleCreatePictureIndirect(PCT, ID, 1, iPic)
If Ret Then GoTo 1
' Sauve l'image sur le disque (format bmp)
SavePicture iPic, Repertoire & Nom
Set iPic = Nothing
1: EmptyClipboard
CloseClipboard

End Sub
'----------------------------


Salutations!






1 2 3