Bug affichage images excel

Signaler
Messages postés
17
Date d'inscription
lundi 1 février 2021
Statut
Membre
Dernière intervention
2 février 2021
-
 kerdaven_urburck -
Bonjour à tous,

J'ai développé une macro pour insérer une image liée à une cellule :
- dans le fichier excel le chemin vers l'image est créé
- la macro va chercher l'image dans un dossier "base image", l'ajoute sur une cellule en fin de ligne, la dimensionne "comme il faut" et la lie à la cellule.

Les images apparaissent bien mais quand on ouvre le fichier sur un autre PC, elles ne sont plus visibles et le message suivant remplace chaque image "impossible d'afficher le fichier lié etc...."

Je pensais que ma macro insérait l'image sans faire de lien pour exporter ce fichier sans avoir à exporter la base avec.

Qui sait m'aider ?

Merci beaucoup

ci-dessous un lien pour récupérer mon fichier et un dossier avec les images

https://wetransfer.com/downloads/2ec8576bd928883882396e3c0d5aff1d20210201151755/a309b6

Merci pour votre aide
Sub insertion_img()

Dim i As Integer


Nlignes = Application.CountA(Range("B:B"))

Range("Y3").Select


For i = 1 To (Nlignes - 2)

chemin = ActiveCell.Value

If WorksheetFunction.IsNA(ActiveCell.Address) Then
            ActiveCell.Offset(0, 1).Value = "pas d'image"
            ActiveCell.Offset(1, -1).Select
            

Else

ActiveCell.Offset(0, 1).Select
ActiveCell.RowHeight = 100


Set img = ActiveSheet.Pictures.Insert(chemin)
On Error Resume Next

With img
    img.Top = ActiveCell.Top
    img.Left = ActiveCell.Left
    img.Name = Left(chemin, Len(chemin) - 4) & i ' Donne un nom à l'image
    img.Height = 100 ' s'ajuste à la hauteur de la ligne
    img.Placement = xlMoveAndSize
    ActiveCell.Offset(1, -1).Select
End With



End If


Next


MsgBox ("fin de traitement")

End Sub

17 réponses

Messages postés
15969
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
22 septembre 2021
1 535
Re,

Ben, deja ce n'est pas le fichier que vous avez mis a dispo.

Z'etes sur qu'il n'y a pas de code qui lance le
sub insert
dans
ThisWorkbook 
Private Sub Workbook_Open()

End Sub


Et etes vous sur que la personne n'a pas fait une insertion image?
Parce que lorsque j'ai ouvert votre fichier x fois je n'ai pas eu de probleme
Messages postés
7538
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
22 septembre 2021
656
Messages postés
7538
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
22 septembre 2021
656 >
Messages postés
17
Date d'inscription
lundi 1 février 2021
Statut
Membre
Dernière intervention
2 février 2021

Quand les images sont insérées dans le classeur il suffit de l'enregistrer sous en xlsx sans le fermer.

Voilà c'est tout simple

@+ Le Pivert
Messages postés
17
Date d'inscription
lundi 1 février 2021
Statut
Membre
Dernière intervention
2 février 2021
>
Messages postés
7538
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
22 septembre 2021

pourquoi "sans le fermer " ?
Messages postés
15969
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
22 septembre 2021
1 535 >
Messages postés
17
Date d'inscription
lundi 1 février 2021
Statut
Membre
Dernière intervention
2 février 2021

Re,
du bouton qui lancerait la macro à l'ouverture
Non, un fichier xlsx n'a pas de code VBA

Vous comme moi avons une difference sur Excel avec cs_LePivert, mais je ne vois pas laquelle
Messages postés
7538
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
22 septembre 2021
656 >
Messages postés
15969
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
22 septembre 2021

J'enregistre sous en xlsx et ensuite je ferme le classeur pour le garder en xlsm

Je ne vois pas le problème!
Messages postés
15969
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
22 septembre 2021
1 535 >
Messages postés
7538
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
22 septembre 2021

Re,
Évident mon cher Watson, pour virer le code VBA
Ça m'arrive de le faire pas très souvent. Pas venus l'idée. Chapeau
Messages postés
15969
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
22 septembre 2021
1 535
Bonjour,

Dans chaque pc vous devez mettre tous les fichiers qui sont utilisés dans votre code VBA
Messages postés
17
Date d'inscription
lundi 1 février 2021
Statut
Membre
Dernière intervention
2 février 2021

Bonsoir,

Merci pour votre réponse.
Il n'y a pas moyen d'enregistrer les images dans le fichier comme toute image insérée en mode manuel sans passer par une macro ?

Le fichier est assez lourd (je n'ai mis qu'un extrait pour l'exemple) mais le fichier initial comporte 4000 lignes !

Merci
Messages postés
15969
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
22 septembre 2021
1 535
Re,

Sans macro, ben vous faites un copier coller dans une feuille et modifier le code pour les récupérer
Votre code insertion image est appelé comment ?
Y a un truc qui m'échappe.
Messages postés
17
Date d'inscription
lundi 1 février 2021
Statut
Membre
Dernière intervention
2 février 2021

Re

l'insertion image se fait avec img = ActiveSheet.Pictures.Insert(chemin)

Je ne comprends pas la manip du copier coller ? les liens resterons attendus non ?
Messages postés
15969
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
22 septembre 2021
1 535
Bonjour,
La procedure d'insertion d'image s' execute a chaque ouverture du fichier Excel ou ?

Je recupere vos zip, je verrais e qu'il en est

Suite:

Comment les noms d'image arrivent dans la feuille Listing_Images_Trouvees?
Messages postés
17
Date d'inscription
lundi 1 février 2021
Statut
Membre
Dernière intervention
2 février 2021

Bonjour,

Non la macro s'exécute sur demande avec le bouton insert

merci pour votre avis
Messages postés
15969
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
22 septembre 2021
1 535
Re,

Lire la derniere ligne que je viens d'ajouter svp


Suite:

Je viens de regarder dans mes archives de traitement d'image venant d'une feuille du meme classeur.
Ben vous auriez vraiment interet a mettre votre base dans chaque PC (evidement probeme de mise a jour) ou mettre la base en reseau si possible
Messages postés
17
Date d'inscription
lundi 1 février 2021
Statut
Membre
Dernière intervention
2 février 2021

Pour lister le nom des images, sur Mac un select all sur le dossier contenant les images + coller dans excel liste tous les noms des fichiers.

Cette liste est en dur dans le fichier

Biensur on pourrait ajouter une macro qui liste au préalable le dossier images, que l'on ferait choisir avec une inputbox mais j'ai dû aller à l'essentiel (et puis je ne suis pas très calé en VBA non plus)


J'espère que cela répond à votre question
Messages postés
15969
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
22 septembre 2021
1 535
Re,
Ok, mais cela oblige, comme je vous l'ai ecrit, a avoir tous les fichiers image sur chaque PC ou qu'ils soient en reseau
Messages postés
17
Date d'inscription
lundi 1 février 2021
Statut
Membre
Dernière intervention
2 février 2021

Pour la machine qui sert à créer le listing image, oui je comprends qu'on doive avoir la base images.

Mais ensuite si je veux partager le fichier excel une fois traité avec la macro, comment sauvegarder les images dans l'excel ?

J'ai vu qu'avec la méthode shape.addpicture c'était possible via ses paramètres, mais je n'y arrive pas avec .picture.insert

Et quant à utiliser shape.addpicture, je bloque car je n'arrive pas à convertir la chaine "chemin" en chemin compréhensible par shape.addpicture...
Messages postés
15969
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
22 septembre 2021
1 535
Re,

si je veux partager le fichier excel une fois traité avec la macro
Question: avez vous des mise a jour d'images faire?

Si vous faite executer une fois la procedure Insert_Img, sauvegarde, les images sont sauvegardees dans la feuille listing pas ailleurs.

Manque une explication...
Messages postés
17
Date d'inscription
lundi 1 février 2021
Statut
Membre
Dernière intervention
2 février 2021

Re,

Non il n'y a pas de mise à jour.
Le fichier sera uniquement consulté.

Si les images sont sauvegardées, pourquoi ai-je ce message d'erreur quand une autre personne ouvre le fichier :

Messages postés
17
Date d'inscription
lundi 1 février 2021
Statut
Membre
Dernière intervention
2 février 2021

Le fichier que j'ai mis à dispo est une version réduite avec moins de lignes, mais la structure du fichier est la même et le code de la macro aussi.

A toutes fins utiles voici le fichier, mais je ne peux pas partager la base image (trop d'images dedans).

https://wetransfer.com/downloads/6d9d4c11285ffebeae1d92680b58971a20210202094755/3b44fb

Quand vous dites que vous avez ouvert mon fichier sans soucis, cela veut dire que vous voyez bien les images ?

merci
Messages postés
7538
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
22 septembre 2021
656
Bonjour,

essaie ceci:

Option Explicit
Sub insertion_img()
Dim i As Integer
Dim chemin As String
Dim rep As String
Dim nom As String
Dim Nlignes As Long
Dim img
Nlignes = Application.CountA(Range("B:B"))

Range("Y3").Select
rep = ThisWorkbook.Path & "\Base_vignettes\"
Application.ScreenUpdating = False
For i = 1 To (Nlignes - 2)
nom = Split(ActiveCell.Value, "/")(5)
chemin = rep & nom
If WorksheetFunction.IsNA(ActiveCell.Address) Then
            ActiveCell.Offset(0, 1).Value = "pas d'image"
            ActiveCell.Offset(1, -1).Select
    Else
ActiveCell.Offset(0, 1).Select
ActiveCell.RowHeight = 100
Set img = ActiveSheet.Pictures.Insert(chemin)
With img
    img.Top = ActiveCell.Top
    img.Left = ActiveCell.Left
    img.Name = Left(chemin, Len(chemin) - 4) & i ' Donne un nom à l'image
    img.Height = 100 ' s'ajuste à la hauteur de la ligne
    img.Placement = xlMoveAndSize
    ActiveCell.Offset(1, -1).Select
End With
End If
Next
MsgBox ("fin de traitement")
Application.ScreenUpdating = True
End Sub


Il faut impérativement que le classeur soit dans le même dossier que le dossier Base_vignettes

voilà


Messages postés
15969
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
22 septembre 2021
1 535
Bonjour cs_Le Pivert,

Son code de base fonctionne mais comme nous l'ecrivon, la base doit etre obligatoirement dans chaque PC en cas de mise a jour. Mais, il n'y a pas de mise a jour donc pas besoin de base image.
Le soucis serait a l'ouverture du fichier sur un autre PC.
Je recupere sur son dernier lien et verifie par rapport aux questions auxquelles qu'il n' a pas repondu
Messages postés
17
Date d'inscription
lundi 1 février 2021
Statut
Membre
Dernière intervention
2 février 2021

Re !

J'ai testé le code de CS_Le Pivert et j'ai une erreur d'éxécution :



J'ai pourtant bien mis le fichier dans le répertoire contenant les images, j'ai vérifié le chemin qui se crée...
Messages postés
17
Date d'inscription
lundi 1 février 2021
Statut
Membre
Dernière intervention
2 février 2021
>
Messages postés
15969
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
22 septembre 2021

F894009 pour reformuler et bien être certain de comprendre :
1/ je lance la macro pour insérer les images
2/ j'enregistre mon fichier en .xlsx
3/ je le partage et le destinataire devrait voir les images ?

C'est pourtant ce que je fais.
Messages postés
7538
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
22 septembre 2021
656 >
Messages postés
17
Date d'inscription
lundi 1 février 2021
Statut
Membre
Dernière intervention
2 février 2021

Mon code fonctionne!
Il ne faut pas mettre le classeur dans le dossier Base_vignette mais avec lui comme le dossier que tu as posté.
Mais si tu mets tes images dans le classeur, il n'y a pas besoin de code ensuite pour l'envoyer à d'autres.
Ton code sert uniquement pour charger les images dans le classeur
Messages postés
15969
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
22 septembre 2021
1 535 >
Messages postés
7538
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
22 septembre 2021

Re,

Mon code fonctionne!
Assurement et c'est normal, le gars a l'air de faire la soupe
Messages postés
17
Date d'inscription
lundi 1 février 2021
Statut
Membre
Dernière intervention
2 février 2021
>
Messages postés
7538
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
22 septembre 2021

Point d'avancement :
- la macro insère bien les images
- le fichier enregistré et ensuite envoyé à d'autres utilisateurs ne contient pas les images
Peux-tu partager un fichier que tu génère de ton côté avec le code ? Merci
Messages postés
15969
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
22 septembre 2021
1 535 >
Messages postés
17
Date d'inscription
lundi 1 février 2021
Statut
Membre
Dernière intervention
2 février 2021

Re,

Si vous enregistrez le fichier en xlsx
copiez ailleur: probleme erreur image
Sur le meme PC pas de probleme

Donc copiez le xlsm sans le bouton

Bonsoir !

Bilan : votre code fonctionne sur PC mais pas sur Mac. Je reste un peu sur ma faim car du coup je ne vois pas où sont mes erreurs (mon code initial tournait sur PC...) mais bon une solution a été apportée.

Je ne lancerai pas ici un débat sur la pertinence d'utiliser excel + VBA sur un mac... c'est pas ma soupe (sic).

Merci pour votre temps et votre aide.

Au plaisir