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 :

Créer des noms de variables


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 57
    Points : 34
    Points
    34
    Par défaut Créer des noms de variables
    Bonjour à tous,

    je suis en train d'optimiser la gestion des raccourcis d'une petite application réalisée sous Excel/VBA.

    C'est simple, lorsque l'utilisateur appuie sur CTRL + touche du pavé numérique de 0 --> 9, le n° correspondant à la courbe s'affiche ou non dans un graphique.

    Ctrl + 1 => courbe n°1 affichée ou désactivée.

    Pour alléger mon code je voudrais passer en paramètre le n° de courbe/touche appuyé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Dans THIS WORKBOOK / OPEN
    Application.OnKey "^{96}", "ctrl_pavenum(0)"
    Application.OnKey "^{97}", "ctrl_pavenum(1)"
    Application.OnKey "^{98}", "ctrl_pavenum(2)"
    Application.OnKey "^{99}", "ctrl_pavenum(3)"
    ...
    Application.OnKey "^{106}", "ctrl_pavenum(9)"
    Dans mon module :
    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
     
    Public Sub ctrl_pavenum(lng) ' Paramètre passé : lng
     
    Select Case lng
        Case 0: val_bool_chk = Feuil2.chk_s0.Value
        Case 1: val_bool_chk = Feuil2.chk_s1.Value
        Case 2: val_bool_chk = Feuil2.chk_s2.Value
        Case 3: val_bool_chk = Feuil2.chk_s3.Value
        Case 4: val_bool_chk = Feuil2.chk_s4.Value
        Case 5: val_bool_chk = Feuil2.chk_s5.Value
        Case 6: val_bool_chk = Feuil2.chk_s6.Value
        Case 7: val_bool_chk = Feuil2.chk_s7.Value
        Case 8: val_bool_chk = Feuil2.chk_s8.Value
        Case 9: val_bool_chk = Feuil2.chk_s9.Value
    End Select
     
    Select Case val_bool_chk
        Case True: val_bool_chk = False
        Case False: val_bool_chk = True
    End Select
    Cependant, celà ne fonctionne pas car j'obtiens le message "Impossible de trouver la macro 'ctrl_pavenum(1)'. Peut-être est-ce tout simplement pas possible ?

  2. #2
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 29
    Points : 37
    Points
    37
    Par défaut
    Hello,

    Je n'ai pas regardé le code, mais ne manquerait-il pas :


    A placer à la fin.

  3. #3
    Membre chevronné Avatar de aalex_38
    Inscrit en
    Septembre 2007
    Messages
    1 631
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 631
    Points : 1 999
    Points
    1 999
    Par défaut
    Les codes pour 0 a 9 ne sont-ils pas ceux-ci

    48 0
    49 1
    50 2
    51 3
    52 4
    53 5
    54 6
    55 7
    56 8
    57 9


    Pour le moment, je n'arrive pas a passer le paramètre à la fonction.
    En attendant, j'ai essayé ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Sub Workbook_Open()
    Application.OnKey "^{48}", "ctrl_pavenum"
    Application.OnKey "^{49}", "ctrl_pavenum"
    Application.OnKey "^{50}", "ctrl_pavenum"
    Application.OnKey "^{51}", "ctrl_pavenum"
     
    End Sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Sub ctrl_pavenum()
     
      MsgBox "c'est ca"
     
    End Sub
    Il reste donc a passer le paramètre, je regarde et je reviens.

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 57
    Points : 34
    Points
    34
    Par défaut
    Bonjour aalex_38, effectivement j'ai oublié de copier le End Sub dans le message, mais il est bien dans mon code. Donc le soucis, n'est pas à ce niveau là.

  5. #5
    Membre chevronné Avatar de aalex_38
    Inscrit en
    Septembre 2007
    Messages
    1 631
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 631
    Points : 1 999
    Points
    1 999
    Par défaut
    As-tu vraiment lu mon message ?

    Bon toujours pas de paramètre mais une solution de contournement :

    Pourquoi ne pas faire une macro par touche CTRL

    Avec

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private Sub Workbook_Open()
    Dim j As Integer
     
    For I = 0 To 9
        j = 48 + I
        Application.OnKey "^{" & j & "}", "ctrl_pavenum" & I
    Next
    End Sub
    Et dans ton module, les macros correspondantes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Sub ctrl_pavenum0()
    MsgBox "ca marche"
    End Sub
     
    Sub ctrl_pavenum1()
    MsgBox "ca marche aussi"
    End Sub
    .
    .
    .

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 57
    Points : 34
    Points
    34
    Par défaut
    Bonjour aalex_38, effectivement je n'avais pas vu que tu n'étais pas l'auteur de la première réponse ;-)

    J'ai adopté le code que tu as proposé, ce qui me fait l'économie de plusieurs lignes, merci. J'aurais vraiment souhaité passé des paramètres à la procédure, mais visiblement ce n'est pas possible ?

  7. #7
    Membre chevronné Avatar de aalex_38
    Inscrit en
    Septembre 2007
    Messages
    1 631
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 631
    Points : 1 999
    Points
    1 999
    Par défaut
    Franchement je ne sais pas si c'est possible, pour l'instant je n'ai pas trouvé...

  8. #8
    Membre éclairé

    Profil pro
    Inscrit en
    Mai 2007
    Messages
    514
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 514
    Points : 824
    Points
    824
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    'Dans un module standard
    Sub ctrl_pavenum(KeyCode As Integer)
        MsgBox KeyCode
    End Sub
     
    'Dans ThisWorkbook
    Private Sub Workbook_Open()
        Dim j As Integer, i As Integer
        For i = 0 To 9
            j = 48 + i
            Application.OnKey "^{" & j & "}", "'ctrl_pavenum " & i & "'"
        Next
    End Sub
    Testé sur un PC portable dépourvu de pave numérique, j'ignore si ca fonctionne sur un clavier standard.

    Cordialement,

    Tirex28/

  9. #9
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 57
    Points : 34
    Points
    34
    Par défaut
    Super tirex28, ça marche !

    Encore bravo pour cette solution

    Par pure curiosité, comment expliquer que ça fonctionne avec cette syntaxe ?

  10. #10
    Membre éclairé

    Profil pro
    Inscrit en
    Mai 2007
    Messages
    514
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 514
    Points : 824
    Points
    824
    Par défaut
    Bonjour,

    Par pure curiosité, comment expliquer que ça fonctionne avec cette syntaxe ?
    Il faudrait poser la question aux concepteurs de vba mais c'est le même principe pour les cousines de OnKey:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Sub AvecParametre(p As Long)
        MsgBox p
    End Sub
     
    Sub Test()
        Application.OnTime Now + TimeValue("00:00:01"), "'AvecParametre 1'"
     
        Application.Run "'AvecParametre 2'"
    End Sub
    Bonne journée,

    Tirex28/

  11. #11
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 57
    Points : 34
    Points
    34
    Par défaut
    Je suis de retour, et j'ai une petite question bonus à vous poser !

    J'utilise donc des raccourcis clavier type "ctrl+gauche" pour manipuler facilement des graphiques, est-il possible de restreindre l'utilisation de ces raccourcis claviers à une feuille particulière ?

    Celà permettrait l'usage des raccourcis classiques d'Excel (ctrl+bas pour aller tout en bas par exemple) sur les autres feuilles.

    La solution temporaire en attendant de trouver mieux :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    ThisWorkbook
    ' Déplacement sur x min (ctrl)
    Application.OnKey "^{37}", "ctrl_fleche_gauche" ' Flèche gauche
    Application.OnKey "^{39}", "ctrl_fleche_droite" ' Flèche droite
    ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    ' X MIN -
    Public Sub ctrl_fleche_gauche()
     
    If (ActiveSheet.Name = "Feuil2") Then
        Call x_temps_plus_moins(Feuil2.combo_x1_delta_date_min_max.Value, "min", "moins")
    End if
     
    End Sub
    Le problème est que l'on ne retrouve pas l'usage des raccourcis classiques sur les autres feuilles.

  12. #12
    Membre éclairé

    Profil pro
    Inscrit en
    Mai 2007
    Messages
    514
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 514
    Points : 824
    Points
    824
    Par défaut
    Bonjour,

    Si le graphique est sur sa propre feuille tu peux utiliser ses propres évènements pour gérer tes raccourcis:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    'Dans le module de la feuille graphique
    Private Sub Chart_Activate()
        'Personnalisation des raccourcis
        Application.OnKey "^{37}", "ctrl_fleche_gauche" ' Flèche gauche
    End Sub
     
    Private Sub Chart_Deactivate()
        'Restauration des raccourcis
        Application.OnKey "^{37}" ', "ctrl_fleche_gauche" ' Flèche gauche
    End Sub
    S'il s'agit d'un graphique incorporé à une feuille de calcul tu te sers des évènements de cette feuille:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    'Dans le module de la feuille contenant le graphique:
    Private Sub Worksheet_Activate()
        'Personnalisation des raccourcis
        Application.OnKey "^{37}", "ctrl_fleche_gauche" ' Flèche gauche
    End Sub
     
    Private Sub Worksheet_Deactivate()
        'Restauration des raccourcis
        Application.OnKey "^{37}" ', "ctrl_fleche_gauche" ' Flèche gauche
    End Sub
    Cordialement,

    Tirex28/

  13. #13
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 57
    Points : 34
    Points
    34
    Par défaut
    Merci Tirex, c'est vrai je n'y avais pas pensé. C'est grace à des personnes comme toi qu'on progresse !

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 02/04/2007, 09h56
  2. Créer des noms de variables dynamiquement avec JSP
    Par Zakapatul dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 26/02/2007, 14h24
  3. [Stratégie] Générer des noms de variables
    Par Rekiem dans le forum Général Java
    Réponses: 31
    Dernier message: 09/01/2006, 10h23
  4. [Convention]Préfixage des noms de variables
    Par javaSudOuest dans le forum Langage
    Réponses: 5
    Dernier message: 18/11/2005, 15h52
  5. Generer des noms de variables avec une boucle
    Par moutanakid dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 28/07/2004, 17h45

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