Plan PNG sur Excel !?

SETILA

XLDnaute Junior
Bonjour à tous,

Depuis plusieurs semaines je cherchais une solution afin d'adapter un plan PNG en format Excel pour que les cellules correspondes?!
J'ai enfin trouvé la solution pouvez-vous me dire si c'est la meilleur?
et je dois copier des valeurs du classeur "face out legends" sheets("MEUBLE") et les copier sur le classeur plan avec les cellules qui correspondes aux meubles!
J'ai essayé de le faire avec un range copy mais mon problème est que les Tops changent tous les mois et donc je ne peux pas les associer aux cellules!
avez-vous une idées, comment devrait-on faire.
merci d'avance pour votre aide.

Cordialement,

Setila
 

Pièces jointes

  • ANALYSE FACE OUT LEGENDS.xlsm
    2 MB · Affichages: 32
  • PLAN AVEC TOP VBA.xlsm
    3.4 MB · Affichages: 35

SETILA

XLDnaute Junior
Bonjour,

Voila ce que je veux faire mais en VBA!
Juste le Top 10 c'est suffisant.
Merci.
upload_2018-1-23_13-35-4.png
 

SETILA

XLDnaute Junior
Bonjour à tous,

J'ai toujours besoin de vos services et vos connaissances!
Pour l'instant je viens de trouver un moyen en passant par un "rechercheV" mais en formule!
Pouvez-vous m'aider à la transcrire en VBA svp?
Merci d'avance et dite moi si la solution PNG est efficace ?

Cordialement,

Setila
 

Pièces jointes

  • PLAN AVEC TOP VBA.xlsm
    3.4 MB · Affichages: 35

laurent950

XLDnaute Accro
Bonsoir,

J'ai pensé a se petit bout de code bien sur a amélioré comme base pour création des Top. je pense qu'il faut crée 3 zone d'image (les associer et les remplires) c'est une ébauche.

Par contre comment vous avez fait pour intégré le PNG sur la feuille Excel ?

VB:
Sub Macro1()
'
' Macro1 Macro
' feuile PNG
    Dim Fplan As Worksheet
    Set Fplan = Worksheets("PLAN")
' feuile 1 (Base de donnée)
    Dim FBd  As Worksheet
    Set FBd = Worksheets("Feuil1")
' Tableau base feuile1
    Tabbase = FBd.Range(FBd.Cells(FBd.Cells(65536, 1).End(xlUp).Row, 1), FBd.Cells(1, 7))
   
    ' Message
    'création du TOP
    Dim txt As Double
    txt = InputBox("Qu'elle Numéro de TOP ?")
    Dim objShp() As Shape
    ReDim objShp(1 To 1, 1 To 3)
    Pos = 12.6
    Set objShp(1, 1) = Fplan.Shapes.AddShape(msoShapeRectangle, Pos, 40.8, 35.4, 16.2)
    objShp(1, 1).Name = "TOP" & txt
    objShp(1, 1).TextFrame2.TextRange.Characters.Text = "TOP"
    Pos = Pos + (12.6 * 3)
    Set objShp(1, 2) = Fplan.Shapes.AddShape(msoShapeRectangle, Pos, 40.8, 35.4, 16.2)
    objShp(1, 2).Name = "TOP" & txt
    objShp(1, 2).TextFrame2.TextRange.Characters.Text = txt
    Pos = Pos + (12.6 * 3)
    Set objShp(1, 3) = Fplan.Shapes.AddShape(msoShapeRectangle, (Pos / 3), 40.8 + (40.8 / 2), 35.4, 16.2)
    objShp(1, 3).Name = "TOP" & txt
        For i = LBound(Tabbase, 1) To UBound(Tabbase, 1)
            If Tabbase(i, 7) = txt Then
                objShp(1, 3).TextFrame2.TextRange.Characters.Text = Round(CStr(Tabbase(i, 4) * 100), 2) & " %"
                Exit For
            End If
        Next i
End Sub

Laurent
 

SETILA

XLDnaute Junior
Bonjour Laurent,

Merci d'avoir pris le temps de me faire se bout de code.
Qu'est-ce que tu veux dire par 3 zones d'images?
regarde le dernier fichier, c'est plus ou mois ça mais j'aimerai en vba.
Objectif est de créer un code vba sur le classeur "PLAN AVEC TOP VBA.xlsm" et de récupérer le Top 10 dans le classeur "ANALYSE FACE OUT LEGENDS.xlsm) et de faire corresponde les Top avec les numéros de meubles? j'ai réussi à le faire avec des formules(RechercheV) mais avec VBA et avec un autre classeur c'est une chose trop compliqué pour le novice que je suis!?
Concernant le tour de magie pour mettre le PNG dans Excel:
Ouvrir Excel puis dans affichage ; clic sur mise en page, puis clic sur ajouter un en-tête!
Et la comme par magie s'affiche un onglet (en haut) création! clic sur image et choisi l'image que vous voulez? Quand vous insérer l'image; clic sur la feuille et non sur l'en-tête! l'image apparaît et ensuite tu clic sur en-tête et tu clic en haut sur mise en forme de l'image (onglet création).
et vous adapté l'image à votre feuille et le tour est joué...

Cordialement,

Setila
 

laurent950

XLDnaute Accro
Bonjour Setila,

Qu'est-ce que tu veux dire par 3 zones d'images ? (j'avais une idée mais je sais pas si cela peux correspondre en fonction de votre réponse)
J'ai compris cela :
le classeur "PLAN AVEC TOP VBA.xlsm" doit être en relation avec le classeur "ANALYSE FACE OUT LEGENDS.xlsm), une fois la relation établie, aux moyen d'une macro VBA récupérer les information qui se trouve sur la feuille du classeur ("et de récupérer le Top 10 dans le classeur") ou il y a la base de donné et écrire les informations cible au "TOP 10" dans la feuille du classeur ("PLAN AVEC TOP VBA.xlsm") ou il y a l'image PNG.
J'ai compris et je sais faire :
- Question : faire corresponde les Top avec les numéros de meubles?
les TOP sur la feuille du classeur ("PLAN AVEC TOP VBA.xlsm"), C'est vous qui écrivez a proximité de l'endroit du meuble le TOP correspondant (1 ou 2 ou 3 etc.) dans votre exemple c'est le TOP 10
Car les numéro de meubles c'est une image ?

Vous pouvez me decrire la procédure à la main en pas a pas (je la traduit en VBA)

Exemple : Dans la feuille "Plan" du classeur ("PLAN AVEC TOP VBA.xlsm") à côté du meuble "N°10"
j'écris TOP dans une cellule et à côté de la l'autre cellule 10 est en dessous de celle-ci j'écrit 3,23 % dans une autre cellule ?
Si dans cette exemple vous écrivez dans les deux première cellule (TOP et 10) je peux retrouver les donner
des % et les intégrer dans le classeur Cible depuis le classeur source.

J'ai juste besoin de connaitre la procédure à la main et je la reproduit en VBA tous simplement.

Un grand Merci pour cette astuce avec l'image c'est pas mal je pense me servir de cela par la suite cela ma donner une idée

Concernant le code VBA c'est aussi la magie Excel si j'y arrive mais je vais y arrivé ;-))

Cordialement,

Laurent950
 
Dernière édition:

SETILA

XLDnaute Junior
Bonsoir Laurent,

Oui effectivement, j'écris sur les cellules juste à coté des meubles qui correspondes au numéros, par rapport aux données dans onglet Meuble (classeur"ANALYSE FACE OUT LEGENDS.xlsm")
les numéros de meubles ne changent pas mais les top et %(CA) oui.
Je viens de terminer un autre fichier avec l'image retravaillé (Juste une merveille), j'ai inséré un code vba (bien sur novice avec onglet"analyse " mais je préfère avec un autre classeur) !
Il faudrait aussi que quand le meuble ne fait pas parti du top 10, le" top" ne dois pas s'afficher!
et que si le meuble, exemple: 106 passe au top 20 = case vide !

Cordialement,

Setila
 

Pièces jointes

  • PLAN AVEC TOP VBA v2.xlsm
    3.4 MB · Affichages: 28
Dernière édition:

laurent950

XLDnaute Accro
j'ai compris
Qu'est-ce que tu veux dire par 3 zones d'images ?
j' crée 3 zone de texte indépendante :
La première ou c'est écrit Top
La deuxième ou c'est écrit (Le numéro de top non figé soit 10 ou plus tard 20) = Remplis par vous.
La troisième ou le %(CA) s'inscrit Automatiquement
C'est trois étiquette se place avec aisance dans le dessin avec l'avantage (de créer un ID pour c'est 3 zone de texte est les associer entre elle "Le numéro du meuble pour création de la relation entre elle)
facile à placer dans le dessin (avec l'option de les grouper)
Bien sure si vous renseigner pour le meuble le passage en Top 20 (cette même étiquette se masque)
Une option (tous démasquer = pour remplir les nouveaux numéros de top et réinitialisé)
a réfléchir mais c'est faisable (par contre par remplissage dans les cellules ça ne vas pas exemple fusionner les cellules c'est pas terrible et pour le reste aussi) cela doit être dynamique.
Cette solution peux être correcte ?
 
Dernière édition:

SETILA

XLDnaute Junior
Bonsoir Laurent,

Le top 10 change ! le mois prochain le meuble 402 passera en 9éme positon peut etre?!
Voila pourquoi je fais un rechercheV pour avoir la position (top) par rapport aux meubles
Je te confirme que je note à la main le mot TOP.
j’espère que je suis assez clair?

Cordialement,

Setila
 
Dernière édition:

laurent950

XLDnaute Accro
Bonsoir,

I) Partie 1 "La créations des étiquettes à déplacer à côté du N° du meuble sur la feuille excel"
Le module « CreationEtiquette » crée 3 zones de texte :
- Top -----------------> (Dans l'exemple cette étiquette portera le nom de 102.1)
- Le numéro du Top -----------------> (Dans l'exemple cette étiquette portera le nom de 102.2)
- le % du CA -----------------> (Dans l'exemple cette étiquette portera le nom de 102.3)
Ceci est remplis automatiquement.
C'est 3 étiquettes lors de la création demande le numéro de Meuble.
Chacune de ces étiquette porte un nom (le Numéro du meuble suivie d'un point et un numéro)
exemple : Meuble N° 102 donc 3 étiquettes (102.1, 102.2,102.3) voir les numéro correspondant pour chaque étiquette plus haut.
Chaque étiquettes a un identifiant unique

Donc une fois créer vous pouvez déplacer c'est 3 étiquettes et les positionné à coté des meuble dans le dessins de la feuille excel (Bien plus souple que d'écrire dans des cellules excel car aucun lien entre le dessin et excel)

Faire cela pour chaque création (les déplacer par groupe de 3 et les positionné dans le dessins)

Nota : comme chaque étiquettes à un identifiant qui correspond au meuble aucun doublon possible
soit pour le meuble 102 les 3 étiquettes créer une fois et sortie de procédure si elle existe déjà donc
pas de doublon !

L'idéal serait de grouper c'est 3 étiquettes (puis donner un nom a se groupe) j'ai pas explorer encore si une personne du forum c'est faire cela pourrais être plus souple pour le déplacement de l'ensemble mais il y a un dysfonctionnement quand j'ai essayé donc pour l'instant c'est en attente

Module :
VB:
Sub CreationEtiquette()
' Création d'étiquette !
    Dim ObjSnap As Shape
    ' Feuille cible
    Dim F1 As Worksheet
    Set F1 = Worksheets("PLAN")
    ' Feille source
    Dim F2 As Worksheet
    Set F2 = Worksheets("analyse")
         Dim TabBd() As Variant
         TabBd = F2.Range(F2.Cells(1, 1), F2.Cells(F2.Cells(65536, 1).End(xlUp).Row, 7))
    Dim Meuble As Double
        Meuble = InputBox("Inscrire le numéro du Meuble", "Choix Numéro du Meuble ?")
' -_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
    ' si l'étiquette existe déjà sortie de la procédure (2vite de créer plein d'etique identique)
        Dim shp As Shape
        For Each shp In F1.Shapes
             'MsgBox shp.Name
                If Meuble = Split(shp.Name, ".")(0) Then
                    Exit Sub
                End If
        Next shp
' -_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
    Dim TabMeub(1 To 3) As Variant
    Dim i As Integer
    For i = 1 To 3
        Set ObjSnap = ActiveSheet.Shapes.AddTextbox(msoTextOrientationHorizontal, 638, 24.75, 32, 18)
            ObjSnap.Name = Meuble & "." & i
            ' Tableau pour grouper les shapes
                TabMeub(i) = Meuble & "." & i
                ' Fonction
                    remplissage F1, F2, TabBd, ObjSnap, i
    Next i
' -_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
    ' Grouper pas en fonction
'        F1.Shapes.Range(Array(TabMeub(1), TabMeub(2), TabMeub(3))).Select
'        Selection.ShapeRange.Group.Select
'        ObjSnap.ParentGroup.Select
'        ObjSnap.ParentGroup.Name = Meuble
'        'MsgBox ObjSnap.ParentGroup.Name
End Sub


Sub remplissage(F1 As Worksheet, F2 As Worksheet, TabBd() As Variant, ObjSnap As Shape, i As Integer)
' Création
    If i = 1 Then
        F1.Shapes.Range(Array(ObjSnap.Name)).TextFrame2.TextRange.Characters.Text = "Top"
    ElseIf i = 2 Then
        ' Recherche
        For K = LBound(TabBd, 1) To UBound(TabBd, 1)
            If TabBd(K, 1) = CDbl(Split(ObjSnap.Name, ".")(0)) Then
                F1.Shapes.Range(Array(ObjSnap.Name)).TextFrame2.TextRange.Characters.Text = TabBd(K, 7)
                F1.Shapes.Range(Array(ObjSnap.Name)).IncrementLeft 35
                F1.Shapes.Range(Array(ObjSnap.Name)).ScaleWidth 1.1, msoFalse, msoScaleFromTopLeft
            End If
        Next K
    Else
        For K = LBound(TabBd, 1) To UBound(TabBd, 1)
                If TabBd(K, 1) = CDbl(Split(ObjSnap.Name, ".")(0)) Then
                    F1.Shapes.Range(Array(ObjSnap.Name)).TextFrame2.TextRange.Characters.Text = Round(TabBd(K, 4) * 100, 2) & " %"
                    F1.Shapes.Range(Array(ObjSnap.Name)).IncrementTop 20
                    F1.Shapes.Range(Array(ObjSnap.Name)).IncrementLeft 28 / 2.6
                    F1.Shapes.Range(Array(ObjSnap.Name)).ScaleWidth 1.7, msoFalse, msoScaleFromTopLeft
                End If
            Next K
            End If
End Sub

II) Partie 2 "La mise à jours des étiquettes en relation avec la base de données qui change"
Ici la macro cherche l'étiquette en rapport avec la base soit pour exemple parmi toute les étiquettes créer dans la feuille celle qui correspond est fait la mise a jour du Numéro du Top et % CA.

Soit pour l'étiquette qui correspond au meuble 102 (Dont les 3 étiquettes doivent se positionné à côté du meuble 102 en question, l'étiquette 102.2 sera modifier pour sont numéro du Top et l'étiquette 102.3 sera modifier pour le CA %

Module :

VB:
Sub MiseAJourBd()
' Mise à jour des étiquettes !
    Dim ObjSnap As Shape
    ' Feuille cible
    Dim F1 As Worksheet
    Set F1 = Worksheets("PLAN")
    ' Feille source
    Dim F2 As Worksheet
    Set F2 = Worksheets("analyse")
         Dim TabBd() As Variant
         TabBd = F2.Range(F2.Cells(1, 1), F2.Cells(F2.Cells(65536, 1).End(xlUp).Row, 7))
' -_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
    ' si l'étiquette existe déjà sortie de la procédure (2vite de créer plein d'etique identique)
        Dim shp As Shape
        For l = LBound(TabBd, 1) To UBound(TabBd, 1)
            For Each shp In F1.Shapes
                If CStr(TabBd(l, 1)) = Split(shp.Name, ".")(0) Then
                    'MsgBox Split(shp.Name, ".")(0)
                    If Split(shp.Name, ".")(1) = 2 Then
                        F1.Shapes.Range(Array(shp.Name)).TextFrame2.TextRange.Characters.Text = TabBd(l, 7)
                    ElseIf Split(shp.Name, ".")(1) = 3 Then
                        F1.Shapes.Range(Array(shp.Name)).TextFrame2.TextRange.Characters.Text = Round(TabBd(l, 4) * 100, 2) & " %"
                    End If
                End If
            Next shp
        Next l
End Sub


Voilà c'était l'idée des 3 images que j'ai mis en oeuvre.

C'est peut être complexe mais j'espères que j'ai aussi était clair enfin j'ai fais au mieux ;-))

Cordialement
Laurent
 

Pièces jointes

  • PLAN AVEC TOP VBA v2.xlsm
    3.4 MB · Affichages: 39

SETILA

XLDnaute Junior
Bonjour Laurent,

Merci d'avoir pris du temps à trouver une solution!
Je comprends mieux l'idée des 3 images que tu as mis en oeuvre.
Je suis à l'étranger et je reviens mardi!
Je suis impatient de voir ça...
Encore merci et à mardi.

Bon week-end,
Setila
 

laurent950

XLDnaute Accro
Bonsoir,
Si l'idée est correct se que je pense, C'est facile de faire une mise en forme texte couleur et transparence de l'étiquette. (a développer selon les besoins)
Pour les restriction au Top ne correspondant pas (Suppression des étiquettes ou mise en transparence = rendre invisible)
Pour grouper les 3 zones de texte ou les dégrouper (j'ai trouvé)
Je pense qu'il faut commencer par placé les trois étiquette sur le fichier (faire une mise en forme texte) pour voir le resultat
Nombreuse sont les possibilités car la base me semble bonne
Bon séjour
Laurent950
 

SETILA

XLDnaute Junior
Bonjour Laurent,

Content de voir que nous avancons sur le projet qui est comme tu le dit sans limite!
Tu veux que je place les trois étiquettes sur le plan ou tu reprends le plan avec les top du dernier fichier?
Merci encore.
Bonne journée,

Setila
 

laurent950

XLDnaute Accro
Bonjour,
La construction de votre travai vous appartient et je sais pas le but final de se travail pour l élaboré et le finaliser.
Est ce qu'il y a d'autre plans associés au top ? (Si oui associer les top automatiquement a proximité des meuble (faisable)
Enfin ont peux inclure le meuble dans une autre zone de texte pour affiché la description et le CA %
Enfin pas de limite
Il faut une base et pas la retravailler pour faire cela en automatique.
Tous dépend de la nature de se document et sont utilité.
Je vous laisse la suite pour l'orientation de cette feuile de calcul
Je suis Ok pour vous aidez pas de soucis
J ai compris pour le code et l adapter a vos besoins c'est pas le plus compliqué.
Prenez mon dernier fichier et reposter le avec vos idée.
Peux être que d aute partageront aussi avec des idée
Laurent
 
Dernière édition:

SETILA

XLDnaute Junior
Bonjour Laurent,

Il n'y a pas d'autre plans associés au top! juste les meubles qui sont sur le plan.
J'aimerais vraiment que ça se mette à proximité des meubles en automatique parce que l'analyse change tous les mois (mais les meubles ne bougent pas).
Quand vous dites "Il faut une base et pas la retravailler pour faire cela en automatique" de quel base on parle?
merci pour votre aide Laurent.
Setila
 

Discussions similaires

Réponses
14
Affichages
907

Statistiques des forums

Discussions
312 195
Messages
2 086 072
Membres
103 110
dernier inscrit
Privé