Curieux... le déboggeur me renvoie l'erreur "l'élément portant ce nom est introuvable" ...
j'ai pourtant adapté le code "Feuil1" = "IMAGES" et "Image1"=Image35"
Version imprimable
Curieux... le déboggeur me renvoie l'erreur "l'élément portant ce nom est introuvable" ...
j'ai pourtant adapté le code "Feuil1" = "IMAGES" et "Image1"=Image35"
A part vérifier les noms des objets, pas grand chose à faire...
Deux causes probables (mais d'autres existent) :
- Vous faîtes référence à l'onglet en utilisant directement son nom d'objet (IMAGES), sans passer par la collection Sheets ou Worksheets ;
Dans ce cas, il faut faire attention car un onglet possède 2 noms : l'attribut Name d'une part, et (Name) d'autre part [avec les parenthèses]. Et les deux ne sont pas forcément égaux.- Le nom de l'image, qui peut inclure un espace.
Au pire, passez par l'enregistreur de macros, sélectionnez l'objet image et déplacez le.
Bon on avance!
Oui, une espace entre Image et "n"...
Je viens de tester avec 16 images, l'impression tient le coup (pdf ET imprimante)!
Il ne me reste qu'à trouver le code VBA pour
"Si ACTIVITEPHYSIQUE est inscrit en A12
Alors afficher l'image 35 en B12"
puis généraliser cette formule pour les lignes 12 à 20 de A à F
je vais voir au passage à renommer ces images pour plus de clarté...
L'expression
fonctionne parfaitement en renommant mes images comme mes labels..Code:
1
2 ThisWorkbook.Sheets("IMAGES").Shapes(Label1.Caption).CopyPicture xlScreen, xlBitmap Set ThisWorkbook.Sheets("FICHEAGENT").Image1.Picture = PastePicture(xlBitmap)
Ce qui m'épargne d'avoir à récrire la condition d'apparaition de l'image au passage!
Il faudrait que je parvienne à synthétiser mes 58 lignes d'écriture (2 lignes * 29 risques possibles)
du type
"pour i = 0 to Me.ListBox3.ListCount
ThisWorkbook.Sheets("IMAGES").Shapes(LabelI.Caption).CopyPicture xlScreen, xlBitmap
Set ThisWorkbook.Sheets("FICHEAGENT").ImageI.Picture = PastePicture(xlBitmap)
Next i"
EDIT: En revanche, je ne suis pas du tout doué pour cet exercice... je n'arrive jamais à les faire fonctionner!
EDIT2: et PAF! "Objet requis"... ma tentative ne fonctionne pas!
Code:
1
2
3
4 For I = 1 To Me.ListBox3.ListCount ThisWorkbook.Sheets("IMAGES").Shapes(LabelI.Caption).CopyPicture xlScreen, xlBitmap Set ThisWorkbook.Sheets("FICHEAGENT").ImageI.Picture = PastePicture(xlBitmap) Next
Hmm, à mon sens vous n'avez pas besoin d'utiliser une condition supplémentaire. Tout est déjà dans votre code ; il n'y a qu'à adapter à la marge.
En somme, seule la copie des images (dans CExpositionAgent_Click) devrait être impactée. Chaque ligne de copie d'image étant remplacée par les 2 lignes citées plus haut.
Je m'en suis rapidement aperçu!
En revanche mon code "brouillon" bloque au premier Label vide, car non limité par le nombre d'item de ma Listbox3 (Me.ListBox3.ListCount?)
Lourd, Gros, Moche, et pas fonctionnel car s'arrête à la première case vide!Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60 ThisWorkbook.Sheets("IMAGES").Shapes(Label1.Caption).CopyPicture xlScreen, xlBitmap Set ThisWorkbook.Sheets("FICHEAGENT").Image1.Picture = PastePicture(xlBitmap) ThisWorkbook.Sheets("IMAGES").Shapes(Label2.Caption).CopyPicture xlScreen, xlBitmap Set ThisWorkbook.Sheets("FICHEAGENT").Image2.Picture = PastePicture(xlBitmap) ThisWorkbook.Sheets("IMAGES").Shapes(Label3.Caption).CopyPicture xlScreen, xlBitmap Set ThisWorkbook.Sheets("FICHEAGENT").Image3.Picture = PastePicture(xlBitmap) ThisWorkbook.Sheets("IMAGES").Shapes(Label4.Caption).CopyPicture xlScreen, xlBitmap Set ThisWorkbook.Sheets("FICHEAGENT").Image4.Picture = PastePicture(xlBitmap) ThisWorkbook.Sheets("IMAGES").Shapes(Label5.Caption).CopyPicture xlScreen, xlBitmap Set ThisWorkbook.Sheets("FICHEAGENT").Image5.Picture = PastePicture(xlBitmap) ThisWorkbook.Sheets("IMAGES").Shapes(Label6.Caption).CopyPicture xlScreen, xlBitmap Set ThisWorkbook.Sheets("FICHEAGENT").Image6.Picture = PastePicture(xlBitmap) ThisWorkbook.Sheets("IMAGES").Shapes(Label7.Caption).CopyPicture xlScreen, xlBitmap Set ThisWorkbook.Sheets("FICHEAGENT").Image7.Picture = PastePicture(xlBitmap) ThisWorkbook.Sheets("IMAGES").Shapes(Label8.Caption).CopyPicture xlScreen, xlBitmap Set ThisWorkbook.Sheets("FICHEAGENT").Image8.Picture = PastePicture(xlBitmap) ThisWorkbook.Sheets("IMAGES").Shapes(Label9.Caption).CopyPicture xlScreen, xlBitmap Set ThisWorkbook.Sheets("FICHEAGENT").Image9.Picture = PastePicture(xlBitmap) ThisWorkbook.Sheets("IMAGES").Shapes(Label10.Caption).CopyPicture xlScreen, xlBitmap Set ThisWorkbook.Sheets("FICHEAGENT").Image10.Picture = PastePicture(xlBitmap) ThisWorkbook.Sheets("IMAGES").Shapes(Label11.Caption).CopyPicture xlScreen, xlBitmap Set ThisWorkbook.Sheets("FICHEAGENT").Image11.Picture = PastePicture(xlBitmap) ThisWorkbook.Sheets("IMAGES").Shapes(Label12.Caption).CopyPicture xlScreen, xlBitmap Set ThisWorkbook.Sheets("FICHEAGENT").Image12.Picture = PastePicture(xlBitmap) ThisWorkbook.Sheets("IMAGES").Shapes(Label13.Caption).CopyPicture xlScreen, xlBitmap Set ThisWorkbook.Sheets("FICHEAGENT").Image13.Picture = PastePicture(xlBitmap) ThisWorkbook.Sheets("IMAGES").Shapes(Label14.Caption).CopyPicture xlScreen, xlBitmap Set ThisWorkbook.Sheets("FICHEAGENT").Image14.Picture = PastePicture(xlBitmap) ThisWorkbook.Sheets("IMAGES").Shapes(Label15.Caption).CopyPicture xlScreen, xlBitmap Set ThisWorkbook.Sheets("FICHEAGENT").Image15.Picture = PastePicture(xlBitmap) ThisWorkbook.Sheets("IMAGES").Shapes(Label16.Caption).CopyPicture xlScreen, xlBitmap Set ThisWorkbook.Sheets("FICHEAGENT").Image16.Picture = PastePicture(xlBitmap) ThisWorkbook.Sheets("IMAGES").Shapes(Label17.Caption).CopyPicture xlScreen, xlBitmap Set ThisWorkbook.Sheets("FICHEAGENT").Image17.Picture = PastePicture(xlBitmap) ThisWorkbook.Sheets("IMAGES").Shapes(Label18.Caption).CopyPicture xlScreen, xlBitmap Set ThisWorkbook.Sheets("FICHEAGENT").Image18.Picture = PastePicture(xlBitmap) ThisWorkbook.Sheets("IMAGES").Shapes(Label19.Caption).CopyPicture xlScreen, xlBitmap Set ThisWorkbook.Sheets("FICHEAGENT").Image19.Picture = PastePicture(xlBitmap) ThisWorkbook.Sheets("IMAGES").Shapes(Label20.Caption).CopyPicture xlScreen, xlBitmap Set ThisWorkbook.Sheets("FICHEAGENT").Image20.Picture = PastePicture(xlBitmap) ThisWorkbook.Sheets("IMAGES").Shapes(Label21.Caption).CopyPicture xlScreen, xlBitmap Set ThisWorkbook.Sheets("FICHEAGENT").Image21.Picture = PastePicture(xlBitmap) ThisWorkbook.Sheets("IMAGES").Shapes(Label22.Caption).CopyPicture xlScreen, xlBitmap Set ThisWorkbook.Sheets("FICHEAGENT").Image22.Picture = PastePicture(xlBitmap) ThisWorkbook.Sheets("IMAGES").Shapes(Label23.Caption).CopyPicture xlScreen, xlBitmap Set ThisWorkbook.Sheets("FICHEAGENT").Image23.Picture = PastePicture(xlBitmap) ThisWorkbook.Sheets("IMAGES").Shapes(Label24.Caption).CopyPicture xlScreen, xlBitmap Set ThisWorkbook.Sheets("FICHEAGENT").Image24.Picture = PastePicture(xlBitmap) ThisWorkbook.Sheets("IMAGES").Shapes(Label25.Caption).CopyPicture xlScreen, xlBitmap Set ThisWorkbook.Sheets("FICHEAGENT").Image25.Picture = PastePicture(xlBitmap) ThisWorkbook.Sheets("IMAGES").Shapes(Label26.Caption).CopyPicture xlScreen, xlBitmap Set ThisWorkbook.Sheets("FICHEAGENT").Image26.Picture = PastePicture(xlBitmap) ThisWorkbook.Sheets("IMAGES").Shapes(Label27.Caption).CopyPicture xlScreen, xlBitmap Set ThisWorkbook.Sheets("FICHEAGENT").Image27.Picture = PastePicture(xlBitmap) ThisWorkbook.Sheets("IMAGES").Shapes(Label28.Caption).CopyPicture xlScreen, xlBitmap Set ThisWorkbook.Sheets("FICHEAGENT").Image28.Picture = PastePicture(xlBitmap) ThisWorkbook.Sheets("IMAGES").Shapes(Label29.Caption).CopyPicture xlScreen, xlBitmap Set ThisWorkbook.Sheets("FICHEAGENT").Image29.Picture = PastePicture(xlBitmap)
Impossible d'utiliser une syntaxe du type : Labeli.Caption
Dans ce cas, Excel cherche un objet dont le nom serait "Labeli". Et c'est bien normal !
Comment l'interpréteur de code pourrait-il savoir que le "i" final doit être traité différemment ?!?
Le plus simple : passer par une feuille Excel !
En cellule A1, tapez : "Label1", puis étirez autant que de besoin.
En cellule B1, tapez : "=CONCATENER("ThisWorkbook.Sheets(""IMAGES"").Shapes(";A1;".Caption).CopyPicture xlScreen, xlBitmap")"
Etirez à nouveau, puis copiez la colonne B et faîtes un collage spécial des valeurs dans la colonne C.
Vous pouvez alors copier la colonne C et coller ça dans l'éditeur VBA.
NB: comme vous souhaitez une alternance de 2 types de lignes différentes, c'est en fait un tout petit peu plus long que ça. Mais ça devrait fonctionner.
Et avec une syntaxe du type:
"For each Label..." ?
Car ma solution bloque au premier label vide (1 à 30 labels alimentés par 1 à 30 items de Listbox3)..
En tous cas, n'en déplaise à unparia, les test d'impressions sont parfaits et stables... je peux enfin stocker les fiches sous format pdf pour réédition ultérieure ou envoi mail!
Sinon, vous pourriez essayer quelque chose du genre :
Probablement à adapter.Code:
1
2
3
4
5
6
7 With ThisWorkbook.Sheets("FICHEAGENT") Tabl = Array(.Image1, .Image2, .Image3, <etc.>) For i = 1 to Me.ListBox3.ListIndex + 1 ThisWorkbook.Sheets("IMAGES").Shapes(Me.Controls("Label" & i).Caption).CopyPicture xlScreen, xlBitmap Set Tabl(i - 1).Picture = PastePicture(xlBitmap) Next End With
Code adapté, pas de message d'erreur,
mais seule l'Image1 apparaît !
c'est la bonne mais c'est comme si le code s'arrêtait à la première occurrence...
Que se passe-t-il en debugage pas à pas ?
Combien d'itérations de la boucle sont réalisées ?
EDIT : Après réflexion, il s'agit d'un listbox...
Il est probable qu'il ne faille pas se baser sur ListBox3.ListIndex pour arrêter la boucle.
Essayez donc avec :
Code:For i = 1 To Me.ListBox3.ListCount
Bonjour Ben_L
Lirais-tu toi aussi en diagonale ?
Je n'ai aucunement dit que le fait de "loger" les images dans un onglet caché rendait ces images inexploitables.
J'ai dit, persiste et signe, que le fait de cacher l'onglet ne changerait absolument rien à la problématique exposée. :coucou:
et ni ne soulagerait la mémoire, ni accélèrerait quoi que ce fût.
Bonjour unparia,
Un seul point sur lequel je peux être totalement affirmatif : nous nous sommes mal compris ;)
Et en relisant, cette fois ci avec attention..., la conversation, je butte à nouveau !
Dans ta 2ème intervention, tu réponds au post #16 de IronHeavy dont la problématique est, à ce moment, non la taille de son fichier mais l'accessibilité des données pour l'impression.
J'ai donc, à tort visiblement, supposé que ta remarque était en lien avec cette problématique.
Il est probable qu'elle devait en fait être lue comme une suite directe à ta première intervention.
Tu n'a donc pas tout à fait tort (enfin, plutôt raison, quoi... :aie:), j'ai du lire trop vite la première fois.
Désolé d'avoir prêté à tes propos un sens qu'ils n'avaient pas :?
Mais bonne soirée quand même !
Merci Ben_L, tout fonctionne parfaitement dorénavant!
J'ai réintégré les fonctions suggérées et adaptées à mon fichier original, tout est fonctionnel!
Merci encore pour votre aide précieuse