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 :

associer des liens hypertexte par macro


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    139
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 139
    Points : 61
    Points
    61
    Par défaut associer des liens hypertexte par macro
    Bonjour à tous,
    Sur un classeur j'ai:
    feuille 1 sur laquelle sont disposées des images
    image 1
    image 2
    image 3
    image 4

    feuille 2 sur laquelle le nom et le libellé des images
    image 1 rouge
    image 2 bleu
    image 3 jaune
    image 4 vert

    feuille 3 sur laquelle le libellé résultant de l'association des images

    1+2 violet
    2+1 marron
    1+3 orange
    2+3 vert foncé

    en cliquant sur l'image 1 et ensuite sur l'image 2 je voudrais recopier

    les résultats des associations des images sur une feuille 4 les uns à la

    suite des autres.
    Exemple clic image 1 et image 3
    clic image 1 et image 2
    clic image 2 et image 1
    Résultat sur feuille 4
    orange
    violet
    marron
    les résultats dépendent toujours du sens du clic.

    J'ai fait des liens hypertxt pour chaque cellules avec les cellules des

    autres feuilles, mais je suis obligé de cliquer plusieurs fois pour

    obtenir le résultat final.
    J'aimerai avoir un code pour faire cette opération en cliquant simplement

    sur les deux images associées et ainsi de suite pour les autres.

    merci d'avance pour votre aide.
    Bob

  2. #2
    Expert éminent
    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
    Points : 6 871
    Points
    6 871
    Par défaut
    Bonjour,

    Je suppose ici que les contrôles "Images" sont des ActiveX afin de pouvoir gérer les évènements "Click" :
    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
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    Private Sub Image1_Click()
     
        AfficherCouleur 1
     
    End Sub
     
    Private Sub Image2_Click()
     
        AfficherCouleur 2
     
    End Sub
     
    Private Sub Image3_Click()
     
        AfficherCouleur 3
     
    End Sub
     
    Private Sub Image4_Click()
     
        AfficherCouleur 4
     
    End Sub
     
    Sub AfficherCouleur(Index As Integer)
     
        Dim PlageAssos As Range
        Dim Cel As Range
        Dim Couleur As String
     
        'variables statique pour l'appairage
        Static Pos As Integer
        Static Img1 As Integer
        Static Img2 As Integer
     
        'si les deux variables ont déjà été initialisées, les remet à 0
        If Img1 <> 0 And Img2 <> 0 Then Img1 = 0: Img2 = 0
     
        'incrémente pour l'appairage
        Pos = Pos + 1
     
        'affecte l'index en fonction de la position ordinale de l'image dans la paire
        If Pos = 1 Then Img1 = Index
        If Pos = 2 Then Img2 = Index
     
        'si la paire est constituée :
        If Pos = 2 Then
     
            'remet à 0 pour la prochaine paire
            Pos = 0
     
            'défini la plage pour la recherche de la couleur
            With Worksheets("Feuil3")
     
                Set PlageAssos = .Range(.Cells(1, 1), .Cells(.Rows.Count, 1).End(xlUp))
     
            End With
     
            'boucle sur la plage à la recherche de la paire et récupère le nom de la couleur
            'Attention, les valeurs doivent être entrées comme dans l'exmple --> 2+3 vert foncé
            For Each Cel In PlageAssos
     
                If Img1 = Left(Cel, 1) And Img2 = Mid(Cel, 3, 1) Then
                    Couleur = Right(Cel, Len(Cel) - InStr(Cel, " "))
                    Exit For 'si trouvé, fin de boucle
                End If
     
            Next Cel
     
        End If
     
        'inscrit la couleur en cellule A1, A2 et A3 de "Feuil4"
        'si les trois cellules on été remplies, elles seront vidées pour pouvoir
        'inscrire le prochain trio
        With Worksheets("Feuil4")
     
            If .Range("A1") <> "" And .Range("A2") <> "" And .Range("A3") <> "" Then
     
                 .Range("A1") = "": .Range("A2") = "":  .Range("A3") = ""
     
            End If
     
            If .Range("A1") = "" Then
     
                .Range("A1") = Couleur
                Exit Sub
     
            End If
     
            If .Range("A2") = "" Then
     
                .Range("A2") = Couleur
                Exit Sub
     
            End If
     
            If .Range("A3") = "" Then
     
                .Range("A3") = Couleur
                Exit Sub
     
            End If
     
        End With
     
    End Sub
    Hervé.

    Petite précision,

    Le code donné précédemment est à mettre dans le module de la feuille où se trouvent les images (c'est dans ce module que sont gérés les évènements Click).

    Hervé.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    139
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 139
    Points : 61
    Points
    61
    Par défaut
    Merci hervé pour ta réponse.
    malheureusement je n'ai pas dû être assez clair car le code ne fonctionne pas.
    Le résultat ne s'affiche pas en feuille4.
    Je te rappelle que je veux avoir le résultat de l'association des images en cliquant dessus, exemple clic image 1 rouge et image 3 jaune donne le résultat affiché orange en feuille4.
    Puis sur la ligne suivante violet pour l'association img 1 et 2

    Et ainsi de suite.

    je joins le fichier avec ton code.
    Merci encore bob
    Fichiers attachés Fichiers attachés

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    139
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 139
    Points : 61
    Points
    61
    Par défaut
    salut hervé
    J'ai obtenu un code dont je joins le fichier, ça fonctionne pour 4 images.
    je voudrai le compléter pour une trentaine d'images avec ce que cela comporte de possibilités de résultats.
    Est-ce possible?
    Merci Bob
    Fichiers attachés Fichiers attachés

  5. #5
    Expert éminent
    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
    Points : 6 871
    Points
    6 871
    Par défaut
    Bonjour,

    Je suis repartis du 1er classeur que tu as posté (exemple.xls). Les images doivent être renommées de la façon suivante : Image_1, Image_2, Image_3, etc... Une fois que toutes tes images ont été insérées dans le classeur, tu lance la procédure "ActionImages" afin d'affecter la macro "AfficherCouleur" à OnAction en passant en argument le nombre ou chiffre de l'image situé après le tiret bas, ce dernier doit impérativement se trouver avant le nombre lié à l'image, le nom de l'image important peu. J'ai aussi mis une procédure qui colore la cellule de droite en feuille 4. Les noms de couleur correspondants son entrés en colonne B de feuille 2 et correspondent à ceux se trouvant dans le tableau, si tu veux les garder mais les modifier à ta guise, la modif devra être faite dans la feuille et dans le tableau. Je poste ici les procédures du classeur qui doivent toutes trois se trouver dans un module standard car les images sont des cliparts et non des ActiveX :
    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
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
     
    Public Sub AfficherCouleur(Index As Integer)
     
        Dim PlageAssos As Range
        Dim Cel As Range
        Dim Couleur As String
     
        'variables statique pour l'appairage
        Static Pos As Integer
        Static Img1 As Integer
        Static Img2 As Integer
     
        'si les deux variables ont déjà été initialisées, les remet à 0
        If Img1 <> 0 And Img2 <> 0 Then Img1 = 0: Img2 = 0
     
        'incrémente pour l'appairage
        Pos = Pos + 1
     
        'affecte l'index en fonction de la position ordinale de l'image dans la paire
        If Pos = 1 Then Img1 = Index
        If Pos = 2 Then Img2 = Index
     
        'si la paire est constituée :
        If Pos = 2 Then
     
            Worksheets("Feuil4").Activate
            'remet à 0 pour la prochaine paire
            Pos = 0
     
            'défini la plage pour la recherche de la couleur
            With Worksheets("Feuil3")
     
                Set PlageAssos = .Range(.Cells(1, 1), .Cells(.Rows.Count, 1).End(xlUp))
     
            End With
     
            'boucle sur la plage à la recherche de la paire et récupère le nom de la couleur
            'Attention, les valeurs doivent être entrées comme dans l'exmple --> 2+3 vert foncé
            For Each Cel In PlageAssos
     
                If Img1 = Left(Cel, 1) And Img2 = Mid(Cel, 3, 1) Then
                    Couleur = Cel.Offset(, 1)
                    Exit For 'si trouvé, fin de boucle
                End If
     
            Next Cel
     
        End If
     
        'si la couleur est définie, l'inscrit en colonne A de "Feuil4" à la suite
        If Couleur <> "" Then
     
            With Worksheets("Feuil4")
     
                .Range("A" & .Cells(.Rows.Count, 1).End(xlUp).Row + 1) = Couleur
                Colorer .Range("A" & .Cells(.Rows.Count, 1).End(xlUp).Row) '<-- colore la cellule d'à coté
     
            End With
     
            Couleur = ""
     
        End If
     
    End Sub
     
    Sub Colorer(Cel As Range)
     
        Dim Tbl
        Dim I As Integer
     
        'nom des couleurs (à adpater si ne convient pas !)
        Tbl = Array("NOIR", "BLANC", "ROUGE", "VERT BRILLANT", "BLEU", "JAUNE", _
                    "ROSE", "TURQUOISE", "ROUGE FONCÉ", "VERT", "BLEU FONCÉ", _
                    "MARRON CLAIR", "VIOLET", "BLEU-VERT", "GRIS-25%", "GRIS-50%", _
                    "LAVANDE FONCÉ", "VIOLET-MAUVE", "JAUNE PALE", "BLEU TRÈS CLAIR", _
                    "PRUNE FONCÉ", "SAUMON FONCÉ", "BLEU GRIS", "MAUVE CLAIR", _
                    "BLEU TRÈS FONCÉ", "ROSE FONCÉ", "JAUNE BRILLANT", "TURQUOISE BRILLANT", _
                    "VIOLET BRILLANT", "ROUGE MARRON", "BLEUR-VERT CLAIR", "BLEU BRILLANT", _
                    "BLEU CIEL", "TURQUOISE CLAIR", "VERT CLAIR", "JAUNE CLAIR", "BLEU MOYEN", _
                    "SAUMON", "LAVANDE", "BRUN", "BLEU CLAIR", "VERT D'EAU", "CITRON VERT", _
                    "OR", "ORANGE CLAIR", "ORANGE", "BLEU GRIS", "GRIS-40%", "BLEU-VERT FONCÉ", _
                    "VERT MARIN", "VERT FONCÉ", "VERT OLIVE", "MARRON", "PRUNE", "INDIGO", "GRIS-80%")
     
        For I = 1 To UBound(Tbl)
     
            If Tbl(I) = Cel Then
     
                Cel.Offset(, 1).Interior.ColorIndex = I + 1
     
                Exit Sub
     
            End If
     
        Next I
     
    End Sub
     
    'Cette procédure affecte un appel à la macro "AfficherCouleur"
    'en passant le nombre attaché à l'image en argument
     
    'NOTE : Une fois toutes les images positionnées sur la feuille, cette proc
    'a besoin de n'être exécutée qu'une seule fois
    Sub ActionImages()
     
        Dim action As String
        Dim Img As Shape
        Dim I As Integer
     
        For Each Img In Worksheets("Feuil1").Shapes
     
            If Img.Type = 13 Then
     
                'extrait le numéro de l'image pour le passer en argument à OnAction
                action = "'AfficherCouleur""" & Split(Img.Name, "_")(1) & "'"
     
                Img.OnAction = action
     
            End If
     
        Next Img
     
        Set Img = Nothing
     
    End Sub
    Hervé.
    Fichiers attachés Fichiers attachés

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    139
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 139
    Points : 61
    Points
    61
    Par défaut
    merci hervé pour ton travail,
    j'ai un petit problème pour affecter les macros, ça ne fonctionne pas, lorsque je clique sur la nouvelle image il ne se passe rien.
    j'ai peut-être oublié un lien ou autre.
    Je joins le fichier dans lequel j'ai rajouté une image pour exemple.
    Autre chose je n'ai pas besoin que les cellules prennent la couleur, à la place il va y avoir du texte.
    Merci encore Bob
    Fichiers attachés Fichiers attachés

  7. #7
    Expert éminent
    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
    Points : 6 871
    Points
    6 871
    Par défaut
    Bonjour,

    Il se peut que Excel "décroche" selon les manips effectuées, il te suffit alors de relancer la proc "ActionImages" afin de réaffecter la macro "AfficherCouleur" à OnAction de chaque image.

    Hervé.

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    139
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 139
    Points : 61
    Points
    61
    Par défaut
    salut Hervé, ça marche impec, et je te remercie mille fois pour ton aide.
    A bientôt sur le forum.
    Bob

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

Discussions similaires

  1. [AC-2013] Dossier par défaut des liens hypertexte
    Par rag83 dans le forum IHM
    Réponses: 24
    Dernier message: 18/09/2014, 20h32
  2. [XL-2010] Macro copier des liens hypertexte sur une colonne
    Par zaza45 dans le forum Macros et VBA Excel
    Réponses: 14
    Dernier message: 04/06/2013, 15h30
  3. [OL-2003] Dossier par défaut des liens hypertext
    Par Adri687 dans le forum Outlook
    Réponses: 0
    Dernier message: 17/02/2011, 11h59
  4. Utilisation des Liens hypertextes
    Par lolo_bob2 dans le forum Access
    Réponses: 3
    Dernier message: 26/04/2006, 14h10
  5. Aspect des liens hypertextes
    Par flzox dans le forum Mise en forme
    Réponses: 5
    Dernier message: 04/09/2004, 15h29

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