IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

SmartArt avec VBA [XL-2013]


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Mars 2017
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2017
    Messages : 6
    Points : 6
    Points
    6
    Par défaut SmartArt avec VBA
    Bonjour,

    Je travail avec des SmartArt et j'ai actuellement une Macro qui me permet d'incrémenter un tableau avec le texte rouge contenu dans les formes de mon SmartArt.

    Petit exemple pour mieux comprendre :

    Nom : 1.PNG
Affichages : 1360
Taille : 40,3 Ko

    Pour l'instant voici le code qui permet de réaliser ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    Sub test()
    Dim SA As SmartArt
    Dim i As Integer
    Dim j As Long
     
    Set SA = Feuil1.Shapes(1).SmartArt
    j = 26
    With SA
        For i = 1 To .AllNodes.Count
            With .AllNodes(i).TextFrame2.TextRange
                If .Font.Fill.ForeColor = 255 Then
     
                    Feuil1.Cells(j, 2) = .Text
                    j = j + 1
                End If
            End With
        Next i
    End With
    Set SA = Nothing
    End Sub
    Je travail avec plusieurs couleurs et pour rendre mes supports plus visuel, je souhaiterais réaliser la même Macro mais en prenant en compte la couleur de la forme et non la couleur du texte.

    Est-ce que cela est possible ? Comment faire ?

    J'attends vos pistes.

    Merci d'avance

    Ci besoin voici le fichier test que j'utilise :
    Fichiers attachés Fichiers attachés

  2. #2
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Développeur VBA/C#/VB.Net/Power Platform
    Inscrit en
    Juillet 2007
    Messages
    14 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur VBA/C#/VB.Net/Power Platform
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 593
    Points : 34 249
    Points
    34 249
    Par défaut
    Salut,

    en pointant sur la shape, il te suffit de travailler avec

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    oShp.Fill.ForeColor.RGB = RGB(0,255,0)
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Mars 2017
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2017
    Messages : 6
    Points : 6
    Points
    6
    Par défaut
    Bonjour Jean-Philippe André,

    J'ai fais quelques essais avec ton code mais je ne parvient pas à avoir un résultat satisfaisant.

    Pourrais-tu me détailler un peu ta solution ?

    Merci d'avance

  4. #4
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Déjà je t'avais donnée le code que tu montre et ne sais pas l'adapter pour autre chose.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
        For i = 1 To .AllNodes.Count
            With .AllNodes(i).Shapes
                If .Fill.ForeColor = 255 Then
                    Feuil1.Cells(j, 2) = .TextFrame2.TextRange.Text
                    j = j + 1
                End If
            End With
        Next i
    C'est si difficile d'apprendre?
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Mars 2017
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2017
    Messages : 6
    Points : 6
    Points
    6
    Par défaut
    Bonjour Mercatog,

    Malgré de nombreux essais je n'ai jamais réussi à réaliser un code qui fonctionne.

    On ne trouve que très peu d'informations sur les macros de SmartArt sur internet.

    De plus, l'enregistreur de Macro n'est d'aucunes aide puisqu'il n'enregistre rien lorsqu'on modifie la mise en forme des SmartArt.

    En réalisant des essais j'étais arrivé à un résultat ressemblant à ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    Sub testsmart2()
    Dim SA As SmartArt
    Dim i As Integer
    Dim j As Long
     
    Set SA = Worksheets("9S 061").Shapes(1).SmartArt
    j = 26
    With SA
        For i = 1 To .AllNodes.Count
            With .AllNodes(i).TextFrame2.TextRange
     
     
                If SA.AllNodes(i).Shapes.Fill.BackColor.RGB = RGB(255, 0, 0) Then
                    Worksheets("9S 061").Cells(j, 3) = .Text
                    j = j + 1
                End If
            End With
        Next i
    End With
    Set SA = Nothing
    End Sub
    Cependant je suppose que BackColor ne correspond pas à la couleur de remplissage des formes car le code ne fonctionnait que lorsque je modifiais la couleur BackColor via VBA.

    Bref j'ai posté sur le forum car je ne parvenais pas à trouver de solution tout seul.

    Un grand merci à toi pour cette nouvelle aide.

    de m'aider dans mon apprentissage

  6. #6
    Inactif  

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2012
    Messages
    4 904
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4 904
    Points : 10 168
    Points
    10 168
    Billets dans le blog
    36
    Par défaut
    Bonjour,

    Smartart a une propriété color


    Et puis SmartArt n'a pas de collection, ni de propriété allnodes()

    Donc, ta boucle :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    For i = 1 To .AllNodes.Count
            With .AllNodes(i).TextFrame2.TextRange
    *
    *
                If SA.AllNodes(i).Shapes.Fill.BackColor.RGB = RGB(255, 0, 0) Then
                    Worksheets("9S 061").Cells(j, 3) = .Text
                    j = j + 1
                End If
            End With
        Next i
    Ne peut pas marcher

    C'est impossible d'avoir :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Smartart.allnodes.count
    ou

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Smartart.AllNodes(i).Shapes.Fill.BackColor.RGB
    À ma connaissance, le seul personnage qui a été diagnostiqué comme étant allergique au mot effort. c'est Gaston Lagaffe.

    Ô Saint Excel, Grand Dieu de l'Inutile.

    Excel n'a jamais été, n'est pas et ne sera jamais un SGBD, c'est pour cela que Excel s'appelle Excel et ne s'appelle pas Access junior.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2010] Excel - Extraire le texte d'un SmartArt avec VBA
    Par maximelocatelli dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 11/05/2017, 08h38
  2. afficher la barre de menus complète avec vba
    Par jejestyle dans le forum Access
    Réponses: 7
    Dernier message: 07/09/2006, 18h07
  3. Ouvrir un document Excel en READ ONLY (avec VBA)
    Par beegees dans le forum Access
    Réponses: 2
    Dernier message: 29/12/2004, 20h48
  4. Créer un formulaire avec VBA ?
    Par Jean Bonnisme dans le forum VBA Access
    Réponses: 3
    Dernier message: 14/10/2004, 10h40
  5. problème avec VBA
    Par Delph dans le forum Langage
    Réponses: 2
    Dernier message: 19/08/2002, 13h15

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo