Résolu Recopie d'images selon cas cochées/décochées

Anthonymctm

XLDnaute Occasionnel
Bonjour à tous,

Comme d'habitude, je n'arrive jamais à trouver quelque chose de semblable à mes besoins sur le net o_O
Alors je viens questionner les utilisateurs de mon forum préférés ^^

Explication (CF fichier joint): Pour un fichier de devis, sous Excel 2016, je souhaite que le commercial choisissent les caractéristiques qu'il souhaite présenter à son client.
L'intégralité des différents éléments, images associées et caractéristiques associées seraient sur un onglet catalogue, puis à partir de là je sèche. :oops:

Il faut indiquer quel élément on retient (par remplissage cellule, bouton à cocher, etc) puis il faudrait d'une manière ou d'un autre, qu'on isole les éléments choisis, soit sur un autre onglet, soit juste à l'impression, soit autre chose.

Je pense pouvoir le faire pour le texte avec des cascades de fonction SI mais pour l'image... ça je ne sais pas faire :rolleyes:
 

Fichiers joints

Anthonymctm

XLDnaute Occasionnel
Quelques précisions qui pourrait vous aider à comprendre mon besoin :

Pour des raisons de RGPD je ne peux pas vous joindre mon fichier finale
:bof:


Mais en gros, on fabrique des équipements spéciaux, j'ai X onglets qui servent à calculer le coûts de mes équipements, ensuite j'ai un onglet "récap général" qui reprend les données de tous les X onglets pour travailler le prix de vente final et ajouter des produit hors-standard, ensuite ces prix de vente vont sur mon onglet "En-tête" qui sera l'en-tête de mon devis (le récap mis en forme avec toutes les lignes de mon devis) et pour compléter mon devis (c'est là ou j'en suis) j'ai besoin de renseigner les caractéristiques de mes différents éléments.

Et c'est là ou j'ai besoin de sélectionner manuellement les éléments à afficher dans mon devis. Structurellement, ça peut-être dans l'onglet "en-tête", dans l'onglet carac tech, ou dans un autre onglet. Ca c'est à vous de voir ce qui est le plus simple. Tant qu'à la fin je puisse imprimer mon en-tête puis mon descriptif, ça me va
:)


Donc pour être de bien se comprendre, dans carac tech, j'ai une liste d'élément parmis lesquels certains ne seront pas présent à l'impression et d'autres oui. Mon premier besoin c'est de récupérer les images selon si on a coché qu'on gardait l’équipement ou non. Je précise que je ne suis pas attaché à la forme qu'à le "catalogue", et la forme du rendu final pourra être retravaillée manuellement si on peut pas le faire par le VBA (fusion cellule, couleur des textes, etc)
 

Anthonymctm

XLDnaute Occasionnel
Salut D.D.

Bah écoute après 30s de test je me dit que c'est super !
L’approche à masquer les lignes pourrait probablement me convenir !

J'ai l'impression que la commande est inversée, je met une croix sur ce que je veux enlever plutôt que ce que je veux insérer mais ça je dois pouvoir m'en débrouiller.

Et, j'ai pas encore essayé, mais tu pense que ce sera possible d'avoir la séléction sur le même onglet ?

En tout cas, rien que pour ce que t'as déjà fait, merci beaucoup ! :eek:;)
 

D.D.

XLDnaute Occasionnel
J'ai l'impression que la commande est inversée, je met une croix sur ce que je veux enlever plutôt que ce que je veux insérer mais ça je dois pouvoir m'en débrouiller.
Ah, ah ! C'est vrai que j'ai inversé :) N'importe quoi !

Su le même onglet est possible, il faut juste redimensionner et bouger un peu l'ensemble.

Ravie de t'avoir aidé.
 

Anthonymctm

XLDnaute Occasionnel
D.D,

Je reviens vers toi parce que j'ai commencé à adapter te solution mais je trouve un petit bug (egalement présent sur la version que tu m'as envoyée)

Il y a certaines lignes qui ne devrait pas se cacher qui se cache quand même, la première ligne de certains éléments.

Si t'as une idée de comment régler ça :)
 

Fichiers joints

Anthonymctm

XLDnaute Occasionnel
Visiblement, c'est la première ligne qui succède un élément masqué qui se masque également.
Mais si la ligne précédente n'est pas masqué alors la première ligne d'un élément ne l'est pas non plus.
 

D.D.

XLDnaute Occasionnel
Le problème vient du fait que tu as séparé les lignes de sélection.
Voila une version en tenant compte de ce que tu souhaites.
Tu remarqueras que la version est beaucoup épurée (plus de compteur de ligne, etc...)
Au passage, puisque tu aimes les cellules fusionnées, je m sers de cette fonctionnalité.
 

Fichiers joints

Anthonymctm

XLDnaute Occasionnel
C'est super, tout ce qui me fallait ! :eek: Merci beaucoup !

Si jamais ça te dit, j'ai un autre petit soucis à régler :rolleyes:

J'ai trouvé sur le net un code assez sympa (qui date de 2010) qui me permet d'insérer une image dynamique dans une cellule qui contient une formule type =image("nomdufichier";"C:\chemindudossier")

le code :
VB:
Function Image(img_nom As Variant, Optional chemin As String = "") As String
    ' Declaration des variables
    Dim ref As Range, sh As Shape, drap As Boolean
    ' ref : la cellule qui provoque la fonction
    ' sh : les shapes
    ' Drap : drapeau definissant si la shape est trouvée
    Application.Volatile ' defini une fonction qui se recalcule automatiquement
' teste le type de variable soit une cellule soit une valeur alphanumerique
    Select Case TypeName(img_nom)
        Case "Range" ' c'est une reference cellule
            Image = img_nom.Value
        Case "String" ' c'est une valeur alphanumerique
            Image = img_nom
        Case Else ' c'est une erreur
            Image = "#ERROR"
            Exit Function
    End Select
' le chemin est un parametre optionnel, s'il est omis, la valeur est le chemin du classeur
    If chemin = "" Then chemin = ThisWorkbook.Path
' le chemin ne se termine pas forcemment par \ je le rajoute
    If Right(chemin, 1) <> "\" Then chemin = chemin & "\"
    Set ref = Application.Caller ' affectaction à ref de la cellule qui lance la fonction
   If ref.MergeCells = True Then Set ref = ref.Worksheet.Range(ref.MergeArea.Address)
    drap = False ' initialisation du drapeau
    For Each sh In ref.Worksheet.Shapes ' je passe en revue toute les shapes
' je teste son nom construite plus bas pour savoir si c'est la bonne shappe
        If "Img-" & ref.Address = Left(sh.Name, Len(ref.Address) + 4) Then drap = True: Exit For
    Next
    If drap = True Then ' c'est la bonne shape
' je teste maintenant si c'est la meme que celle de la formule pour ne pas refaire le traitement
' Le gain de temps n'est pas negligeable
       If "Img-" & ref.Address & "-" & Image = sh.Name Then GoTo fin ' egalité parfaite, je sors
    End If
    On Error Resume Next ' controle d'erreur, si la shape n'existe pas encore, l'instruction suivante provoque une erreur
    sh.Delete ' je detruits la shap
    If Image = "" Then Exit Function ' la valeur est à "" alors pas de shape à affecter
' j'inserre la shape, avec l'image en lui mettant les tailles necessaires pour la cellule
    Set sh = ref.Worksheet.Shapes.AddPicture(chemin & Image, True, True, ref.Left, ref.Top, ref.Width, ref.Height)
    sh.Name = "Img-" & ref.Address & "-" & Image ' je definis son nom pour la trouver plus tard
fin:
    Image = "Img" & ref.Address ' j'affecte un nom pour resultat
End Function
Ca fonctionne très bien, mais j'aurai juste besoin de mettre un peu de marge autour de l'image importée.
Avec ce code l'image fait la taille maximale qu'elle peut prendre (avec déformation et la propriété déplacer sans dimensionner) et j'aurai bien aimé qu'elle soit un peu plus petite (question d’esthétique), qu'elle conserve les proportion inital et qu'elle soit en mode déplacer et dimensionner avec les cellules, comme ça je peux la masquer avec ta macro.

Je te joins l'image également si tu veux tester chez toi, il faut juste modifier le chemin dans C6.
 

Fichiers joints

Anthonymctm

XLDnaute Occasionnel
Pour la propriété déplacer et dimensionner je peux peut-être avoir juste un bout de macro à insérer avant la tienne du type -selectionner toutes les images de la feuille -mettre en mode déplacer et dimensionné
 

Créez un compte ou connectez vous pour répondre

Vous devez être membre afin de pouvoir répondre ici

Créer un compte

Créez un compte Excel Downloads. C'est simple!

Connexion

Vous avez déjà un compte? Connectez vous ici.

Haut Bas