Copier un range en image et le placer dans un controle image sur un UserForm

ckeops

XLDnaute Nouveau
Bonjour à tous.
Petite précision pour commencer je suis sur excel 2013 et non 2010 mais le préfixe n'est pas disponible.

Besoin d'un petit peu d'aide avec grand espoir d'en trouver ici!

Voila je vous expose mon problème.

Je développe actuellement une application pour gérer un centre équestre.
Mon classeur est composer de plusieurs base qui sont gérer via une interface créée en userform.

Je me retrouve bloquer sur un point technique pour la partie gestion des planning et des cours.
ma base des cours est constitué. A partir de cette base j'ai développer une macro qui crée sur une autre feuille le planning hebdomadaire qui lui correspond. ce tableau est dimensionner et mis en page via la macro.

Je souhaite alors faire une image de ce planning et l'afficher dans le userform.
J'ai donc penser faire un copier du range contenant le planning, récupérer l'image ainsi copier dans le presse papier et remplir avec l'attribut image d'un contrôle image sur mon userform!

D’après mes recherches cela semble possible, cependant soit cela me fait passer par un enregistrement sur le disque dur ce que je ne souhaite pas puisque cette image sera mise à jour a chaque changement par l'utilisateur, soit cela donne des macro qui me colle tout simplement l'image dans une autre feuille ou dans un contrôle image mais sur la feuille et la complexité de ces codes est au dessus de mes compétences actuelles

Pour plus de compréhension je vous joint un exemplaire de mon travail en pièce jointe.
La base des cours est sur la feuille BaseCours
Le planning est sur la feuille PlanningCours. C'est le tableau (A1:G27) que je souhaite récupérer en image
Le contrôle image de destination souhaité se trouve sur le Userform "FormCoursetPlanning" et se nomme ImagePlanning

Il ne me reste plus qu'a espérer que l'un d'entre vous saura m'aider et à vous remercier par avance!
 

Pièces jointes

  • Gestion_Centre_Equestre.xlsm
    227.1 KB · Affichages: 142

Misange

XLDnaute Barbatruc
Re : Copier un range en image et le placer dans un controle image sur un UserForm

Bonjour
Question posée à minuit et demie et à 8h30 un samedi tu t'impatientes déjà ?
C'est un forum de bénévoles qui peuvent aussi avoir d'autres occupations en week end...

tu peux suivre ce qui est expliqué ici pour un graphique (c'est dynamique)
Ce lien n'existe plus
et regarde aussi les autres propositions sur cette page
Ce lien n'existe plus
 

BOISGONTIER

XLDnaute Barbatruc
Repose en paix
Re : Copier un range en image et le placer dans un controle image sur un UserForm

Bonjour,

Cf exemple en pj

Code:
Private Sub UserForm_Initialize()
  répertoire = ThisWorkbook.Path
  Set f = ActiveSheet
  f.Range("A1").CurrentRegion.Select
  Set champExport = Selection
  champExport.CopyPicture
  f.ChartObjects.Add(0, 0, champExport.Width, champExport.Height).Chart.Paste
  f.ChartObjects(1).Chart.Export répertoire & "\" & "imageExport.gif", "gif"
  f.ChartObjects(1).Delete
  Me.Image1.Picture = LoadPicture("imageexport.gif")
End Sub

Les images et shapes

JB
 

Pièces jointes

  • FormChampImage.xls
    43 KB · Affichages: 143
Dernière édition:

ckeops

XLDnaute Nouveau
Re : Copier un range en image et le placer dans un controle image sur un UserForm

Bonjour a vous et tout d'abord merci a vous deux.
Pardon Misange pour mon empressement apparent mais j'ai quand même laisser passer plus de 24H!

Ensuite je serais plus sur une solution du type de celle de Boisgontier seulement voila je n'arrive pas à la mettre en place.

Que ce soit avec le fichier joint par Boisgontier en exemple ou que je l'a mette en place dans mon propre formulaire, a la première exécution de la procédure j'obtiens :

Erreur d’exécution 53 : Fichier introuvable. /et rien ne se passe mais le fichier ImageExport.gif est bien créé

A la deuxième exécution :

Erreur d’exécution 1004 : La méthode CopyPicture de la classe Range a échoué.

Puis pour toutes les autres exécution l'une ou l'autre des erreurs.

La commande de débogage m’amène sur la ligne
UserForm.Show de la procédure Sub afficheform ()

Une Idée du problème?
Est ce ma version excel? (2013)
 

ckeops

XLDnaute Nouveau
Re : Copier un range en image et le placer dans un controle image sur un UserForm

Alors j'ai trouver la solution pour ce qui est de l'erreur 53 : fichier introuvable.
Il s'agissait tout simplement d'une erreur d'orthographe dans le nom imageExport.gif de la commande LoadPicture.

Mais je bloque toujours sur :

Erreur d’exécution 1004 : La méthode CopyPicture de la classe Range a échoué.
 

ckeops

XLDnaute Nouveau
Re : Copier un range en image et le placer dans un controle image sur un UserForm

Bon alors plus ça va moins je comprend!
J'ai remarqué depuis plusieurs essais que la procédure pouvait fonctionner une fois puis erreur 1004!
Ensuite j'ai remarqué qu'en supprimant manuellement a chaque fois le fichier imageExport.gif créé par la procédure, cela avait pour résultat de permettre à la procédure de fonctionner plus souvent.
J'ai donc ajouter un Kill de ce fichier en fin de procédure et en effet je peux dire que la procédure fonctionne plus souvent. mais j'ai toujours régulièrement des erreurs 1004!
Nb j'ai cru mais seulement cru remarquer qu'en attendant environ 3 secondes entre deux lancements de la procédure cela fonctionne encore un peu plus mais ça n'a aucune valeur logique et réelle pour moi.

Après de maintes recherches la seule piste que j'ai pu trouver était une question de focus sur le bouton de lancement de la macro qui mobilise le focus qui n'est alors plus sur la feuille mais même en lançant la procédure sans bouton cela me fait la même erreur.

D'autres pistes selon lesquelles le problème serait réglé en passant le userform en non modal mais il n'en est rien.

Je sèche complétement et pourtant c'est bel est bien cette solution qu'il me faudrait!
J'en fait appel à vos méninges et vos expertises!
 

ckeops

XLDnaute Nouveau
Re : Copier un range en image et le placer dans un controle image sur un UserForm

Au secours,
Boisgontier, a force de recherche j'ai trouvé la source de ton code mais rien a faire je ne comprend pas
J'ai pensé que ma version excel était la source du problème mais l'aide en ligne reconnait la méthode et la syntaxe est bonne.
Petite question subsidiaire est il possible de faire la même chose sans avoir a activer la feuille en question?
j'ai essayer mais alors la l'erreur 1004 est systématique!
 

BOISGONTIER

XLDnaute Barbatruc
Repose en paix
Re : Copier un range en image et le placer dans un controle image sur un UserForm

Bonjour,

Testé avec 2002 et 2010

Code:
Private Sub UserForm_Initialize()
  répertoire = ThisWorkbook.Path
  Set f = Sheets("feuil1")
  Set champExport = f.Range("A1").CurrentRegion
  champExport.CopyPicture
  f.ChartObjects.Add(0, 0, champExport.Width, champExport.Height).Chart.Paste
  f.ChartObjects(1).Chart.Export répertoire & "\" & "imageExport.gif", "gif"
  f.ChartObjects(1).Delete
  Me.Image1.Picture = LoadPicture("imageexport.gif")
End Sub

JB
 

Pièces jointes

  • Copie de FormChampImage.xls
    64 KB · Affichages: 113

ckeops

XLDnaute Nouveau
Re : Copier un range en image et le placer dans un controle image sur un UserForm

Merci Boisgontier c'est bien le code que tu m'avais déjà donné.
ok pour la procédure sans avoir a activer la feuille!

Mais toujours la même erreur 1004 environ 1 fois sur 5

De plus je me demande bien comment tu as pu tester le fichier que tu fournis sachant que quelques erreurs le rende inutilisable comme tel!


Private Sub UserForm_Initialize()
répertoire = ThisWorkbook.Path
Set f = Sheets("feuil1")
Set champExport = f.Range("A1").CurrentRegion
champExport.CopyPicture
f.ChartObjects.Add(0, 0, champExport.Width, champExport.Height).Chart.Paste
f.ChartObjects(1).Chart.Export répertoire & "\" & "imageExport.gif", "gif"
f.ChartObjects(1).Delete
Me.Image1.Picture = LoadPicture(répertoire & "\" & "imageExport.gif")
'J'ai ajouté :
Kill répertoire & "\" & "imageExport.gif"
End Sub

Ma question est donc :
D'ou vient cette fichue erreur 1004 : la methode copypicture de la classe range a échoué
Pourquoi apprait t'elle alors que la syntaxe est bonne et que cela fonctionne mais pas tout le temps?
Et comment résoudre ce probleme?
 

ckeops

XLDnaute Nouveau
Re : Copier un range en image et le placer dans un controle image sur un UserForm

Bon alors j'ai finis par trouver par moi même une solution qui fonctionne mais je ne comprend pas pourquoi.
Vu qu'il y avait une erreur j'ai voulu voir ce qu'il se passait si je poursuivais quand même en ajoutant :
On Error Resume Next
et la eurêka la macro fonctionne a tout les coups
Voila je met la solution trouvée mais je ne suis pas sur que cela soit réellement la solution.
En attendant que quelqu'un puisse expliquer tout ça, elle fonctionne!

Code:
Private Sub UserForm_Initialize()
repertoire = ThisWorkbook.Path
Set f = Sheets("feuil1")
Set champExport = f.Range("A1:G27")
On Error Resume Next
champExport.CopyPicture
f.ChartObjects.Add(0, 0, champExport.Width, champExport.Height).Chart.Paste
f.ChartObjects(1).Chart.Export repertoire & "\" & "imageExport.gif", "gif"
f.ChartObjects(1).Delete
Me.Image1.Picture = LoadPicture(repertoire & "\" & "imageExport.gif")
Kill répertoire & "\" & "imageExport.gif"
End Sub

Je reste curieux si quelqu'un parvenait à expliquer tout ça!
 

Misange

XLDnaute Barbatruc
Re : Copier un range en image et le placer dans un controle image sur un UserForm

Bonjour
Le code ci-dessous fonctionne parfaitement chez moi. J'ai juste modifié la dernière ligne de l'initialisation du formulaire pour ajouter le chemin du fichier. PAs besoin de tuer le fichier ! le nouveau écrase l'ancien si le nom ne change pas.

Code:
Private Sub UserForm_Initialize()
  répertoire = ThisWorkbook.Path
  Set f = Sheets("feuil1")
  Set champExport = f.Range("A1").CurrentRegion
  champExport.CopyPicture
  f.ChartObjects.Add(0, 0, champExport.Width, champExport.Height).Chart.Paste
  f.ChartObjects(1).Chart.Export répertoire & "\" & "imageExport.gif", "gif"
  f.ChartObjects(1).Delete
  Me.Image1.Picture = LoadPicture(répertoire & "\" & "imageExport.gif")
End Sub
 

ckeops

XLDnaute Nouveau
Re : Copier un range en image et le placer dans un controle image sur un UserForm

Bonjour misange
Alors si cela fonctionne chez toi qui est aussi sous excel 2013, pourquoi ce code fonctionne parfaitement chez toi et que moi j'ai une erreur 1004 regulierement? C'est ca que je n'arrive pas a comprendre!
 

Misange

XLDnaute Barbatruc
Re : Copier un range en image et le placer dans un controle image sur un UserForm

Tu as bien mis la modif que je t'ai proposée (sinon il y a une erreur) ? Teste le classeur joint. C'est celui de JB avec juste la ligne modifiée.
(PS modifie ton profil pour indiquer ta version, c'est plus pratique)
 

Pièces jointes

  • FormChampImage.xlsm
    23.6 KB · Affichages: 115

ckeops

XLDnaute Nouveau
Re : Copier un range en image et le placer dans un controle image sur un UserForm

Bonsoir misange,
Alors pour être sur qu'on parle bien de la même chose je récapitule!
Je suis sous excel 2013 mais à la création de ce topic le préfixe n'existe pas, j'ai donc mis 2010 et préciser ce point dans le premier message!

Au tout début je n'avais aucune idée de comment faire.
Puis BoisGontier est arrivé à la rescousse en me proposant le code sur lequel nous travaillons maintenant.
Une erreur de syntaxe dans le Loadpicture à la dernière ligne de l'initialisation du formulaire me donnait une "erreur 53 Fichier Introuvable", ceci est réglé de la même façon que tu le proposes.

Il reste qu'avec le même code que celui que tu proposes, pour toi, tout marche bien et avant d'écrire ce présent message j'ai eu la possibilité de le tester sur un autre poste que mon ordinateur et sous un excel 2013 aussi et cela fonctionne.
Seulement moi, sur mon poste, avec ce même code et quelque soit le classeur dans lequel je met en place ce code, j'obtiens régulièrement une "erreur 1004 la méthode CopyPicture de la classe Range à échouée".

J'ai trouver un moyen de contourner le problème en ajoutant un "On Error Resume Next" et cela fait que le code fonctionne alors parfaitement chez moi aussi!

Donc mes questions actuelles, juste parce que j'aimerais comprendre ce point sont :
Qu'est ce que cette fichue erreur 1004?
Pourquoi apparait-elle sur mon ordinateur et pas chez les autres?
Et quelle est la véritable solution (puisque que mon On Error n'est qu'un contournement du problème?!?)

NB : Pour ce qui est du Kill du fichier à la fin, il sert juste à effacer le fichier crée puisque je n'ai pas besoin de la conserver et qu'il va être recréé a chaque fois. Cela me permet de ne pas alourdir le dossier contenant le classeur en vue d'une éventuelle distribution!

Voila Voila en espérant avoir été le plus clair possible et en vous remerciant de vous pencher sur mon cas!
 
Dernière édition:

Discussions similaires