Inserer des photos en fonction de son numero dans une cellule

Résolu
niewbiesVBA Messages postés 51 Date d'inscription jeudi 15 janvier 2015 Statut Membre Dernière intervention 2 mars 2015 - 17 janv. 2015 à 18:40
niewbiesVBA Messages postés 51 Date d'inscription jeudi 15 janvier 2015 Statut Membre Dernière intervention 2 mars 2015 - 4 févr. 2015 à 19:49
Bonsoir à tous,

Ma question n'est pas très clair car je ne savais pas comment la poser, mais je vous expliquer ce que je souhaite :

Je possède un tableau, chaque ligne de se tableau correspondent à un défaut, et fais donc l'objet d'un rapport.

A la fin de chaque ligne se trouve les numéro de photos associée a ce défaut.

Les photos sont stockées dans un dossier spécifiques.

j'ai créé un bouton nommé "créer fiche" (pour les rapports), je voudrais que les photo puisse s'ajouter dans leur cases respective sur les rapports mais je ne sais pas si cela est possible en VBA (bien que j'espère que oui), pourriez vous m'orienter à ce niveau ?

Je vous remercie tous pour votre aide

Bonne soirée

23 réponses

Whismeril Messages postés 19025 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 19 avril 2024 656
17 janv. 2015 à 19:39
0
niewbiesVBA Messages postés 51 Date d'inscription jeudi 15 janvier 2015 Statut Membre Dernière intervention 2 mars 2015
17 janv. 2015 à 19:45
Merci mais je connais l'enregistreur de macro... mais mon probleme est lors de la génération du rapport...
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
Modifié par ucfoutu le 18/01/2015 à 07:16
Bonjour,
J'ai des difficultés à tout saisir de ce que tu as exposé.
Qu'est ton "rapport" ? (une feuille Excel ? Autre (et quoi) ?)
Si feuille Excel :
Quelle est ta difficulté ? ===>>>
- déterminer (pour la lire) la dernière colonne d'une ligne lue dans ton "tableau" ?
- insérer dans une feuille Excel "Rapport" , à une cellule déterminée, une image dont tu connais le chemin complet ?

________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviend
0
niewbiesVBA Messages postés 51 Date d'inscription jeudi 15 janvier 2015 Statut Membre Dernière intervention 2 mars 2015
Modifié par niewbiesVBA le 18/01/2015 à 13:22
Bonjour ucfoutu,

Donc je vais tacher d'être plus précis dans mes explications...

Dans mon premier poste, on évoque mon UserForm qui correspond à un défaut sur une ligne... à chaque validation( nouveau défaut) on passe à une nouvelle ligne. ça c'est pour l'historique...

Maintenant, j'ai une autre macro qui est fonctionnel qui permet de créer une fiche (rapport excel) par ligne, via ce tableau "BDD".

sur ce tableau "BDD" je met également les numéro de photo que je prend par défaut (4 n° de photos par ligne, donc 4 photo par rapports), et j'aimerais que lors de la création des fiche (rapports), excel soit capable de faire le liens entre les numéros entrer dans les cellules avec les photo dans le dossier (qui porte le même numéros et me les integrer dans le rapport en tant qu'image...

J'espère avoir été plus clair dans mes explications.

En te remerciant
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211 > niewbiesVBA Messages postés 51 Date d'inscription jeudi 15 janvier 2015 Statut Membre Dernière intervention 2 mars 2015
18 janv. 2015 à 13:30
Essaye de rester concentré sur CETTE discussion :
Dans mon premier poste, on évoque mon UserForm qui correspond à un défaut sur une ligne... à chaque validation( nouveau défaut) on passe à une nouvelle ligne. ça c'est pour l'historique...

"Mon premier post" ne veut strictement rien dire pour moi (ni par ceux qui regardent CETTE discussion !
Ne crois surtout pas (ce serait une erreur) que l'on "suit" tes différentes discussions. Ici, on ne suit que la discussion en cours.
0
niewbiesVBA Messages postés 51 Date d'inscription jeudi 15 janvier 2015 Statut Membre Dernière intervention 2 mars 2015 > ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018
18 janv. 2015 à 16:48
oui effectivement, autant pour moi, mais je n'appelais pas à la relecture des autres postes, mais seulement a une explication, j'aurais dû le formuler autrement...

Mes excuses :)
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
18 janv. 2015 à 16:58
ce que nous attendons, ce sont les réponses précises, indispensables et purement techniques aux deux questions que je t'ai posées plus haut.
Par ailleurs : une image (photo) ne peut être identifiée que par un chemin d'accès (si fichier) ou par le contrôle qui la contient (si dans ton appli). Je ne comprends donc pas ce que tu veux dire par "son numéro". Explique cela techniquement.
0

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

Posez votre question
niewbiesVBA Messages postés 51 Date d'inscription jeudi 15 janvier 2015 Statut Membre Dernière intervention 2 mars 2015
18 janv. 2015 à 17:14
Comment dire...

Lorsque je fais mon inspection et que je trouve des défauts, je les prend en photo. et lorsque je rempli mon USF, je met les numero de ces photos dans leur textbox respective) (a ce stade ce ne sont que de simple numéro, elle n'ont aucun lien).
Ensuite, en fin de journée, je transfert mes photos de ma carte memoire vers un dossier photo (leur numéro est identique).

Puis, je créé mes rapports, c'est à ce moment que je cherche une solution pour que les photos se mettent automatiquement dans mon rapport... et je ne sais pas comment procéder.

Est ce bon comme ça ? :)
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
Modifié par ucfoutu le 18/01/2015 à 17:33
1)
Ensuite, en fin de journée, je transfert mes photos de ma carte memoire vers un dossier photo (leur numéro est identique).

Si vers un dossier ===>>> tu as donc des noms de fichiers dans ce dossier. Si tu veux dire que ces noms de fichiers sont de simples numéros (tels 1, 2, 3, etc ...) ils n'en sont pas moins des NOMS (avec une extension). Et on s'y réfère en indiquant leur chemin d'accès (ex... C:\répertoire\dossier\2.jpg si le nom du fichier image est 2.jpg).
2) tu ne m'as toujours pas dit ce qu'étaient exactement :
- ton "tableau"
- ton "rapport"
3) Tu dis que tu mets le numéro de photo dans une textbox d'un userform. Ce qui y est mis n'y "vit" que pendant la session ouverte. Ce numéro ne sera donc conservé en mémoire que si immédiatement inscrit sur une cellule d'une feuille de calcul, sur la ligne concernant l'inspection de tel produit. C'est alors, au moment de cette inscription, que tu peux adroitement mettre le chemin complet de cette image dans la cellule.
commence par cela.
________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviend
0
niewbiesVBA Messages postés 51 Date d'inscription jeudi 15 janvier 2015 Statut Membre Dernière intervention 2 mars 2015
18 janv. 2015 à 17:41
Mon tableau est ma BDD et donc ce qui me sert pour mes inspections, il est remplie via mon USF

Les numeros de photo sont effectivement stockées dans des cellules du tableau BDD.

Mes rapport sont au format excel et sont générer via une macro.
Mon classeur est conçu comme suit :

Une feuille BDD (pour mes inspections)
Un feuille Fvierge (servant de modèle pour la génération de rapports et donc 1 rapport pas ligne du tableau BDD)

Les numéro de photos sont IMGPxxxx.jpg.

Mais comme je l'ai dis, je suis débutant et n'ai malheureusement pas toutes les technique pour une telle réalisation.

Merci de votre patience
0
niewbiesVBA Messages postés 51 Date d'inscription jeudi 15 janvier 2015 Statut Membre Dernière intervention 2 mars 2015 > niewbiesVBA Messages postés 51 Date d'inscription jeudi 15 janvier 2015 Statut Membre Dernière intervention 2 mars 2015
18 janv. 2015 à 17:43
En ce cas, faudrait-il en premier que je fasse une macro qui permette de générer les liens vers les photos directement et ensuite réutiliser ses liens pour qu'ils soient en photo dans mes rapport ?
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
18 janv. 2015 à 17:55
Hé bien.
Tu remplis donc le rapport d'un produit en lisant les cellules qui lui correspondant dans ton tableau et en :les copiant (sauf celle de la photo) là où tu veux dans ta feuille "rapport".
Quant à celle de la photo : si en cellule Y4, tu connais son chemin d'accès :
Exemple : "C:\toto\titi\IMPG" & format(range("Y4").Value, "0000") & ".jpg"& "
correspondra au chemin "C:\toto\titi\IMPG0003.jpg si tu as 3 en cellule Y4
Il ne te reste alors plus qu'à insérer dans ta feuille rapport un contrôle image (contrôle activex) à la propriété Picture duquel tu attribues ce chemin.
0
niewbiesVBA Messages postés 51 Date d'inscription jeudi 15 janvier 2015 Statut Membre Dernière intervention 2 mars 2015
18 janv. 2015 à 18:07
Auriez-vous un exemple de code pour me permettre de démarrer, car j'avoue que je commence a me perdre.

Je vous remercie
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
Modifié par ucfoutu le 19/01/2015 à 08:13
Exemple de code ?
Je ne vois vraiment pas comment je pourrais faire sans venir au-dessus de ton épaule et de ton clavier !
On va essayer :
1) Dans la feuille feuil1 d'un nouveau classeur nommé classeur1, mets ceci en cellule A1 : "toto" et en cellule A2 : 4
et sauvegarde-le dans "C:\classeur1.xlsm" puis ferme-le

2) dans la feuille feuil1 d'un classeur classeur 2, insère un contrôle image nommé image1 cellule C5
et sauvegarde-le dans "c:\classeur2.xlsm" puis ferme-le
3) mets une image nommée toto.0004.jpg" dans C:\

Dans une macro de ton classeur1 :
ATTENTION : j'ai écrit à main levée et sans rien pouvoir vérifier, sauf à écrire moi-même tout sur ma machine (classeurs, image, etc ..., ce que je ne vais tout de même pas faire !)

 dim tata As workbook
set tata = workbooks.open("c:\classeur2.xlsm")
with tata.worksheets("Feuil1")
.range("C1").value = range("A1").value
.image1.picture = loadpicture("C:\toto" & format(Range("A2").value, "0000") & ".jpg")
end with


Voilà un exemple. Il devrait "marcher". Analyse-le et comprends-le.
Aller plus loin serait impensable sans venir physiquement chez toi !
________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviend
0
niewbiesVBA Messages postés 51 Date d'inscription jeudi 15 janvier 2015 Statut Membre Dernière intervention 2 mars 2015
18 janv. 2015 à 20:13
Merci pour cette aide, je vais travailler la dessus, ce sera bon école pour moi, et reviendrais te donner le résultat... je pense que je devrais m'en sortir car rien qu'en lisant le code, je me suis fais une idée de son fonctionnement...

petit mot pour rire... voulez vous mon adresse (je rigole biensure)...

Je vous remercie beaucoup...

Bonne soirée
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
Modifié par ucfoutu le 19/01/2015 à 08:15
Bon ...
Je vois ce matin que j'ai mis un \ de trop dans :
loadpicture("C:\toto\" & format(Range("A2").value, "0000") & ".jpg")
le second est bien sûr à supprimer
J'avais par ailleurs oublié de mettre C1 entre guillemets et parenthèses ===>>> j'ai corrigé mon code plus haut
________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviend
0
niewbiesVBA Messages postés 51 Date d'inscription jeudi 15 janvier 2015 Statut Membre Dernière intervention 2 mars 2015
31 janv. 2015 à 16:49
Bonjour ucfoutu,

Désolé pour ce temps d'absence (les joies du travail en déplacements ainsi que les formations de dernière minute)... je me remet donc depuis aujourd'hui sur le code que vous m'avez fourni...

J'ai donc essayé de le mettre en place en suivant vos conseils, j'ai compris sont fonctionnement à quelques détails près...

Au niveau du nom de la photo :

mets une image nommée toto.0004.jpg" dans C:\

Je l'ai fais, mais lorsque je lance ma macro, il ne me trouve pas le fichier, à noter que les photos en question seront nommé ainsi :
102-00104 (le 102- change tous les jours sur l'appareil photo) et la suite est le numéro de photo

Ensuite, les entêtes de colonne sont Photo1 pour la photo n°1, photo2 pour la numéro 2 et ainsi de suite jusqu'à la numéro 5, de ce fait je placerais donc 5 contrôles Image

Pour l'histoire qu'il ne me trouve pas le fichier, j'ai modifier dans le format de cellule "A2" du classeur1 en nombre sans virgule, mais le résultat est le même... aurais-je mal compris certaines chose ?

Merci de votre patience

A bientôt
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
31 janv. 2015 à 21:01
Que t'affiche donc, dans l'exemple que je t'ai montré plus haut :
msgbox "C:\toto" & format(Range("A2").value, "0000") & ".jpg"
?
0
niewbiesVBA Messages postés 51 Date d'inscription jeudi 15 janvier 2015 Statut Membre Dernière intervention 2 mars 2015
31 janv. 2015 à 21:46
Bonsoir ucfoutu,

Tout d'abord, je viens encore de faire preuve d'une nulité sans nom...

J'avais pour dis l'autre jour que cette commande était d'un pratique !!

Voici le retour de cette dernière :

C:\Users\moi\Documents\toto.jpg

il cherche donc un fichier nommé toto.jpg

Peut-être serait-ce toto.0004.jpg qui le dérangerait ?

Merci
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
31 janv. 2015 à 21:55
cela veut dire que rien n'est présent (vide) dans la cellule A2.
Cela peut arriver si le code est lancé depuis une autre feuille que celle dont la cellule A2 contient 4.
Pour éviter ce piège, force donc la main en imposant le nom de la bonne feulle. Imaginons que le nom de cette feuille soit "titi" ===>>
.image1.picture = loadpicture("C:\toto" & format(worksheets("titi").Range("A2").value, "0000") & ".jpg")

regarde ce que cela donne, maintenant et dis-moi
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
Modifié par ucfoutu le 31/01/2015 à 22:32
on va même forcer encore un peu plus la main, ainsi :
 dim tata as Workbook, moi As Workbook
set moi = thisworkbook ' ===>>> le classeur de départ, donc
set tata = workbooks.open("c:\classeur1.xlsm")
with tata.worksheets("Feuil1")
.range("C1").value = moi.worksheets("titi").range("A1").value '=== je force la main ici
.image1.picture = loadpicture("C:\toto" & format(moi.worksheets("titi").range("A2").value, "0000") & ".jpg") ' ===>> et là
end with

remplace bien sûr titi par le nom de la feuille qui contient la cellule A2 où tu as écrit 4.

________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviend
0
niewbiesVBA Messages postés 51 Date d'inscription jeudi 15 janvier 2015 Statut Membre Dernière intervention 2 mars 2015
1 févr. 2015 à 12:04
Bonjour ucfoutu,

Donc, je tiens à te remercier pour le code, je te retourne maintenant le resultat... (j'ai quand même cherché un peux en utilisant tes précieux conseils)

au départ le code ne fonctionnais toujours pas, j'ai donc retourné le code dans tous les sens et :

j'ai corrigé cette ligne :

set tata = workbooks.open("c:\classeur1.xlsm")

par
Set tata = Workbooks.Open("c:\Users\moi\Documents\classeur2.xlsm")


a partir de là il ne me trouvait toujours pas le fichier, j'ai donc placé le msgbox et, il m'as retourné toto0004.jpg et non toto.0004.jpg, j'ai alors renommé l'image en toto0004.jpg, maintenant le code fonctionne à merveille, le voici :

Private Sub CommandButton1_Click()
Dim tata As Workbook, moi As Workbook
Set moi = ThisWorkbook
Set tata = Workbooks.Open("c:\Users\moi\Documents\classeur2.xlsm")
With tata.Worksheets("Feuil1")
.Range("C1").Value = moi.Worksheets("Feuil1").Range("A1").Value
.image1.Picture = LoadPicture("C:\Users\moi\Documents\toto" & Format(moi.Worksheets("Feuil1").Range("A2").Value, "0000") & ".jpg")
End With
End Sub


Voilà, donc maintenant, le code étant fonctionnel, il me reste plus qu'à l'adapter en lui faisant comprendre que c'est pour chaque ligne de la base BDD étant donné que chaque ligne correspond à un rapport... (je sens que c'est là que les choses vont se corser)

Merci pour tout, c'est vraiment très sympas de votre part

A très bientôt (puis-je garder ce fil ouvert, il peut encore être utile ;) )
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
1 févr. 2015 à 13:15
Non. Ferme-le maintenant, pour libérer cette discussion.
Il est utile tel quel.
0
niewbiesVBA Messages postés 51 Date d'inscription jeudi 15 janvier 2015 Statut Membre Dernière intervention 2 mars 2015
1 févr. 2015 à 13:22
Ok pas de soucis, je le met en résolu et en ouvrirais un autre en cas de besoin..., j'aurais surement besoin de vous pour simplifier un code (celui des rapports), car il n'est pas de moi, je l'ai juste modifier mais je le trouve impropre, et du coup je voudrais integrer le code pour les photos dedans... sur un autre fil bien sure...

Encore merci
0
niewbiesVBA Messages postés 51 Date d'inscription jeudi 15 janvier 2015 Statut Membre Dernière intervention 2 mars 2015
Modifié par niewbiesVBA le 1/02/2015 à 15:34
ucfoutu,

J'ai écris ce bout de code (pas encore testé)... est il de la bonne forme (voir si j'ai bien compris)

Sub creer_fiche_Click(Control As IRibboncontrol)
Dim bdd As Workbook, fvierge As Workbook
Dim rep As String
Dim Classeurpath As String
Dim Classeurphoto As String
Dim accessibilite, inaccessibilite, accespart, accescom, faiencage, ecaillage, cloqgonf, eclatbeton, betonautre As String
Dim niveau, atelier, SALLE1, SALLE2, betoncom, traversante, nontraversante, noncaracterisable, infiltrante, enreseau As String
Dim sup1mm, inf1mm, emax, emaxsalle2, corrosion, pasdacier, acierapparent, naturelle, rougeatre, blanchatre As String
Dim trace, pastrace, coulure, humidite, seche, efflorescence, aureole As String
Dim nfiche, nb, chemin, salle1_3R, salle1_zone4, salle1_feu, salle1_ext, salle1_123 As String
Dim salle2_3R, salle2_zone4, salle2_feu, salle2_ext, salle2_123, murN, murO, murS, murE, PLANCHER As String
Dim RADIER, PLAFOND, POTEAU, POUTRE, INTERIEUR, remarques As String

'chemin = Sheets("BDD").Range("AZV1").Value (en prévision, ne sert a rien pour le moment)
nb = Sheets("BDD").Range("AZT1").Value

'i est le nombre de fissures, la ligne de départ est 5, le nombre de fissures est n

'ligne_fin = 5 + nb - 1
ligne_fin = Cells.Find("*", Range("B1"), , , xlByRows, xlPrevious).Row


rep = Environ("USERPROFILE") & "\"
Classeurpath = rep & "\Documents\HagueInspection\Fvierge.xlsm
Classeurphoto = rep & "\Documents\HagueInspection\Photos

Set bdd = ThisWorkbook
Set fvierge = Woorkbooks.open(Classeurpath)


With fvierge.Worksheets("Fvierge")
For i = 5 To ligne_fin
'ici j'écris le code qui remet toutes les valeurs de BDD vers le Rapport
'Et le code qui mettra les photos au bon endroit
.image1.Picture = LoadPicture(Classeurphoto & Format(bdd.Worksheets("BDD").Range("BH" & i").Value, "0000") & ".jpg")
.image2.Picture = LoadPicture(Classeurphoto & Format(bdd.Worksheets("BDD").Range("BI" & i").Value, "0000") & ".jpg")
.image3.Picture = LoadPicture(Classeurphoto & Format(bdd.Worksheets("BDD").Range("BJ" & i").Value, "0000") & ".jpg")
.image4.Picture = LoadPicture(Classeurphoto & Format(bdd.Worksheets("BDD").Range("BK" & i").Value, "0000") & ".jpg")

End With
Next i

End Sub


Merci
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
Modifié par ucfoutu le 1/02/2015 à 16:23
Ben ...
Pour te répondre avec certitude, il me faudrait avoir tout entre les mains. Ce que je n'ai pas !
Je ne peux donc que faire quelques remarques :
- Dès lors que la variable rep contient (puisque tu l'y as mis) un "\", tes chemins classeurpath et classeurphoto seront nécessairement faux, puisque contenant deux "\" successifs !
La simple utilisation de msgbox classeurpath et msgbox classeurphoto mettrait cet aspect en évidence.
- je note au passage que ton chemin classeurphoto, qui semble être celui d'un classeur, est sans extension !
- pourquoi, d'ailleurs, définir Rep ?
Ouvre ton aide VBA à la rubrique Application.path ===>> cette propriété te retourne le chemin du classeur concerné. Si tes deux classeurs sont tout simplement mis dans le même dossier (qui sera précisément application.path)
Procéder ainsi t'évitera de nombreuses mésaventures, notamment en cas de distribution de ton projet.

________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviend
0
Rejoignez-nous