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 :

Insérer bouton dans une cellule et lancer macro avec l'adresse de la cellule


Sujet :

Macros et VBA Excel

  1. #1
    Membre régulier
    Homme Profil pro
    Ingénieur Logistique
    Inscrit en
    Octobre 2013
    Messages
    104
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Logistique
    Secteur : Transports

    Informations forums :
    Inscription : Octobre 2013
    Messages : 104
    Points : 97
    Points
    97
    Par défaut Insérer bouton dans une cellule et lancer macro avec l'adresse de la cellule
    Bonjour à tous,

    j'ai une demande un peu particulière, voilà je souhaite utiliser une macro qui a besoin de récupérer l'adresse de la cellule dans laquelle se trouverait le bouton.
    Sachant que je souhaite mettre le bouton dans autant de case que nécessaire.

    En gros, il faudrait pouvoir sur une selection mettre un bouton dans chaque cellule de la selection, un peu comme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for each cellule in Selection
        cells = button.new
    next cellule
    Mais il faudrait associer une seule macro à chaque bouton et que le bouton, si c'est possible renvoie son adresse à la macro qu'il démarre.

    C'est peut-être un peu compliqué, mais si vous avez des idées qui peuvent m'orienter, je devrais réussi à bidouiller un peu tout ça.
    Merci d'avance de vos éclairages par avance,


    Phifou

  2. #2
    Membre régulier
    Homme Profil pro
    Ingénieur Logistique
    Inscrit en
    Octobre 2013
    Messages
    104
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Logistique
    Secteur : Transports

    Informations forums :
    Inscription : Octobre 2013
    Messages : 104
    Points : 97
    Points
    97
    Par défaut
    Bon, je me rend bien compte que ce n'est pas facile, alors j'ai eu une autre idée qui me semble plus réalisable :

    Une macro mets des boutons sur l'emplacement de cases sélectionnée et leur donne comme nom systématiquement l'adresse de la case sélectionnée. Ensuite on récupère dans la macro le nom du bouton et on en déduit l'adresse (théorique du bouton) : le fichier ne devant pas être soumis à de trop grandes modifications, ça devrait aller.

    Toutefois, savez vous comment récupérer les distances des bords de la case par rapport aux marges afin d'en déduire la position de l'emplacement du bouton ?

  3. #3
    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,

    C'est assez simple avec un bouton ActiveX qui a la propriété "TopLeftCell" qui retourne l'adresse de la cellule se trouvant sous l'angle haut et gauche comme son nom l'indique mais attention à ce que le bouton soit bien plalcé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Private Sub CommandButton1_Click()
     
        MsgBox Me.CommandButton1.TopLeftCell.Address
     
    End Sub
    Hervé.

  4. #4
    Membre régulier
    Homme Profil pro
    Ingénieur Logistique
    Inscrit en
    Octobre 2013
    Messages
    104
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Logistique
    Secteur : Transports

    Informations forums :
    Inscription : Octobre 2013
    Messages : 104
    Points : 97
    Points
    97
    Par défaut
    Ouah c'est trop beau !!! Merci beaucoup !!

    Maintenant j'aurais besoin de savoir comment connaître les positions de mes cellules : c'est à dire la distance aux marges (même si je ne suis pas sur de savoir quelle est l'unité). Donc j'aurais besoin de connaitre la position physique et non l'adresse des cellules.

    Donc déjà merci beaucoup pour ces informations !!! (+1 ) et merci pour la suite par avance,


    Phifou

  5. #5
    Invité
    Invité(e)
    Par défaut
    Salut,

    Essaie ceci:
    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
    Sub Test()
        Const S_TEXT = " pixels logique"
        Const INDEX_CMD_BTN = "CommandButton1" 'ou 1 pour l'index
        Const NOM_FEUILLE = "Feuil1"
     
        With ThisWorkbook.Worksheets(NOM_FEUILLE).OLEObjects(INDEX_CMD_BTN)
            .Left = .Parent.Columns("B").Left 'Coin supérieur gauche aligné au niveau de la colonne "B"
            .Top = .Parent.Rows(2).Top 'Coin supérieur gauche aligné sur la ligne n°2
            .Width = 120 '120 pixels @ 72 ppp => 240 pixels @ 144 ppp
            .Height = 40 '40 pixels @ 72 ppp => 80 pixels @ 144 ppp
     
            MsgBox "Gauche: " & .Left & S_TEXT & vbNewLine & _
                   "Haut: " & .Top & S_TEXT & vbNewLine & _
                   "Largeur: " & .Width & S_TEXT & vbNewLine & _
                   "Gauche: " & .Height & S_TEXT & vbNewLine
        End With
    End Sub
    Ça te donnera une idée pour récupérer les coordonnées de tes boutons. Pour passer de pixels physique aux pixels logique, il faut connaitre le nombre de points par pouce que tu as paramétré sous Windows.
    Dernière modification par Invité ; 14/02/2014 à 21h28.

  6. #6
    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,

    Un petit test avec l'ajout dynamique d'un bouton, configuration de certaines de ses propriétés (pour le fun) et affichage des positions de la cellule et du bouton l'un par rapport à l'autre (elles sont les mêmes) Attention, la construction sera effective une fois le code terminé donc, après le MsgBox :
    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
     
    Sub Test()
     
        Dim Fe As Worksheet
        Dim Ctrl As OLEObject
        Dim Btn As MSForms.CommandButton
        Dim Cel As Range
     
        Set Fe = Worksheets("Feuil1")
        'cellule D6
        Set Cel = Fe.Cells(6, 4)
     
        'si un second test, détruit le premier bouton
        On Error Resume Next
        Fe.OLEObjects("MonBouton").Delete
        On Error GoTo 0
     
        'crée un bouton sur la cellule D6 de deux fois sa hauteur et deux fois sa largeur
        Set Ctrl = Fe.OLEObjects.Add("Forms.CommandButton.1", , , , , , , Cel.Left, Cel.Top, Cel.Width * 2, Cel.Height * 2)
     
                'affecte l'OLEobject à l'objet CommandButton afin d'utiliser certaines
                'de ses propriétés comme ici, "Caption", "ForeColor", "Font", etc...
                Set Btn = Ctrl.Object
     
                With Btn
     
                    .Name = "MonBouton"
                    .Caption = "Bouton pour Phifou"
                    .ForeColor = &HC00000
     
                    With .Font
                        .Size = 12
                        .Bold = True
                    End With
     
                End With
        'affiche les positions des deux (cellule et bouton, ce sont les mêmes)
        MsgBox "Left de la cellule : " & Cel.Left & vbCrLf & _
               "Top de la cellule : " & Cel.Top & vbCrLf & vbCrLf & _
               "Left du bouton : " & Btn.Left & vbCrLf & _
               "Top du bouton : " & Btn.Top
     
    End Sub
    En jouant avec les Offsets des cellules, tu peux connaître la positions des cellules que tu vise :
    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 Test()
     
        Dim Cel As Range
     
        Set Cel = Cells(6, 4) 'cellule D6
     
        'en jouant avec les Offsets on trouve les positions :
        With Cel
     
            'ici la cellule A6
            MsgBox "Top : " & Cells(6, .Offset(0, -.Column + 1).Column).Top & vbCrLf & _
                   "Left : " & Cells(6, .Offset(0, -.Column + 1).Column).Left
     
            'ici la cellule B2
            MsgBox "Top : " & Cells(.Offset(-.Row + 2, 0).Row, .Offset(0, -.Column + 2).Column).Top & vbCrLf & _
                   "Left : " & Cells(.Offset(-.Row + 2, 0).Row, .Offset(0, -.Column + 2).Column).Left
     
        End With
     
    End Sub
    Hervé.

Discussions similaires

  1. [XL-2003] Insérer une photo à l'aide d'un bouton dans une cellule fusionnée
    Par iIncoming dans le forum Excel
    Réponses: 7
    Dernier message: 18/03/2013, 18h08
  2. affecter une macro à un bouton dans une feuille
    Par gu000 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 31/10/2007, 14h04
  3. Réponses: 15
    Dernier message: 13/03/2007, 17h25
  4. JTable : comment insérer un bouton dans une cellule ?
    Par donyas dans le forum Composants
    Réponses: 2
    Dernier message: 08/08/2006, 15h54
  5. Mettre un bouton dans une cellule !!!!
    Par mehdi82 dans le forum Composants
    Réponses: 2
    Dernier message: 22/11/2005, 09h51

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