Nommer une Image par VBA avec recupération du nom dans une cellule

VincentLoic

XLDnaute Nouveau
Bonjour a tous,

Déjà merci pour toute ces solutions déjà trouvées dans ce forum et qui m'a rendu grandement service.

Comme je l'ai indiqué dans le titre je bloque sur la création d'un fichier excel qui aurait pour but la création d'image leur stockage (la nommer et la placer dans une cellule précise) afin de pouvoir les rappeler ultérieurement

Exemple dans un onglet feuil1
Sur les cellules B5:F10 je fais créer une image grâce à des formes déjà disponibles dans excel
Via une macro déjà existantes j'arrive à transformer cette sélection de formes en images.
Par contre je souhaiterais pouvoir la copier par exemple sur un onglet feuil 2 la renommer en fonction du texte présent en feuil 1 cellule B12
Si B12= Balise 1 je souhaite que mon image s'appelle balise 1

J'espère avoir été assez clair sur ma demande d'aide merci d'avance
Loïc
 

Yaloo

XLDnaute Barbatruc
Re : Nommer une Image par VBA avec recupération du nom dans une cellule

Bonjour VincentLoic et bienvenu sur XLD,

Ce qui serait bien, c'est de mettre ce que tu as déjà fait, cela éviterai aux XLnautes de refaire un fichier qui risque de ne pas correspondre à ce que tu souhaites.

A+

Martial
 

VincentLoic

XLDnaute Nouveau
Re : Nommer une Image par VBA avec recupération du nom dans une cellule

Bonsoir Martial,
Voici justement en pièces jointe un exemple avec le bouton de sauvegarde du poinçon (PS je ne lui ai pas associé de macros mais j'ai laisser mes débuts de piste de macros avec le fichier)

Mon souhait serait d'avoir une macro qui ne copie pas simplement ce groupe d'objet mais qui le transforme en image!
j'aimerais également pouvoir par l'intermédiaire pouvoir choisir le nom de cet image via par exemple messagebox (exemple balise 1; .....) et les ranger sur ce fichier afinde pourvoir les rappeler sur un autre onglet afin de réaliser différents parcours composé de 6 poinçons par exemple.

Merci d'avance
bonne soirée
 

Pièces jointes

  • Exemple.xlsm
    30.5 KB · Affichages: 69
  • Exemple.xlsm
    30.5 KB · Affichages: 70
  • Exemple.xlsm
    30.5 KB · Affichages: 64
Dernière édition:

VincentLoic

XLDnaute Nouveau
Re : Nommer une Image par VBA avec recupération du nom dans une cellule

Voici le debut du code que j'ai commencé à écrire en espérant qu'il n'y pas trop de faute car je débute en VBA

Sub CréationPoinçon()

' Définition des variables de la feuille Créationpoinçons pour cette macro:
Sheets("Créationpoinçon").Select
' 1ère variable le lieu de pratique
Dim lieu As String
lieu = Cells(7, 8)

' 2ème variable le numéro de la balise
Dim Balise As String
Balise = Cells(8, 8)

' 3ème variable: Sélection du poinçon créé
Dim CréationPoinçon As Object
CréationPoinçon = ActiveSheet.Shapes("Poinçon").Select (Erreur sur cette ligne Erreur 91 : Varaible objet .... non définie)

' Sauvergarde du poinçon au format image dans un dossier propre (nom du dossier: Référentiel Poinçons)

Dim Répertoire As String, nomImage$, typImage$

Set champExport = CréationPoinçon & " " 'renvoie à la varaible de sélection
Répertoire = "C:\Users\Loïc\Desktop\Fichiers excel EPS\Logiciel Course orientation\Réfrentiel Poinçons" & "\" & lieu & " "
' Renvoie au chemin principal avec choix du sous-dossier en fonction de la variable lieu
nomImage = Balise & " " ' nom de l'image = variable balise
typImage = "jpeg"


End Sub
 
Dernière édition:

Yaloo

XLDnaute Barbatruc
Re : Nommer une Image par VBA avec recupération du nom dans une cellule

Bonjour VincentLoic,

Vois le fichier ci-joint, il copie l'image dans un fichier dans le sous-répertoire du Lieu.
Vois sur le site de JB, tu as plein d'exemple sur les images.

A+

Martial
 

Pièces jointes

  • VincentLoic.xlsm
    31.1 KB · Affichages: 79

VincentLoic

XLDnaute Nouveau
Re : Nommer une Image par VBA avec recupération du nom dans une cellule

Bonsoir Martial,

Tout d'abord merci,

C'est exactement ce que je souhaitais, juste petite bémol malheureusement mais je pense rien de grave!
Une fois que j'ai copié mon premier poinçon (qui marche à la perfection enregistrement dans le répertoire et tout! encore merci)
quand j'essaye d'enregistrer un deuxième poinçon celui ci vient se coller dans la cellule A1 en plus de s'enregistrer dans le répertoire et cela me désactive également les listes déroulantes (Balise N°) et concernant le lieu (Robin/Etcheberry)

juste pour ma culture personnelle j'ai du mal a comprendre le but de ces dernières lignes:

If Dir(Répertoire, 16) = "" Then MkDir Répertoire
Set s = ActiveSheet.Shapes("Poinçon")
s.CopyPicture
ActiveSheet.ChartObjects.Add(0, 0, s.Width, s.Height).Chart.Paste
ActiveSheet.ChartObjects(1).Chart.Export Filename:=Répertoire & "\" & Balise & ".jpg"
ActiveSheet.Shapes(ActiveSheet.Shapes.Count).Delete

Je me permet également d'abuser un peu si tu me le permet!
Dans mon deuxième onglet
Je souhaiterais faire une fiche récapitulative des poinçons crées
Pour cela je voudrais que dans la cellule correspondant à la balise 1 de Robin s'affiche le poinçon correspondant qui a été enregistré dans le répertoire en format jpeg.

Merci d'avance
Loïc
 

Yaloo

XLDnaute Barbatruc
Re : Nommer une Image par VBA avec recupération du nom dans une cellule

Bonsoir Loïc,

Voici ton fichier modifié, j'ai essayé de décrire chaque action. Les cellules fusionnées sont à éviter, dans ton cas, le calcul pour le positionnement de l'image en Feuil1 serait plus aisé avec des cellules simples.

J'ai également fait la seconde partie, càd la copie de l'image dans la Feuil1.

A te relire

Martial

PS : J'ai changé le nom de tes Balises, en ne mettant que les N°, car tu n'avais pas de correspondance entre tes données entre les 2 feuilles.
 

Pièces jointes

  • Loic V1.xlsm
    35.1 KB · Affichages: 50
  • Loic V1.xlsm
    35.1 KB · Affichages: 54
  • Loic V1.xlsm
    35.1 KB · Affichages: 52

VincentLoic

XLDnaute Nouveau
Re : Nommer une Image par VBA avec recupération du nom dans une cellule

Bonjour Martial,

c'est parfait je te remercie beaucoup.
juste une dernière question:
Si je décide de remplacer une balise déjà crée dans la feuil2 j'ai remarqué que la macro de la feuil 1 me permet bien de remplacer l’image dans le répertoire par contre celle ci vient se coller en haut de la feuil2 au lieu d'aller remplacer celle présente dans "le tableau récapitulatif".

Faut il que effectuer un reset des cellules cibles pour la copie?
Si oui peut on proposé par messagebox :"Voulez vous remplacer la balise N°" & Balise " " & "concernant le parcours de " & Lieu " "
Oui Ou Non?

merci d'avance bonne journée
Loïc
 

Yaloo

XLDnaute Barbatruc
Re : Nommer une Image par VBA avec recupération du nom dans une cellule

Bonjour Loïc,

Voici ton fichier avec demande si oui ou non on remplace l'existant.

A+

Martial
 

Pièces jointes

  • Loic V1.xlsm
    36 KB · Affichages: 67
  • Loic V1.xlsm
    36 KB · Affichages: 60
  • Loic V1.xlsm
    36 KB · Affichages: 55

VincentLoic

XLDnaute Nouveau
Re : Nommer une Image par VBA avec recupération du nom dans une cellule

bonjour Martial je te remercie beaucoup c'est parfait

Bonne fête de fin d'année

Une dernière chose Martial, si je souhaite centrer mon image dans la cellule de destination je dois modifier comment ce code:
'Détermination de c pour définir où copier
Set c = .Cells(Lig, Col)
'Insertion du fichier avec renommage de l'image dans la Feuil1
.Pictures.Insert(ChemFichier).Name = Image
'Modifie la hauteur de l'image, rajouter *2 :égale à 2 fois la hauteur de la cellule, car cellule fusionnée (mes cellules ne sont plus fusionnées)
.Shapes(Image).Height = c.Height
'Positionne à partir de la gauche l'image par rapport à la cellule
.Shapes(Image).Left = c.Left
'Idem pour le positionnement en hauteur
.Shapes(Image).Top = c.Top
'Permet de garder les propotions de l'image, puisque ci-dessus nous n'avons modifié que la hauteur
.Shapes(Image).LockAspectRatio = msoTrue

merci d'avance
Bonne fêtes de fin d'année
 
Dernière édition:

VincentLoic

XLDnaute Nouveau
Re : Nommer une Image par VBA avec recupération du nom dans une cellule

Sans pb,

comme tu me l'avais souligné, j'ai dé-fusionné toute les cellules comportant des images afin de faciliter leur utilisation ultérieure
j'ai également modifié l'onglet de copie (RépertoirePoinçons) afin que toute les images soit copiées les unes en dessous des autres comme un tableau afin de pouvoir utiliser une fonction rechercheV afin de copier les images dans d'autres onglet en fonction de leur nom.

Mon souhait serait ,que quand les images se copient dans la feuille répertoire poinçon via la macro que tu m'a fait et que j'ai modifiée, que les images se centrent automatiquement dans la cellule de destination sans remplir complètement celle-ci!

En effet en regardant sur le lien concernant le forum de JB ainsi que sur d'autres forum, ils disent qu'il est important que l'image ne dépasse pas de la cellule si on souhaite pouvoir la copiée par des formule indirect, décaler, equiv,...

Mon but sera, dans mon onglet création de parcours , que l'image du poinçon s'affiche automatiquement en fonction du nom de la balise. Idem dans mon onglet Correction générale

Merci d'avance

Loïc
 

Pièces jointes

  • Loic V1.xlsm
    53 KB · Affichages: 62
  • Loic V1.xlsm
    53 KB · Affichages: 56
  • Loic V1.xlsm
    53 KB · Affichages: 55
Dernière édition:

Yaloo

XLDnaute Barbatruc
Re : Nommer une Image par VBA avec recupération du nom dans une cellule

Bonjour Loïc,

En premier lieu, il faut redimensionner ton image, dans l'exemple ci-dessous, tu vas avoir ta dimension d'image à 90% de ta cellule.
Puis repositionner ton image par rapport à ta cellule, il suffit de ne prendre que 5%, soit les 10% restant divisé par 2 pour centrer.

VB:
    .Pictures.Insert(ChemFichier).Name = Image
    .Shapes(Image).Height = c.Height * 0.9 'image à 90% de la cellule
    .Shapes(Image).Left = c.Left + c.Width * 0.05 'Positionnement 5% soit 10% divisé par 2 pour centrer
    .Shapes(Image).Top = c.Top + c.Height * 0.05 'Idem ci-dessus
    .Shapes(Image).LockAspectRatio = msoTrue
   End With
End Sub

A+

Martial
 

VincentLoic

XLDnaute Nouveau
Re : Nommer une Image par VBA avec recupération du nom dans une cellule

Bonjour Martial

Désolé j'étais parti ces derniers temps ! merci nickel

Tout d’abord bonne année et meilleurs voeux a tous

Juste pour infos j'essaye de modifier ta macros pour la réutilisé mais ce coup ci pour copié une sélection de cellules au format image etc
Voici mon code modifié mais je bloque à différents endroits (passage en gras) sur la partie 1

*j'ai voulu remplacé ton code d'origine:
Sheets("Créationpoinçon").Select par
Sheets("CréationParcours").Range("B6:J11").Select

*j'ai voulu remplacé ton code d'origine:
Set s = ActiveSheet.Shapes("Poinçon")
Set s =et la je ne sais pas quoi mettre

Sub CréationParcours()

' Définition des variables de la feuille Créationpoinçons pour cette macro:
Dim Lieu$, Parcours&, Répertoire$, Parcours2 As Shape, x
Dim Col&, Lig&, Fichier$, ImageExiste As Boolean
'Sheets("CréationParcours").Range("B6:J11").Select est la sélection que je souhaite transformer en image
Lieu = [E4]
Parcours = [J9]
Parcours2 = [K2]
Répertoire = ThisWorkbook.Path


'Si le répertoire au nom de Lieu n'existe alors on le crée
If Dir(Répertoire & "\Parcours", 16) = "" Then MkDir (Répertoire & "\" & "Parcours")
If Dir(Répertoire & "\Parcours" & "\" & Lieu, 16) = "" Then MkDir (Répertoire & "\" & "Parcours" & "\" & Lieu)
'Détermination du nom du fichier

Fichier = "Parcours N°" & Parcours & ".jpg"
'Détermination du chemin du fichier avec son nom
ChemFichier = Répertoire & "\Parcours" & "\" & Lieu & "\" & Fichier

'**** Partie permettant de créer l'image en JPG dans le répertoire ****
'Attribution de l'objet à s
'Set s = ....
'Copie l'image
Image.CopyPicture
'Colle l'objet avec les dimensions d'origine (voir plus bas pour suppression de cette image)
ActiveSheet.ChartObjects.Add(0, 0, s.Width, s.Height).Chart.Paste
'Exporte l'image avec le chemin et le nom
ActiveSheet.ChartObjects(1).Chart.Export Filename:=ChemFichier
'Supprime l'objet créé plus haut, en testant tous les objets, avec 2007 qq problèmes d'image
For Each x In ActiveSheet.Shapes
If x.Type = 3 And (Left(x.Name, 5) = "Chart" Or Left(x.Name, 5) = "Graph") Then x.Delete
Next x

'**** Partie permettant de copier l'image JPG dans la Feuil4 ****
'Attribution d'une valeur à la variable Col, détermine dans
'quelle colonne on va copier l'image dans la Feuil4
Col = IIf(Lieu = "Robin", 2, 2)
'Recherche la ligne de copie (!!!! ça serait plus simple si les cellules n'étaient pas fusionnées !!!)
Lig = Application.Match(Parcours2, Feuil4.Columns(1), 0)
'Détermination du nom de l'image
Image = Lieu & " " & Fichier
'Avec la Feuil4
With Feuil4
'Vérifie si l'image existe dans Feuil4
For Each x In .Shapes
'Si elle existe
If x.Name = Image Then
'On demande si l'on souhaite la supprimer ?
If MsgBox("Voulez-vous remplacer l'image ?", vbYesNo, "Remplacement") = vbYes Then
'si réponse OUI, on supprime l'image puis on sort de la boucle
.Shapes(Image).Delete
'On sort de la boucle pour suivre
Exit For
'Si la réponse est NON
Else
'On sort da la macro puisque l'on ne veut pas la remplacer.
Exit Sub
End If
End If
'On continue avec l'image suivante
Next x
'Détermination de c pour définir où copier
Set c = .Cells(Lig, Col)
'Insertion du fichier avec renommage de l'image dans la Feuil4
.Pictures.Insert(ChemFichier).Name = Image
'Modifie la hauteur de l'image, rajouter *2 :égale à 2 fois la hauteur de la cellule, car cellule fusionnée
.Shapes(Image).Height = c.Height * 0.9 'image à 90%
'Positionne à partir de la gauche l'image par rapport à la cellule C.Left Ici centrer:
.Shapes(Image).Left = c.Left + (c.Width * 0.05)
'Idem pour le positionnement en hauteur C.Top; Ici centrer:
.Shapes(Image).Top = c.Top + (c.Height * 0.05)
'Permet de garder les propotions de l'image, puisque ci-dessus nous n'avons modifié que la hauteur
.Shapes(Image).LockAspectRatio = msoTrue
End With
End Sub

Je te joint au cas ou mon fichier excel en espérant que la taille passe

Merci d'avance
Loïc
 

Pièces jointes

  • Logiciel CO.xlsm
    199 KB · Affichages: 56
  • Logiciel CO.xlsm
    199 KB · Affichages: 45
  • Logiciel CO.xlsm
    199 KB · Affichages: 43

Yaloo

XLDnaute Barbatruc
Re : Nommer une Image par VBA avec recupération du nom dans une cellule

Bonsoir Loïc, le forum,

J'ai bien compris la première partie (enfin je pense :eek:) la copie de l'image en JPG dans le répertoire.

Dans la seconde partie, tu veux copier l'image dans l'onglet "RécapitulatifParcours" ? Si oui, quel est le principe de positionnement dans la colonne ?

A te relire

Martial
 

Pièces jointes

  • Logiciel CO.xlsm
    236.8 KB · Affichages: 44
  • Logiciel CO.xlsm
    236.8 KB · Affichages: 42
  • Logiciel CO.xlsm
    236.8 KB · Affichages: 51

Discussions similaires

Statistiques des forums

Discussions
312 429
Messages
2 088 350
Membres
103 822
dernier inscrit
kader55