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 :

Modification systématisée des paramètres de formes


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Homme Profil pro
    Humanitaire
    Inscrit en
    Janvier 2017
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Humanitaire

    Informations forums :
    Inscription : Janvier 2017
    Messages : 3
    Par défaut Modification systématisée des paramètres de formes
    Bonjour à tous, et merci d'avance pour votre aide sur ce projet

    J'ai un projet de cartographie de mouvements enregistrés dans une base de données.

    La carte est composée de plusieurs points et chaque liaison possible entre points correspond à un trait (Straight Connector). L'idée est de modifier les paramètres des connecteurs (leur épaisseur) de manière systématisée.

    En gros j'ai un tableau excel qui après traitement ressemble à ça:
    Nom : exemple tableau.jpg
Affichages : 507
Taille : 53,5 Ko

    J'aimerais donc créer une macro qui applique automatique la largeur voulue à chaque connecteur, mais je sèche un peu, notamment sur la boucle qui permet de passer sur tous les connecteurs, ainsi que la manière de récupérer le nom des formes dans excel pour les utiliser dans ma macro en VBA.
    Dans la mesure où tous les connecteurs sont dans la même feuille excel, peut-être y a-t-il moyen de ne conserver que le "numero" du connecteur dans la colonne "Shape name" et réussir à le récupérer dans la macro VBA pour mes actions Sheet3.Shapes("Straight Connector " X).Line.Weight = Y ?

    Merci d'avance pour votre soutien, mon VBA est un peu rouillé et je risque d'y passer des jours ^^

    Bien à vous

  2. #2
    Membre expérimenté Avatar de EBRAG
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Avril 2013
    Messages
    125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Formateur en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2013
    Messages : 125
    Par défaut Epaisseur Connecteur
    Bonjour !

    Ce genre de boucle pourrait-il convenir ? (à adapter bien entendu)

    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
    Sub EpaisseurTrait()
      Dim oShape As Shape
      Dim lNum As Long
      For Each oShape In ActiveSheet.Shapes
        If VBA.InStr(1, oShape.Name, "Connector") >= 1 Then
          lNum = VBA.Right(oShape.Name, VBA.Len(oShape.Name) - VBA.InStr(1, oShape.Name, "Connector") - 9)
          MsgBox oShape.Name & " - " & lNum
          Select Case lNum
            Case 5
              oShape.Line.Weight = 2
            Case 7
              oShape.Line.Weight = 1
            Case 9
              oShape.Line.Weight = 0.5
          End Select
        End If
      Next
    End Sub

    http://garbe.joel.free.fr

  3. #3
    Candidat au Club
    Homme Profil pro
    Humanitaire
    Inscrit en
    Janvier 2017
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Humanitaire

    Informations forums :
    Inscription : Janvier 2017
    Messages : 3
    Par défaut
    Bonjour et merci pour votre message.

    Je pense que j'ai mal formulé mon objectif donc j'ajoute une pj complète.

    J'ai une liste de mouvements possibles (au final il y en aura 90 dans le tableau), chaque mouvement correspond à une forme "Straight Connector" qui lui est attitrée et qui se trouve dans un autre onglet (au final une carte). En fonction du nombre d'occurence des mouvements (qui sera amenée à changer), je veux attribuer une épaisseur au connecteur. L'idée est qu'au final, les mouvements les plus souvent effectués apparaissent plus épais, ceux peu empruntés appraissent très finement sur la map.

    Donc en gros une boucle qui parcourerait tous les mouvements listés dans le tableau, et qui modifieraient l'épaisseur du connecteur lié à chaque mouvement en fonction du nombre de passage.

    Je ne sais pas si c'est très clair, n'hésitez pas à me demander davantage d'informations!

    Encore merci pour votre aide.

    capitainladen
    Fichiers attachés Fichiers attachés

  4. #4
    Membre expérimenté Avatar de EBRAG
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Avril 2013
    Messages
    125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Formateur en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2013
    Messages : 125
    Par défaut
    Voilà le fichier modifié... en espérant avoir compris...
    Exemple Formes.xlsm

    à adapter bien entendu...

  5. #5
    Candidat au Club
    Homme Profil pro
    Humanitaire
    Inscrit en
    Janvier 2017
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Humanitaire

    Informations forums :
    Inscription : Janvier 2017
    Messages : 3
    Par défaut
    Enorme merci EBRAG, c'est exactement ça !

    Pour partager l'info à tous, voici donc la solution proposée par EBRAG:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    Sub EpaisseurTrait()
      Dim oShape As Shape
      Dim lNum As String
      For Each oShape In Worksheets("Connectors").Shapes
        If VBA.InStr(1, oShape.Name, "Connector") >= 1 Then
          lNum = VBA.Right(oShape.Name, VBA.Len(oShape.Name) - VBA.InStr(1, oShape.Name, "Connector") - 9)
     
          oShape.Line.Weight = _
            Application.WorksheetFunction.Index(Worksheets("base").Range("G5:G9"), _
            Application.WorksheetFunction.Match(lNum, Worksheets("base").Range("E5:E9"), 0))
        End If
      Next
    End Sub
    Les cellules G5:G9 font référence à la colonne "Connector Width" de l'image de mon poste initial, soit la largeur souhaitée des traits.
    Les cellules E5:E9 font référence à la colonne "Shape name" retraitée de sorte que seuls le n° de la forme apparaisse (1,2,3, etc.)

    La boucle passe en revue toutes les formes de la feuille, applique une condition pour ne prendre action que sur les formes dont le nom contient "Connector". L'action quant à elle va chercher l'épaisseur correspondant à chaque forme par un INDEX-EQUIV intégré en VBA.

    Encore un grand merci à EBRAG, sujet résolu !

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

Discussions similaires

  1. Modification définitive des paramètres régionaux
    Par chekkal dans le forum API, COM et SDKs
    Réponses: 7
    Dernier message: 14/11/2015, 11h07
  2. Réponses: 4
    Dernier message: 29/03/2009, 21h13
  3. Réponses: 3
    Dernier message: 08/02/2007, 22h14
  4. transmettre des paramètres à une form
    Par sundjata dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 07/08/2006, 19h02
  5. Modification des paramètres régionaux et folders options
    Par Looping_V60 dans le forum Access
    Réponses: 1
    Dernier message: 07/06/2006, 19h02

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