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 :

Manipulation sélection dynamique de formes [XL-2010]


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
    Étudiant
    Inscrit en
    Septembre 2015
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2015
    Messages : 2
    Par défaut Manipulation sélection dynamique de formes
    Bonjour,


    Je réalise une carte du monde qui doit permettre de visualiser quel partenaire est responsable de quel pays. Il y a donc plusieurs pays (une centaine), et plusieurs responsables (une vingtaine). Dans mon tableur, les pays sont des formes issues de D-maps (mais pour l'exemple j'ai juste mis des rectangles ici).

    Pour qu'il soit facile de savoir graphiquement qui s'occupe de quelle zone j'ai un code couleur qui colorie les pays en fonction du responsable en charge.

    Le soucis est que je ne sais pas comment colorier un ensemble de formes qui est amené à changer. Je pourrais faire une ligne de code par forme, mais ce serait trop long pour une centaine de pays.

    Je souhaite donc savoir comment faire en sorte que tous les pays qui répondent à la condition responsable="Louis" soient automatiquement coloriés en orange, tous ceux répondant à la condition responsable="Matthieu" soient coloriés en rouge, etc.

    Jusqu'ici j'ai ça, mais ce n'est pas du tout dynamique :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Worksheets("PAYS").Shapes.Range(Array("BRESIL", "ARGENTINE")).Fill.ForeColor.RGB = RGB(245, 180, 15)
    Voilà le type de fichier sur lequel je suis amené à travailler.


    D'avance merci, parce que là, je bloque !


    Cordialement,



    Martin.


    MAPEMONDE.xlsmMAPEMONDE.xlsm

  2. #2
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 171
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 171
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Une idée parmi d'autres.
    La liste des pays dans une plage à une colonne nommée T_Pays dont chaque cellule est colorée en fonction du responsable.
    Procédure à adapter avec une table à plusieurs colonnes dont l'une contiendrait par exemple le nom du responsable qui permettrait d'aller chercher dans une autre table la couleur correspondante par responsable avec éventuellement une Mise en forme conditionnelle.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Sub ColorCountry()
     Dim shpe As Shape, rng As Range
     Set rng = Range("T_Pays")
     For Each shpe In Worksheets("Pays").Shapes
      On Error Resume Next
      shpe.Fill.ForeColor.RGB = rng(WorksheetFunction.Match(shpe.Name, rng, 0)).Interior.Color
      On Error GoTo 0
     Next
    End Sub
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  3. #3
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Par défaut
    Bonjour,

    Un peu dans le même esprit que Philippe mais en utilisant tes tableaux dynamiques :
    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
     
    Sub Test()
     
        Dim PlageNoms As Range
        Dim PlagePays As Range
        Dim Cel As Range
        Dim CelCherche As Range
        Dim Fe As Worksheet
     
        Set Fe = Worksheets("PAYS")
     
        Set PlagePays = Fe.ListObjects(1).DataBodyRange
        Set PlageNoms = Fe.ListObjects(2).DataBodyRange
     
        For Each Cel In Fe.Range(PlagePays.Columns(2).Address)
     
            Set CelCherche = PlageNoms.Find(Cel.Value, , xlValues, xlWhole)
     
            If Not CelCherche Is Nothing Then
     
                Select Case CelCherche.ListObject.HeaderRowRange(CelCherche.Column - PlageNoms.Column + 1).Value
     
                    Case "Louis": Fe.Shapes(Cel.Value).Fill.ForeColor.RGB = RGB(245, 180, 15)
     
                    Case "Matthieu": Fe.Shapes(Cel.Value).Fill.ForeColor.RGB = RGB(255, 125, 100)
     
                    'Case etc...
     
                End Select
     
            End If
     
        Next Cel
     
    End Sub
    Selon le nombre de responsables, peut être utiliser un tableau stockant les valeurs RGB et attribuer ces dernières de façon ordinale :
    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
     
    Sub Test()
     
        Dim PlageNoms As Range
        Dim PlagePays As Range
        Dim Cel As Range
        Dim CelCherche As Range
        Dim Fe As Worksheet
        Dim Index As Integer
     
        Dim Tbl
     
        Tbl = Array(&H80FF&, &HFF00FF, &HFF00&) 'correspondant de façon ordinale aux responsables
     
        Set Fe = Worksheets("PAYS")
     
        Set PlagePays = Fe.ListObjects(1).DataBodyRange
        Set PlageNoms = Fe.ListObjects(2).DataBodyRange
     
        For Each Cel In Fe.Range(PlagePays.Columns(2).Address)
     
            Set CelCherche = PlageNoms.Find(Cel.Value, , xlValues, xlWhole)
     
            If Not CelCherche Is Nothing Then
     
                Index = CelCherche.ListObject.HeaderRowRange(CelCherche.Column - PlageNoms.Column + 1).Column - 13
     
                Fe.Shapes(Cel.Value).Fill.ForeColor.RGB = Tbl(Index)
     
            End If
     
        Next Cel
     
    End Sub

  4. #4
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2015
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2015
    Messages : 2
    Par défaut
    Vos solutions fonctionnent parfaitement !

    Merci beaucoup !

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

Discussions similaires

  1. [VBA-E] Sélection dynamique
    Par strifer dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 22/08/2006, 10h13
  2. créer dynamiquement une form
    Par paolo2002 dans le forum Delphi
    Réponses: 5
    Dernier message: 11/07/2006, 14h15
  3. Création dynamique de forms & multi-écran
    Par ArkSquall dans le forum Langage
    Réponses: 14
    Dernier message: 09/05/2006, 09h36
  4. Sélection dynamique de champs
    Par nirousse dans le forum Outils
    Réponses: 3
    Dernier message: 02/05/2006, 19h24
  5. [D7] Création dynamique de Form
    Par jer64 dans le forum Composants VCL
    Réponses: 3
    Dernier message: 03/08/2003, 12h20

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