XL 2010 Trouver le nom des formes qui est sur un onglet

jeanmi

XLDnaute Occasionnel
Bonjour à tous,

Je recherche s'il est possible de trouver le nom des formes qui sont sur un feuille (fonction insertion forme rectangle)
Si je fait une macro auto, je vois que les formes ce nommes, Rectangle, avec un numéro après.

Ma première question qui en comporte deux :
ou trouver ce nom ?
est-il possible de renommer ?

Ma deuxième question :

Est-il possible de copier une image dans cette forme( ça oui) mais sans déformation de l'image ?

Merci pour vos réponses

Cordialement
 
Solution
bonsoir
c'est simple tu change le mode de remplissage
ajoute une shape la nomme"toto"
VB:
Sub add_shape_With_Image()
  Dim shap As Shape
  With ActiveSheet
        Set shap = .Shapes.AddShape(msoShapeRectangle, 270.6, 312, 154.8, 101.4)
        With shap
            .Name = "toto"
            .Fill.Visible = msoTrue
            .Fill.UserPicture "C:\Users\Public\Pictures\Sample Pictures\Penguins.jpg"
        End With
    End With
End Sub

l'image ne me plait plus je la change
Code:
Sub change_l_image()
    With ActiveSheet.Shapes("toto")
        .Fill.UserPicture "C:\Users\Public\Pictures\Sample Pictures\Koala.jpg"
    End With
End Sub

finalement je ne veux plus d'image dans cette shape ("toto")
ben on la rempli en solid
Code:
Sub...

jeanmi

XLDnaute Occasionnel
Bonjour.
Pourtant vous dites l'avoir déjà fait au poste #14
Bonjour @Dranreb , Bonjour à tous,

En #14 c'est la macro de création de la forme et de mise en place de l'image dans celle-ci, pas la suppression de l'image dans la forme sans supprimer la forme.

C'est pas grave, je vais trouver une autre solution en faisant plusieurs manipulations comme ci-dessous :

Utiliser la macro du #14, puis je vais supprimer la forme avec l'image, recréer une autre forme au même emplacement, renuméroter cette forme avec le numéro de la forme initiale, et pour finir remettre une nouvelle image dans la forme. Je cherché tous simplement à faire plus simple.

Merci d'avoir participé à ma recherche.

Cordialement
 

Dranreb

XLDnaute Barbatruc
Je ne sais pas par cœur comment supprimer manuellement l'image dans une forme. Il faudrait que je cherche aussi.
Je commencerais par essayer de cocher un autre type de remplissage. Une fois que vous aurez trouvé, enregistrez une macro pour avoir les instructions qui font ça.
 

patricktoulon

XLDnaute Barbatruc
bonsoir
c'est simple tu change le mode de remplissage
ajoute une shape la nomme"toto"
VB:
Sub add_shape_With_Image()
  Dim shap As Shape
  With ActiveSheet
        Set shap = .Shapes.AddShape(msoShapeRectangle, 270.6, 312, 154.8, 101.4)
        With shap
            .Name = "toto"
            .Fill.Visible = msoTrue
            .Fill.UserPicture "C:\Users\Public\Pictures\Sample Pictures\Penguins.jpg"
        End With
    End With
End Sub

l'image ne me plait plus je la change
Code:
Sub change_l_image()
    With ActiveSheet.Shapes("toto")
        .Fill.UserPicture "C:\Users\Public\Pictures\Sample Pictures\Koala.jpg"
    End With
End Sub

finalement je ne veux plus d'image dans cette shape ("toto")
ben on la rempli en solid
Code:
Sub supprime_l_image()
    With ActiveSheet.Shapes("toto")
        .Fill.Solid
    End With
End Sub

et pour le fun j'en r'ajoute deux
on change la forme de la shape sans changer de shape
VB:
Sub change_la_forme_de_la_shape_en_oval()
ActiveSheet.Shapes("toto").AutoShapeType = msoShapeOval
End Sub

Sub change_la_forme_de_la_shape_en_rectangle()
ActiveSheet.Shapes("toto").AutoShapeType = msoShapeRectangle
End Sub
voilà voilà
;)
 
Dernière édition:

jeanmi

XLDnaute Occasionnel
bonsoir
c'est simple tu change le mode de remplissage
ajoute une shape la nomme"toto"
VB:
Sub add_shape_With_Image()
  Dim shap As Shape
  With ActiveSheet
        Set shap = .Shapes.AddShape(msoShapeRectangle, 270.6, 312, 154.8, 101.4)
        With shap
            .Name = "toto"
            .Fill.Visible = msoTrue
            .Fill.UserPicture "C:\Users\Public\Pictures\Sample Pictures\Penguins.jpg"
        End With
    End With
End Sub

l'image ne me plait plus je la change
Code:
Sub change_l_image()
    With ActiveSheet.Shapes("toto")
        .Fill.UserPicture "C:\Users\Public\Pictures\Sample Pictures\Koala.jpg"
    End With
End Sub

finalement je ne veux plus d'image dans cette shape ("toto")
ben on la rempli en solid
Code:
Sub supprime_l_image()
    With ActiveSheet.Shapes("toto")
        .Fill.Solid
    End With
End Sub

et pour le fun j'en r'ajoute deux
on change la forme de la shape sans changer de shape
VB:
Sub change_la_forme_de_la_shape_en_oval()
ActiveSheet.Shapes("toto").AutoShapeType = msoShapeOval
End Sub

Sub change_la_forme_de_la_shape_en_rectangle()
ActiveSheet.Shapes("toto").AutoShapeType = msoShapeRectangle
End Sub
voilà voilà
;)
Bonjour @patricktoulon , bonjour à tous,

Un grand merci, je vais mettre en pratique.
Pour moi ce n'était pas simple, vraiment pas simple.

Cordialement
 

jeanmi

XLDnaute Occasionnel
bonsoir
c'est simple tu change le mode de remplissage
ajoute une shape la nomme"toto"
VB:
Sub add_shape_With_Image()
  Dim shap As Shape
  With ActiveSheet
        Set shap = .Shapes.AddShape(msoShapeRectangle, 270.6, 312, 154.8, 101.4)
        With shap
            .Name = "toto"
            .Fill.Visible = msoTrue
            .Fill.UserPicture "C:\Users\Public\Pictures\Sample Pictures\Penguins.jpg"
        End With
    End With
End Sub

l'image ne me plait plus je la change
Code:
Sub change_l_image()
    With ActiveSheet.Shapes("toto")
        .Fill.UserPicture "C:\Users\Public\Pictures\Sample Pictures\Koala.jpg"
    End With
End Sub

finalement je ne veux plus d'image dans cette shape ("toto")
ben on la rempli en solid
Code:
Sub supprime_l_image()
    With ActiveSheet.Shapes("toto")
        .Fill.Solid
    End With
End Sub

et pour le fun j'en r'ajoute deux
on change la forme de la shape sans changer de shape
VB:
Sub change_la_forme_de_la_shape_en_oval()
ActiveSheet.Shapes("toto").AutoShapeType = msoShapeOval
End Sub

Sub change_la_forme_de_la_shape_en_rectangle()
ActiveSheet.Shapes("toto").AutoShapeType = msoShapeRectangle
End Sub
voilà voilà
;)
bonjour @patricktoulon, à tous et meilleurs vœux pour cette nouvelle année

j'utilise les codes que tu m'avais donnés dans cette discussion.
ça fonctionne nickel.
VB:
Dim position_T_BC As String
 
chemin = rep02 & "\"
  nom_tampon = "essai.png"

  position_T_BC = "237, 666.6, 127.8, 74.4)"
 
  With ActiveSheet
 
        'Set shap = .Shapes.AddShape(msoShapeRectangle, 237, 666.6, 127.8, 74.4) 'ça marche

         Set shap = .Shapes.AddShape(msoShapeRectangle, position_T_BC) 'ça marche pas
        
        With shap
            .Name = "essai" ' renome la forme
            .Fill.Visible = msoTrue
            .Fill.UserPicture chemin & nom_tampon ' emplacement ou est l'image à mettre dans la forme
            
        End With

Aujourd'hui je souhaiterai faire une petite modification de ces codes pour avoir la position des formes dans une variable ou plusieurs s'il le faut. j'ai fait des essai sans résultat.

voici le code de base avec la modif , qui ne fonctionne pas, c'est juste pour faire voir le principe souhaité.
Merci pour l'aide

Cordialement
 

patricktoulon

XLDnaute Barbatruc
re
bonsoir @jeanmi
tout les meilleurs veux a toi et toute ta famille
pour ton soucis tu dois comprendre que se sont 4 mesures bien distincte et donc que ce ne peut pas etre une chaîne entre guillement
alors ta chaine tu la fait en array

VB:
With ActiveSheet
 
position_T_BC = array(237, 666.6, 127.8, 74.4)

 
        'Set shap = .Shapes.AddShape(msoShapeRectangle, 237, 666.6, 127.8, 74.4) 'ça marche

         Set shap = .Shapes.AddShape(msoShapeRectangle, position_T_BC(0),position_T_BC (1),position_T_BC (2),position_T_BC (3)) 'ça marche pas
'..
'etc...
 

jeanmi

XLDnaute Occasionnel
re
bonsoir @jeanmi
tout les meilleurs veux a toi et toute ta famille
pour ton soucis tu dois comprendre que se sont 4 mesures bien distincte et donc que ce ne peut pas etre une chaîne entre guillement
alors ta chaine tu la fait en array

VB:
With ActiveSheet
 
position_T_BC = array(237, 666.6, 127.8, 74.4)

 
        'Set shap = .Shapes.AddShape(msoShapeRectangle, 237, 666.6, 127.8, 74.4) 'ça marche

         Set shap = .Shapes.AddShape(msoShapeRectangle, position_T_BC(0),position_T_BC (1),position_T_BC (2),position_T_BC (3)) 'ça marche pas
'..
'etc...
re @patricktoulon

merci pour cette réponse rapide, j'ai testé de suite et j'ai un message d'erreur Tableau attendu ?
cordialement
 

jeanmi

XLDnaute Occasionnel
a ben ça c'est sur il te faut enlever le "As string " dans le dim de la variable "position_T_BC "
c'est évident j'ai pas cru bon de le dire
Bonjour @patricktoulon à tous,

Merci pour la réponse, mais n'y connaissant pas grand chose, pour moi ce n'est pas évident, ce qu'il faut faire.

Bon j'ai supprimé le AS string, donc toutes ma ligne : Dim position_T_BC As String
est là résultat : variable non définie ?

j'ai donc supprimer uniquement le As string comme tu me l'a dis , et là : ça MARCHE.

je ne pensais pas qu'un dim sans variable ça pouvais fonctionner ?

c'est peut-être ça ? : Si vous ne spécifiez pas la dimension au moment de la déclaration de la variable, le tableau est appelé dynamique.

Et ça ne posera pas de pb si j'ai plusieurs une variable qui sera redéfinie dans mon programme ?

je vais faire ( position_image = position_T_TC puis position_image = position_T_BDC etc)
je vais avoir 18 positions au minimum à définir, avec les 4 paramètres.
ou on peut mettre ça dans un onglet et récupérer c'est données ou une autre méthode pour faire cela ?

merci encore

Cordialement
 
Dernière édition:

jeanmi

XLDnaute Occasionnel
Bonjour à tous
Salut JeanMi !!! alors toujours affairé dans ton Vba !!! c'est pour une autre appli j'espère ?
Sinon pour tes données , tu peux faire un tableau à 2 dimensions T(a,b) plus facile ensuite à traiter par boucle ( avec ubound) . Je laisse les spécialistes qui ont commencé , poursuivre .
Bonjour @herve62, à tous,

Quel plaisir de te lire.
Oui c'est pour une application similaire sur le même principe pour laquelle tu m'as si gentiment aidé l'année dernière, et qui fonctionne très bien.

Mais là, pour cette fois ci, je suis passé en tous excel (plus de excel/word) pour conserver toutes les mises en formes des cellules lors des transferts.

j'y travail depuis le début de l'année, mais ça avance doucement. C'est pas facile lorsque l'on ne maitrise pas. il faut poser des questions, attendre les réponse, faire des essais et encore recommencer.

J'attends juste une réponse de @patricktoulon sur ma dernière question du #27 et je devrais pouvoir tous finaliser avec encore beaucoup de mise en page et peut-être de fonctions qui seront à modifier.

Bonne continuation à toi et au plaisir de te lire et peut-être d'avoir des réponses de toi sur des sujets postés.

Cordialement
 

Discussions similaires