Modifier le format d'un SmartArt en VBA
Bonjour,
J'automatise les organigrammes de mon entreprise par Excel et VBA. A partir de tableau (noms, fonction, "rang hiérarchique"), je génère des SmartArt. Je souhaite modifier le format des objets (forme, couleur de fond et bordure) pour suivre la charte graphique de mon entreprise. Je n'y parviens pas par du code (ni enregistreur de macro). Pouvez-vous m'aider svp ? Si pas possible, avez-vous une autre idée pour coller un format à un SmartArt ?
Merci et bonne journée,
Charlotte
Bonjour CharlotteG et
Une petite présentation ICI serait la bienvenue
Si vous ne l'avez pas encore fait, je vous invite à lire la charte du forum [A LIRE AVANT DE POSTER]
qui vous aidera dans vos demandes et réponses sur ce forum
Ainsi que sur les fonctionnalités (Nouveau Forum au bas de page notamment)
Il serait préférable de joindre un fichier anonymisé à votre demande comme indiqué dans la charte
Merci de votre participation
Cordialement
Bonsoir CharlotteG, BrunoM45,
Après respect des indications et conseils du Modérateur qui sont très utiles à suivre.
Il est possible en effet de modifier par VBA le format SmartArt.
Celui-ci est particulier puisque c'est un Bloc contenant des formes diverses.
Et dans sa version Bloc il s'apparente plus au type graphique (bien qu'il n'en ait pas l'air).
Juste une astuce à savoir, il faut le transformer du format SmartArt (en cliquant sur l'objet) au format formes (modifiables donc).
Après clic sur le menu général d'Excel on voit apparaître (à coté d'Aide) Conception de SmartArt. Ensuite clic sur Convertir en formes.
On peut d'ailleurs si l'on ne souhaite pas poursuivre annuler cela par Rétablir le Graphique.
Si l'on désire poursuivre après clic sur Convertir, et en ayant l'objet toujours sélectionné on choisit Format de Forme dans le menu général.
Et là soit par Volet Sélection, soit par VBA on peut modifier chacune des formes.
Exemple: Le 1ier rectangle a été mis en bleu marine et le dernier en jaune.
cela comme ci dessous par VBA.
Sub Smart()
'
' Colorisation de tous les rectangles en rouge
ActiveSheet.Shapes("Bloc1").Fill.ForeColor.RGB = vbRed
'X = ActiveSheet.Shapes("Bloc1").GroupItems.Count
'Puis le 1ier en bleu
ActiveSheet.Shapes("Bloc1").GroupItems(1).Fill.ForeColor.RGB = vbBlue
'Et le dernier en jaune
ActiveSheet.Shapes("Bloc1").GroupItems(5).Fill.ForeColor.RGB = vbYellow
Range("H25").Select
End SubBonjour, je travaille avec CharlotteG,
Merci pour ces précisions très pertinentes qui nous ont déjà débloquées sur pas mal de choses,
On aimerait maintenant pouvoir modifier des bordures, et les forme de nos "GroupItem". Nous n'arrivons pas à trouver la bonne syntaxe.
Pour la forme on cale, on aimerait convertir la forme rectangulaire générée par Excel en une forme avec les coins arrondis
TESTS Pour la bordure et sa couleur :
ActiveSheet.Shapes("Bloc1").GroupItems(1).Line.Weight = xlThick
ActiveSheet.Shapes("Bloc1").GroupItems(1).Borders.Weight = xlThick
ActiveSheet.Shapes("Bloc1").GroupItems(1).Borders.RGB = RGB(0, 100, 100)
ActiveSheet.Shapes("Bloc1").GroupItems(1).Borders.RGB = RGB(0, 100, 100)
Merci encore !
Bonjour,
pour ceux qui le souhaitent, voici la réponse pour la modification des bordures :
ActiveSheet.Shapes("Bloc1").GroupItems(1).Line.ForeColor.RGB = RGB(0, 70, 100)
Puis la modification de la forme :
ActiveSheet.Shapes("Bloc1").GroupItems(1).Select
Selection.ShapeRange.AutoShapeType = msoShapeRoundedRectangle
Bonsoir CharlotteG et JeandJam,
Merci de faire un retour. J'avais complètement oublié ce fil.
Alors que j'avais préparé quelques infos.
Bon, je les transmets maintenant. Il faut savoir que l'on peut donner le numéro de la forme (pour aller + vite) plutôt que le msoShape.
Et que diverses transformations peuvent s'y appliquer ( voir l'image).
Sub DiffTypeStyle()
'Modification d'un élement du Bloc1 partie du Groupe global
'Ajout d'un nouvel élément de type ovale(type,(positions) left ,top , largeur, hauteur) nommé shpOne
ActiveSheet.Shapes.AddShape(5, 10, 10, 150, 100).Name = "shpOne"
'Type d'élément ici une forme Microsoft
'https://docs.microsoft.com/fr-fr/office/vba/api/office.msoshapetype
'https://docs.microsoft.com/fr-fr/office/vba/api/office.msoautoshapetype
'msoShapeRoundedRectangle 5 (Rectangle arrondi)
Typ = ActiveSheet.Shapes("RectRond").ShapeStyle
ActiveSheet.Shapes("Bloc2").GroupItems(5).Line.Weight = 3
ActiveSheet.Shapes("Bloc2").GroupItems(1).Line.DashStyle = 12 'Note de 1 à 12
ActiveSheet.Shapes("Bloc2").GroupItems(5).Line.ForeColor.RGB = RGB(250, 150, 50)
For Each c In ActiveSheet.Shapes("Group1").GroupItems
If c.Name = "Rect1" Then c.Select: Selection.ShapeRange.Fill.ForeColor.RGB = vbYellow
Next
End Sub
Merci à tous pour vos réponses qui nous ont permis d’avancer !
Très efficace !