Faire apparaitre des photos dans une feuil

Résolu

Bonjour

Dans le fichier joint les explications de mes besoins

j'ai tenté =Recherchv mais cela ne fonctionne pas

https://www.cjoint.com/c/NKBkLW6triQ

Merci pour votre aide


Commence par faire le nécessaire ,puis fait ce qu'il est possible de faire et tu réaliseras l'impossible sans t'en apercevoir. Saint François d'Assise

9 réponses

Résumé de la discussion

Le besoin est d'automatiser l’intégration d'images dans le classement général sans que la fonction RECHERCHEV ne fonctionne sur le fichier fourni. Des macros VBA proposées copient les images depuis la feuille Photos vers le Classement Général en s’appuyant sur une correspondance de lignes, avec une version qui supprime certaines formes et une autre qui prévoit un traitement “podium” pour N3, L4 et P4. Une approche alternative pour Excel 365 consiste à placer les images dans les cellules et à utiliser RECHERCHEV pour récupérer les données associées, évitant la gestion des formes. D’autres échanges évoquent des erreurs de syntaxe, corrigées par des ajustements de sélection, et des demandes de partage du classeur présentant le résultat attendu.

Bobot (l’IA à votre service)
  1. Bonjour,

    L'intérêt d'un forum est le partage des connaissances. les messages privés doivent rester exceptionnels.

    récupère ton fichier et on en reparle

    https://www.cjoint.com/c/NKBpOtfkHQF


    1
    1. Merci pour l'exemple

      Je vais essayer de mettre en place dans le fichier original

      Crdlt

      0
  2. Bonjour,

    J'ai écrit la macro "Logos" (module "Daniel) :

    Sub logos()
      Dim C As Range, Ligne As Variant, Sh As Shape
      Application.ScreenUpdating = False
      With Sheets("Classement Général")
        For Each Sh In .Shapes
          If Sh.TopLeftCell.Column = 6 Then
            Sh.Delete
          End If
        Next Sh
        For Each C In .Range("G3", .Cells(.Rows.Count, 7).End(xlUp))
          Ligne = Application.Match(C, [photos!B:B], 0)
          
          If IsNumeric(Ligne) Then
            With Sheets("Photos")
              For Each Sh In .Shapes
                If Sh.TopLeftCell.Row = Ligne Then
                  .Select
                  Sh.Select
                  Selection.Copy
                  Sheets("Classement Général").Select
                  C.Offset(, -1).Select
                  ActiveSheet.Paste
                  Selection.Top = Selection.Top + 10
                  Selection.Left = Selection.Left + 22
                  Exit For
                End If
              Next Sh
            End With
          End If
        Next C
      End With
      Application.ScreenUpdating = True
    End Sub
    

    Fichier :

    https://www.cjoint.com/c/NKCqDEhEQU4

    Tu peux l'intégrer au bouton "Mettre à jour le classement général.

    Daniel


    1
    1. Bonsoir Daniel,

      Merci pour ta solution ça  fonctionne du tonnerre

      Tu m'enlève une belle épine du pied

      Crdlt

      0
    2. Bonjour Daniel,

      Je viens à nouveau te solliciter

      Est il possible de mettre le logo du premier sur le podium, ainsi que le deuxième et le troisième

      Merci pour ton aide

      0
    3. @JCB40

      Bonjour à tous,

      Essaie :

      Sub logos()
        Dim C As Range, Ligne As Variant, Sh As Shape
        Application.ScreenUpdating = False
        With Sheets("Classement Général")
          For Each Sh In .Shapes
            If Sh.TopLeftCell.Column = 6 Then
              Sh.Delete
            ElseIf Sh.TopLeftCell.Address = "$N$3" Or _
              Sh.TopLeftCell.Address = "$L$4" Or _
              Sh.TopLeftCell.Address = "$P$4" Then
              Sh.Delete
            End If
          Next Sh
          For Each C In .Range("G3", .Cells(.Rows.Count, 7).End(xlUp))
            Ligne = Application.Match(C, [photos!B:B], 0)
            If IsNumeric(Ligne) Then
              With Sheets("Photos")
                For Each Sh In .Shapes
                  If Sh.TopLeftCell.Row = Ligne Then
                    .Select
                    Sh.Select
                    Selection.Copy
                    Sheets("Classement Général").Select
                    C.Offset(, -1).Select
                    ActiveSheet.Paste
                    Selection.Top = Selection.Top + 10
                    Selection.Left = Selection.Left + 22
                    Exit For
                  End If
                Next Sh
              End With
            End If
          Next C
          'podium
          For Each C In Range("N3,L4,P4")
            Ligne = Application.Match(C, [photos!B:B], 0)
            If IsNumeric(Ligne) Then
              With Sheets("Photos")
                For Each Sh In .Shapes
                  If Sh.TopLeftCell.Row = Ligne Then
                    .Select
                    Sh.Select
                    Selection.Copy
                    Sheets("Classement Général").Select
                    C.Select
                    ActiveSheet.Paste
                    Selection.Width = C.Width + C.Offset(, 1).Width
                    Selection.Left = (C.Width + C.Offset(, 1).Width - Selection.Width) / 2 + _
                      C.Left + 1
                    Exit For
                  End If
                Next Sh
              End With
            End If
          Next C
        End With
        Application.ScreenUpdating = True
      End Sub
      

      https://www.cjoint.com/c/NKDkJy66sx4

      Daniel

      1
    4. @JCB40

      Je ne comprends pas ce que tu m'envoies. Ca fonctionne dans le classeur que je t'ai envoyé. Fais-moi parvenir le classeur qui donne ce résultat.

      Daniel

      1
  3. Modérateur

    Bonjour,

    Il est toujours meilleur de donner dès le dépaart les informations sur le forum dans la question. Je les reprends ci-après.

    Bonjour

    Dans cette feuille je cherche à récupérer dans la feuille2

    les images qui correspondent aux noms qui sont en colonne H

    Merci pour votre aide


    0
    1. Bonjour jee pee

      Ok pour la remarque.

      Quelle solution me proposes-tu?

      Crdlt

      0
    2. @brucine

      Au passage, la syntaxe de RECHERCHEV n'est pas bonne, elle devrait être:

      =RECHERCHEV(H2;Feuil2!$A$1:$B$4;2;FAUX)

      Cette fois-ci elle ne me rend plus #REF! mais 0 parce que le cellule de destination n'est pas du texte et/ou verrouillée.

      0
    3. @brucine

      Bonjour brucine

      Merci pour ta réponse

      Trop compliqué à mettre en place pour mon petit niveau de bureautique

      Crdlt

      0
    4. @brucine

      pour l'erreur de syntaxe il s'agit d'une banale faute de sélection

      0
  4. Bonjour,

    Avec Excel 365, il suffit de mettre les images dans la cellule :

    Après, on utilise RECHERCHEV :

    (Image dans le message suivant)

    https://www.cjoint.com/c/NKBnn3KUpy4

    Daniel


    0
    1. Illustration suite message 7 :

      Daniel

      0
  5. ... Par contre, ça m'intéresserait de savoir pourquoi je ne peux pas sélectionner les images.

    Daniel


    0
    1. Bonjour danielc0

      Ta formule ne fonctionne pas avec office 2021

      Pour la question de sélection des images rien n'est verrouillé ,je ne comprend pas que tu ne puisses pas avoir ces images

      Crdlt

      0
    2. @JCB40

      Bonjour,

      "Ta formule ne fonctionne pas avec office 2021"

      Non, en effet, c'est une nouveauté Excel 365.

      "je ne comprend pas que tu ne puisses pas avoir ces images"

      Je les vois. Je ne peux pas les sélectionner pour les déplacer, par exemple. Ni avec Excel 365, ni avec Excel 2010. J'essaierai plus tard de redémarrer Windows...

      Par contre, je peux le faire avec une macro ?

      Daniel

      0
  6. Outre la solution avec Excel 365 et celle proposée par brucine au message 2, à ma connaissance, il n'y a qu'une solution par macro. Si tu es intéressé, dis-le.

    Daniel


    0
    1. bonsoir,

      Il n'y a pas que le VBA, mais plusieurs possibilités par formule

      avec

      =INDIRECT(RECHERCHEV(Feuil1!$H$2;Feuil2!$A$1:$C$6;2;0))

      =DECALER(Feuil2!$B$1;EQUIV(Feuil1!$H$2;Feuil2!$A$1:$A$4;0)-1;)

      =DECALER(Feuil2!$B$1;LIGNE(INDEX(Feuil2!$A$1:$A$4;EQUIV(Décaler!$H$2;Feuil2!$A$1:$A$4;0);1))-7;)

      Un exemple avec recherchev

       https://www.cjoint.com/c/NKBrC2G57OF


      0
      1. Bonjour Michel

        Désolé de revenir sur le sujet

        Dans l'exemple que tu me donnes post15 je ne saisi pas comment tu fait apparaitre le chien et si je demande le velo celui-ci n'apparait pas

        Crdlt

        0
    2. Je joins mon fichier original

      ce que je souhaite c'est mettre dans la colonne "logos" feuille Classement Général

      la photo du logo correspondant au nom ,c'est photos se trouvent dans la feuille Photos.

      Il faut bien sur que ces photos suivent le nom lors de la mise à jour du classement

      Merci pour votre  aide

      https://www.cjoint.com/c/NKCmCADSzyQ


      0
      1. Re,

        Je t'ai créé les conditions pour les ligne 3, 4, 5 et 6, à toi de jouer

        https://www.cjoint.com/c/NKCq2G0hseF


        0
        1. Bonjour Michel

          j'ai testé quand on fait une MàJ du Classement Général tout est mélangé

          Crdlt

          0