Aide pour dérouler des cellules avec image dynamiques

Anthonymctm

XLDnaute Occasionnel
Bonjour,

J'ai besoin d'aide sur Excel 2016 dernière version.

Après avoir regarder plusieurs tuto concernant les images dynamiques et l'outil appareil photo, je suis parvenu à extraire une image issue d'une liste d'images mais je cherche à pouvoir étendre cette extraction (avec selection/glisser ou copier/coller) et c'est là que je sèche.

Explication :

Sur un onglet j'ai une liste de produit avec plusieurs caractéristiques dont une image associée.
Sur un autre onglet je souhaite générer les étiquettes associées à ces produits.
Sur ces étiquettes il y a plusieurs champs de la liste des produits de l'onglet 1 qui revient. Ça je le gère facilement en indiquant le numéro de la ligne associé et en utilisant la recherche V.
Mais pour l'image c'est une autre paire de manche.

Je suis donc parvenu a copier l'image associée au numéro de la ligne avec appareil photo, recherche V, fonction indirect et gestion des noms.
Mais quand je duplique mon étiquette tous les champs s'adaptent sauf l'image puisque elle ne change pas de nom puisque l'emplacement du nom doit être verrouillé avec des $. Quand je change manuelle le numéro de ligne, l'image change mais je veux pouvoir voir toutes les étiquettes (pas seulement une par une).

Vous trouverez le fichier épuré en pièce jointe.

En vous remerciant pour votre aide !!

Anthony
 

Pièces jointes

  • Stock Test.xlsx
    119.1 KB · Affichages: 25

job75

XLDnaute Barbatruc
Bonjour Anthonymctm, bienvenue sur XLD,

Voyez le fichier joint et cette macro évènementielle :
VB:
Private Sub Worksheet_Change(ByVal target As Range)
Dim P As Range, i As Variant, sel As Range
Set P = Sheets("Stock").[A4].CurrentRegion 'à adapter éventuellement
Application.EnableEvents = False 'désactive les évènements
Application.CopyObjectsWithCells = True 'au cas où, pour copier les objets
[C3,E3,D5] = "" 'RAZ
DrawingObjects.Delete 'supprime les objets
i = Application.Match([A2], P.Columns(1), 0)
If IsNumeric(i) Then
    [C3] = P(i, 2)
    [E3] = P(i, 3)
    [D5] = P(i, 6)
    P(i, 4).Copy
    Set sel = Selection 'mémorise
    [B5].Select
    Paste 'pour coller l'image
    Application.CutCopyMode = 0
    sel.Select
    [B5].Borders.LineStyle = xlNone
    [B5].Borders(xlEdgeLeft).Weight = xlThin
End If
Application.EnableEvents = True 'réactive les évènements
End Sub
Elle est à placer dans le code de la feuille "Etiquette" (clic droit sur l'onglet et Visualiser le code).

A+
 

Pièces jointes

  • Stock Test(1).xlsm
    119.5 KB · Affichages: 19

Anthonymctm

XLDnaute Occasionnel
Bonjour, je vous remercie pour votre réponse. Et quelle rapidité !

Cependant ce n'est pas ce que je cherche.

J'ai besoin de pouvoir visualiser toutes les étiquettes en même temps. Afin de pouvoir les imprimer en masse.
J'ai plusieurs centaines de ligne sur mon onglet 1.
Or j'ai l'impression que je ne peux dupliquer l'étiquette dans votre fichier.

Voilà ^^'
 

job75

XLDnaute Barbatruc
Fichier (2) avec cette macro qui se déclenche quand on active la feuille "Etiquette" :
VB:
Private Sub Worksheet_Activate()
Dim pas As Byte, P As Range, i&, n&
Application.ScreenUpdating = False
Application.CopyObjectsWithCells = True 'au cas où, pour copier les objets
pas = 5 'adapter éventuellement
Set P = Sheets("Stock").[A4].CurrentRegion 'adapter éventuellement
DrawingObjects.Delete 'supprime les objets
[B2:G6] = "": Rows("7:" & Rows.Count).Delete 'RAZ
For i = 1 To P.Rows.Count - 2
    Rows("2:6").Copy Rows("2:6").Offset(i * pas) 'copie les formats
Next
For i = 2 To P.Rows.Count
    Cells(3 + n, 3) = P(i, 2)
    Cells(3 + n, 5) = P(i, 3)
    Cells(5 + n, 4) = P(i, 6)
    P(i, 4).Copy
    Cells(5 + n, 2).Select
    Paste 'pour coller l'image
    Cells(5 + n, 2).Borders.LineStyle = xlNone
    Cells(5 + n, 2).Borders(xlEdgeLeft).Weight = xlThin
    n = n + pas
Next
Columns("B:G").AutoFit 'ajustement largeur
Application.CutCopyMode = 0
Application.Goto [A1], True 'cadrage
End Sub
 

Pièces jointes

  • Stock Test(2).xlsm
    113.9 KB · Affichages: 10
Dernière édition:

job75

XLDnaute Barbatruc
Bonjour Anthonymctm, le forum,

J'ai corrigé la macro précédente pour qu'une seule image soit copiée dans les cellules en colonne B.

J'ai aussi corrigé la feuille "Stock" : il y avait des images superposées...

Bonne journée.
 

Anthonymctm

XLDnaute Occasionnel
Wow.. Un grand merci job75 !

Je suis impressionné :oops:

J'aimerai tant savoir manipuler les macro à ce niveau là o_O

Je vais importer tout ça sur mon fichier d'origine pour voir comment ça réagit et je reviens vers vous pour vous dire si j'ai réussi ou pas.
 

job75

XLDnaute Barbatruc
Pour imprimer voyez ce fichier (3) et cette macro dans le code de la feuille "Etiquette" :
VB:
Sub Imprimer()
Dim nlig&, P As Range
nlig = 30 'multiple du pas 5, adapter éventuellement
With Me.PageSetup
    .Zoom = False
    .FitToPagesWide = 1
    .FitToPagesTall = 1
    Set P = [B2:G6].Resize(nlig)
    While Application.CountA(P)
        .PrintArea = P.Address
        Me.PrintPreview 'pour tester
        'Me.PrintOut 'pour imprimer
        Set P = P.Offset(nlig)
    Wend
End With
End Sub
Le bouton est une forme, il n'est pas supprimé par l'instruction Pictures.Delete dans l'autre macro.
 

Pièces jointes

  • Stock Test(3).xlsm
    116.6 KB · Affichages: 13
Dernière édition:

Anthonymctm

XLDnaute Occasionnel
Salut Job75,

Alors je ne suis pas parvenu à importer la macro sur mon fichier original donc j'ai fait l'inverse, j'ai importé mes données sur ton fichier et ça fonctionne bien !

Par contre quand je ne parviens pas à déplacer les code-barres (*CIRC-I304-EXT-10*). J'aurai voulu les centrer avec le titre.
Mea Coulpa, j'aurai du t'envoyer un exemple plus soigné dès le début.
Tu peux me le déplacer dans la colonne E ?

Une dernière demande, je suppose que ça doit être réalisable, avoir la macro sur un bouton (comme imprimer) pour actualiser que quand je clique dessus serait assez pratique, il m'éviterait d'avoir à lancer la macro à chaque fois.

En tout cas merci beaucoup pour tout ce que tu as déjà fait !
 

job75

XLDnaute Barbatruc
Bonjour Anthonymctm, le forum,

Visiblement vous n'avez pas compris la macro Worksheet_Activate.

Je l'ai déjà dit : elle doit être placée dans le code de la feuille "Etiquette" (clic droit sur l'onglet et Visualiser le code).

C'est une macro évènementielle qui se déclenche automatiquement quand on active la feuille.

Quant au code-barre en E5 il suffit de remplacer Cells(5 + n, 4) par Cells(5 + n, 5), voyez ce fichier (4).

A+
 

Pièces jointes

  • Stock Test(4).xlsm
    116.1 KB · Affichages: 11

Anthonymctm

XLDnaute Occasionnel
C'est possible que je le sois effectivement :rolleyes:

A vrai dire je vais régulièrement avoir besoin de modifier mes étiquettes, ou m'en servir comme base dynamique pour d'autres onglets.

Et je prefère éviter qu'à chaque fois que je passe sur cet onglet je sois bloqué pendant plus de 3 mintues.. Parceque c'était peut-être 26s chez vous mais plus de 3 mintues chez moi (petit PC et une centaine de références).

Et comme la base de données va évoluer mais pas non plus tous les jours je ne devrais pas avoir besoin de la réactualiser à chaque fois.

Sinon, j'ai déjà essayé d'affecter la macro en commande par un "Sub Super_solution()" mais la macro bug une fois arrivée à Paste :confused:
 

Discussions similaires

Réponses
1
Affichages
529

Statistiques des forums

Discussions
312 201
Messages
2 086 166
Membres
103 151
dernier inscrit
nassim