Fonction Si avec des Shapes

Bonjour à tous,

Après plusieurs recherche infructueuse, je me permet de poster ma demande ici.

Mon niveau de connaissance en VBA est limité mais a force de parcourir ce super site, je suis arrivée à écrire un bout de script pour un "logiciel de soumission" ( je ne peux malheureusement pas partagé le fichier, il y a des données sensible dessus et mon boss ne serait pas content...

Je vais essayé d’être le plus clair possible, je suis concepteur en génie mécanique et je fais donc des mise en plans...pour le bien de la cause (faire des soumission rapidement) , j'ai "développé" un fichier excel sur lequel j'ai une image qui représente une mise en plan avec trois vue FACE GAUCHE ET DESSUS qui elle ne change jamais ou presque...

Dans mon ficher excel, le premier onglet contient toutes les valeurs numérique nécessaire au calcul de la soumission ainsi que les valeur numérique des cotes qui doivent normalement apparaître sur une mise en plan.

Le deuxième onglet contient mon image ( mise en plan) et plusieurs "shape" rectangulaire groupé dans lesquelles apparaissent les valeurs des cote nécessaire pour la mise en plan...

est ce que je vous perdu ?

bref, lorsque mon image de fond et que les cote évoluent tout se met ajour automatiquement...et pour forcer les cote a rester toujours au dessus de mon image j'utilise ActiveSheet.Shapes.Range(Array("COTEVUEPLAN")).ZOrder msoBringToFront.

Mais voila mon boss veut changer les images de fond et donc il faut que je puisses changer aussi la disposition des cotes...

pour cela j'avais idée d'utiliser une condition pour qu'en fonction d'une valeur présente dans une cellule x ou y le groupe de cote se retrouve soit en dessous sois au dessus de l'image.

j'ai commençais a écrire cela mais rien ne fonctionne pourquoi ???

If ActiveSheet.Range("B23").Value Like "*Sur pattes - Bidge Crane*" Then

ActiveSheet.Shapes.Range(Array("COTEVUEPLAN")).ZOrder msoBringToFront

End If

If Range("B23").Value Like "*Suspendu - Suspended*" Then

ActiveSheet.Shapes.Range(Array("COTEVUESUSPENTE")).ZOrder msoBringToFront

end if

donc pour résumer...si j'ai Sur pattes - Bidge Crane comme information dans la cellule B23, je veux le masque des cotes forcer COTEVUEPLAN et si j'ai Suspendu - Suspended comme information et bien je souhaites avoir COTEVUESUSPENTE sur le dessus et forcer le masque des autre cote a allé en dessous...je ne veux surtout pas supprimer les cotes...

j'espère avoir été clair....

merci infiniment pour votre aide

Fred

Bonsoir,

Je ne rentre dans aucune discussion de manipulations de formes sans fichier, on peut y passer un temps considérable improductif sans être assuré d'en venir à bout... Il est important de concrétiser ce dont on parle si l'on veut produire un résultat concret.

Fournir un fichier, expurgé de données confidentielles, et illustrant effectivement la question que tu veux résoudre, t'incombe si tu veux parvenir rapidement à un résultat utilisable.

Quelques considérations sur l'ordre de superposition, c'est un peu insuffisant pour titiller l'imagination. Et quand on voit que tu utilises un ShapeRange pour un seul objet Shape (bonne imitation de l'enregistreur ! ), on ne peut que demander à voir avant de se lancer dans toute autre considération...

Cordialement.

merci pour la précision effectivement j'utilise l'enregistreur de la macro plus des précieux conseil glaner par ci par la...

voici le fichier, merci de l'utiliser de la bonne manière le code en question se trouve dans le module 1.

je ne fournirai malheureusement pas toute les images j'en ai un load astronomique.

j'espère qu'avec cela vous allez pouvoir m'aider

merci beaucoup

ps:

petite précision dans l'onglet plan, il y a une image isometrique, ensuite une image avec 3 vue et ensuite l'image detail, c'est a sous l'image des 3 vue (page3 /5) que les shape avec les cotes sont présente...chacun d'elle porte le nom COTEVUEPLAN ou bien COTEVUESUSPENTE.

Ce que j'ai besoin c'est de "forcer" l'une ou l'autre des shape a etre en avant plan ou en arrière plan car l'image des 3 vue va changer.

MERCI INFINIMENT

Bonjour,

si je fais :

Sub test()
    ActiveSheet.Shapes.Range(Array("COTEVUEPLAN")).ZOrder msoBringToFront
    ActiveSheet.Shapes.Range(Array("COTEVUESUSPENTE")).ZOrder msoBringToFront
End Sub

j'alterne bien entre les 2 (sur 2010).

If ActiveSheet.Range("B23")

Quelle est la feuille active ?

Nomme-là plutôt : If Sheets("Configurateur").Range("B23")

Sinon peut-être un soucis avec 2016 (?)

eric

PS :

'1)
ActiveSheet.Shapes.Range(Array("COTEVUEPLAN")).Visible = True
ActiveSheet.Shapes.Range(Array("COTEVUESUSPENTE")).Visible = False
'2)
ActiveSheet.Shapes.Range(Array("COTEVUEPLAN")).Visible = False
ActiveSheet.Shapes.Range(Array("COTEVUESUSPENTE")).Visible = True

fonctionne bien aussi

Bonjour, Salut Eric !

Honnêtement, cela me paraît un peu brouillon ! Et je ne suis pas sûr d'avoir bien compris ta problématique...

Il me semble qu'il faudrait d'abord dissocier ton chargement d'images avec positionnement initial et vue initiale (et éventuellement renommage des images...) des manipulations ultérieures.

Pour ce qui est de ces dernières, ce sur quoi il me semble que porte ta question, tu devrais avoir un certain nombre limité de configurations à afficher, et on peut donc alors programmer l'affichage de ces diverses configurations à la demande ou selon une alternance circulaire...

Il me paraîtrait aussi plus simple de procéder par masquage/démasquage que jouer avec des superpositions sur l'axe Z, chaque configuration étant alors définie par une liste d'images indiquant si elles sont visibles ou non dans la configuration recherchée, soit (les images étant toujours listées dans le même ordre) chaque config. est alors définie par un simple tableau de valeurs booléennes, utilisable dans une procédure élémentaire d'affichage.

Cordialement.

Bonjour Messieurs,

tout d'abord merci beaucoup pour vos commentaires, effectivement tout ceci parait brouillon car je ne suis pas du tout programmeur mais concepteur en génie mécanique.

Pour être plus précis, j'utilise l'onglet "configurateur" pour monter ma soumission avec les différentes information nécessaire pour celle-ci.

Dans ce même onglet, en D36 le code qui apparaît permet de mon script de faire apparaître l'image présente dans un dossier et qui porte le même nom que le code en D36.

Je me sert de la shape "COTEVUE PLAN" pour des image représentant un pont roulant avec des arches et l'autre pour des pont roulant dit suspendus. Cette information ( suspendu ou avec arche sue trouve dans la case B23.

au debut je me servais de :

'ActiveSheet.Shapes.Range(Array("COTEVUEPLAN")).ZOrder msoBringToFront pour forcer la shape a rester sur le dessus de la nouvelle image pour apparaître, j'en ai 198 exactement et tout les cote tombaient a la bonne place.

Pour ce qui est des pont suspendus je vais en avoir autant mais malheureusement elles ne sont pas positionné au même endroit et donc les cote ne tombe pas au même endroit.

c'est pourquoi je pensais qu'avec un IF je pourrais alterner entre une shape et une autre.

If Sheets("Configurateur").Range("B23").Value = "*Sur pattes - Bridge Crane*" Then

ActiveSheet.Shapes.Range(Array("COTEVUEPLAN")).ZOrder msoBringToFront

Else: ActiveSheet.Shapes.Range(Array("COTEVUESUSPENTE")).ZOrder msoBringToback

End If

j'ai essayé aussi avec :

If Sheets("Configurateur").Range("B23").Value = "*Sur pattes - Bridge Crane*" Then

ActiveSheet.Shapes.Range(Array("COTEVUEPLAN")).Visible = True

ActiveSheet.Shapes.Range(Array("COTEVUESUSPENTE")).Visible = False

Else

ActiveSheet.Shapes.Range(Array("COTEVUEPLAN")).Visible = False

ActiveSheet.Shapes.Range(Array("COTEVUESUSPENTE")).Visible = True

End If

les images change bien mais mes shapes restent toujours en arrière...

il y a vraiment de quoi que je n'ai pas compris

merci d'avance encore

de rien...

Rechercher des sujets similaires à "fonction shapes"