Bug affichage images excel

kerdaven_urburck Messages postés 17 Statut Membre -  
 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

  1. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
     
    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
    1
  2. cs_Le Pivert Messages postés 8437 Statut Contributeur 730
     
    1
    1. kerdaven_urburck Messages postés 17 Statut Membre
       
      Votre fichier comporte bien les images !

      Le soucis viendrait donc du bouton qui lancerait la macro à l'ouverture et du coup afficherait des images manquantes ?
      0
    2. cs_Le Pivert Messages postés 8437 Statut Contributeur 730 > kerdaven_urburck Messages postés 17 Statut Membre
       
      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
      0
    3. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717 > kerdaven_urburck Messages postés 17 Statut Membre
       
      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
      0
    4. kerdaven_urburck Messages postés 17 Statut Membre > cs_Le Pivert Messages postés 8437 Statut Contributeur
       
      pourquoi "sans le fermer " ?
      0
    5. cs_Le Pivert Messages postés 8437 Statut Contributeur 730 > f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention  
       
      J'enregistre sous en xlsx et ensuite je ferme le classeur pour le garder en xlsm

      Je ne vois pas le problème!
      0
  3. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
     
    Bonjour,

    Dans chaque pc vous devez mettre tous les fichiers qui sont utilisés dans votre code VBA
    0
  4. kerdaven_urburck Messages postés 17 Statut Membre
     
    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
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
     
    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.
    0
  7. kerdaven_urburck Messages postés 17 Statut Membre
     
    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 ?
    0
  8. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
     
    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?
    0
  9. kerdaven_urburck Messages postés 17 Statut Membre
     
    Bonjour,

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

    merci pour votre avis
    0
    1. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
       
      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
      0
  10. kerdaven_urburck Messages postés 17 Statut Membre
     
    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
    0
  11. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
     
    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
    0
  12. kerdaven_urburck Messages postés 17 Statut Membre
     
    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...
    0
  13. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
     
    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...
    0
  14. kerdaven_urburck Messages postés 17 Statut Membre
     
    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 :

    0
  15. kerdaven_urburck Messages postés 17 Statut Membre
     
    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
    0
  16. cs_Le Pivert Messages postés 8437 Statut Contributeur 730
     
    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à

    0
    1. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
       
      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
      0
  17. kerdaven_urburck Messages postés 17 Statut Membre
     
    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...
    0
    1. kerdaven_urburck Messages postés 17 Statut Membre
       
      l'erreur se fait sur Set img = ActiveSheet.Pictures.Insert(chemin)
      0
    2. kerdaven_urburck Messages postés 17 Statut Membre
       
      Je vois que le chemin se crée mal (la valeur de REP n'est pas bonne). Je modifie et teste
      0
    3. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717 > kerdaven_urburck Messages postés 17 Statut Membre
       
      Re,

      Click sur debuger, curseur souris sur Chemin pour voir son contenu.
      Votre fichier au depart de votre demande marchait comprends pourquoi vous changez ou vous ne nous avez pas tout dit

      Votre dernier lien: fichier corrompu pas moyen de l'utiliser
      0
    4. kerdaven_urburck Messages postés 17 Statut Membre > f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention  
       
      j'ai fais ça et cela m'a permis de vois que le chemin contenait déjà "/Base_vignette/" donc pas nécessaire de le concaténer de nouveau.

      J'ai généré le fichier, je viens de l'envoyer à une personne pour qu'elle l'ouvre et vérifie.

      Je reviens vers vous asap
      0
    5. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717 > kerdaven_urburck Messages postés 17 Statut Membre
       
      Re,

      Vous prenez l'option de mettre tous les fichiers sur tous les PC?
      Comprends pas .
      0
  18. kerdaven_urburck
     
    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
    0