Catalogue d'images sur Excel en VBA

Fermé
milomss Messages postés 5 Date d'inscription mardi 12 août 2008 Statut Membre Dernière intervention 29 août 2008 - 12 août 2008 à 06:46
 milomss - 13 août 2008 à 23:20
Bonjour,
je suis en stage en entreprise et je doit préparer un catalogue permettant de récupérer des données ( référence, désignation, prix, et photos sur Sage ( logiciel de comptabilité/gestion ). A partir d'une feuille excel, le Client inscrit le N° du document à traiter ( ici un devis ), et le nombre de photos qu'il veut afficher par page. J'ai avancé mon travail en créant une macro sur un bouton, mais je ne gère pas le nombre d'images demander par le client. Regardez le code de ma macro, et signalez moi si vous avez des incompréhensions. PS : je suis newbi, ne soyez pas trop méchants =)
°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°

Sub MajCatalog()
'
' Macro MajCatalog
' Macro enregistrée le 25/09/2007 powered by SICAL Informatique
' Tous droits réservés (CopyRight SICAL)
'
Sheets("Selections").Select 'Utilisation de la feuille "Selections"
Worksheets("Selections").Range("A5:P16000").Clear
'Récupération du Numéro de document
NumDoc = Cells(1, 2)
'Selection écritures lignes du document
With ActiveSheet.QueryTables.Add(Connection:= _
"ODBC;DSN=GesComSage;DBQ=C:\Documents and Settings\All Users\Documents\Sage\Gestion commerciale\Gescom Bijou.gcm;CODEPAGE=1252;" _
, Destination:=Range("A5"))
.CommandText = Array( _
"SELECT F_DOCLIGNE.DO_PIECE, F_DOCLIGNE.DL_NO, F_DOCLIGNE.AR_REF, F_DOCLIGNE.DL_DESIGN, F_DOCLIGNE.FNT_PRIXUNET, F_ARTICLE.AR_PHOTO" & Chr(13) & "" & Chr(10) & "FROM F_ARTICLE F_ARTICLE, F_DOCLIGNE F_DOCLIGNE" & Chr(13) & "" & Chr(10) & "WHERE F_ARTICLE.AR_" _
, _
"REF = F_DOCLIGNE.AR_REF AND ((F_DOCLIGNE.DO_PIECE='" & NumDoc & "'))" & Chr(13) & "" & Chr(10) & "ORDER BY F_DOCLIGNE.DL_NO" _
)
.Name = "GesComSage"
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.BackgroundQuery = True
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.PreserveColumnInfo = True
.Refresh BackgroundQuery:=False
End With

'Recherche du nombre de ligne dans le tableau données
IndiceTab = 6 'le tableau démarre à la ligne 10
While Not Range("A" & IndiceTab).Value = ""
IndiceTab = IndiceTab + 1
Wend
nblignes = IndiceTab - 6 'on récupère le nombre de ligne total du tableau
'
For Indlig = 1 To nblignes
CheminImage = Cells(5 + Indlig, 6) 'recup nom fichier
ligne = [G6].Row 'en quelle ligne ?
ActiveSheet.Pictures.Insert(CheminImage).Select 'ouverture image
With Selection.ShapeRange
.LockAspectRatio = msoTrue 'conserver les proportion
X = Cells(2, 2) 'récupere la hauteur de l'image
.Height = X 'hauteur de l'image
.Left = (X * Indlig) 'placement des images cote à cote ( C'est ICI MON PROBLEME !!!! )
.Top = 100 'et positionner verticalement (LES COORDONEES .left et .top sont mis au hasard .... )
End With
Next Indlig
'
End Sub
'mon probleme est que je ne sait pas comment gerer le fait que c le client qui decide de sa présentation ( il decide le nombre d'image a afficher par page )
A voir également:

7 réponses

Bonjour

Mon problème est que je ne sais pas comment gérer le fait que c'est le client qui décide de sa présentation ( il décide le nombre d'images à afficher par page )

Si tu as un nombre à l'avance tu sais faire ? L'emplacement des images est fixe ?
Est-ce que tu dois refaire toute la macro si tu veux changer le nombre d'images ?

Tu peux peux être récupérer le nombre d'images à afficher soit dans une cellule soit dans une *inputbox* qui *demandera* au client combien d'images il souhaite afficher.

FAQ MS-Excel - Club d'entraide des développeurs francophones :
https://excel.developpez.com/faq/?page=FenetresExcel

Sommaire > Les boîtes de dialogues intégrées
Comment utiliser l'assistant formulaire dans Excel 2007 ?
Comment choisir un fichier sur le PC et récupérer son nom (utilisation de GetOpenFilename) ?
Comment choisir un répertoire (utilisation de BrowseForFolder) ?
Comment utiliser la boîte de dialogue FileDialog ?
Quelles différences entre FindFile et GetOpenFilename ?
Comment utiliser les MsgBox ?
Quelle est la différence entre InputBox et Application.InputBox ?
Comment afficher un MsgBox temporaire ?
Comment créer et utiliser des fenêtres de message étendues ?
Comment utiliser le compagnon Office par macro ?
Comment utiliser les MS agents dans Excel ?
Comment afficher les boîtes de dialogue intégrées par macro ?
Comment créer une barre de progression dans la barre d'état ?
Pourquoi j'ai parfois un message d'erreur lorsque j'utilise le formulaire (grille de données) ?

"La fonction InputBox affiche une boîte de dialogue permettant à l'utilisateur de saisir un texte. La fonction renvoie l'information en donnée de type String, lorsque vous cliquez sur le bouton OK. Si l'utilisateur clique sur le bouton Annuler ou sur la croix de fermeture, une chaîne vide est renvoyée."

Merci
0
Rebonjour,


Si ça peut t'aider notamment pour les macros / pour la programmation même si ça date :


Utiliser la librairie Windows Image Acquisition en VBA
https://silkyroad.developpez.com/VBA/WindowsImageAcquisition/
Cette librairie permet de manipuler les images.

Stocker et visualiser des images GIF dans Excel
https://silkyroad.developpez.com/VBA/ExcelImageGIF/
Ce document montre comment visualiser une image GIF animée dans Excel et propose une solution pour stocker cette image directement dans le classeur. Vous pouvez ainsi transférer le classeur sur un autre PC, en ayant toujours l'image GIF disponible dans le fichier Excel.


Les images ne s'affichent pas dans l'ordre ? Elles n'ont pas un emplacement réservées ?
Tu les affiches sur les mêmes emplacements mais en changeant la source = l'images et les données.
Prévois les emplacements à l'avance et affiches les images et les données dans les emplacements.
J'ai sûrement du mal à saisir la difficulté de mise en pratique ; pardon pour l'absence de solution directe.

Merci à tous pour l'aide pratique que vous voudrez bien apporter directement
0
Rebonjour

Excelabo : Gérer les images :
http://www.excelabo.net/excel/outilsimages.php

Merci
0
donc je vais me répéter, mais c'est pour mieux que l'on comprenne mon problème.Par exemple dans un devis, il y'a 10 articles, il me faut présenter sous forme de catalogue ces articles par rapport à un nombre d'images/pages définis par l'utilasateur dans une cellule.Si l'utilisateur demande à afficher 6 images par page, il faut que mes images soit affichées de la sorte(avec les caractéristiques de l'articles en dessous ( reference, designation , prix )).
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Ben sa ira, mon probleme est reglé (MDR), merci pour votre aide, et rdv au prochain problemes...
0
milomss Messages postés 5 Date d'inscription mardi 12 août 2008 Statut Membre Dernière intervention 29 août 2008
12 août 2008 à 07:56
non, justement le probleme est que je ne sais pas comment faire pour gerer le fait que c'est le client qui signale le nombre d'images (nombre d'élements du devis) par page.Donc l'emplacement des images doit se faire selon le nombre choisis.OUI, je peut recuperer le nombre d'images/page dans une variable qui pointe sur une cellule bien sur. Mais apres sa, je ne sais vraiment pas quoi faire pour diposer tout cela ( avec les Elements correspodant aux images ( ref, designation, prix ))

PS : Merci pour votre aide
-1
eriiic Messages postés 24571 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 8 mai 2024 7 216
13 août 2008 à 08:02
Bonjour,

Pas facile à cerner ton pb, il manque qcq précisions sur la mise en page que tu veux et sur ce qui te bloque exactement.
Apparement tes images sont mises cote à cote... Chacune dans une cellule ?
Si oui tu peux te baser sur les propriétés .left et .top des cellules
.Left = c.Offset(0, i).Left + 2
c : range de ta 1ère cellule recevant une image
i : n° de l'image
+2 : décalage par rapport au bord

et puis il faut tenir compte de la taille de tes images si elles n'ont pas été retaillées à l'avance. Voir si la largeur .Width est compatible avec la largeur de colonne .ColumnWidth
Si les images sont dans une même cellule (ce que l'on apprend dans ton dernier post) et bien additionne la largeur .width (+ le décalage qui sépare chaque image) au fur et à mesure.

Et surtout dis plus précisément ce que tu veux faire et que tu n'arrives pas à faire.
Quel est ton pb exact ????


eric
-1