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 :

Exécuter une macro avec une touche du clavier


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Inscrit en
    Mars 2010
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 63
    Points : 44
    Points
    44
    Par défaut Exécuter une macro avec une touche du clavier
    Bonjour à tous,

    j'expose mon problème : j'ai une macro qui crée un nombre de lignes en fonction d'une valeur entrée dans une cellule. J'ai donc une cellule où je demande à l'utilisateur de rentrer un nombre, puis il clique sur un bouton de commande et les lignes apparaissent en-dessous. Cela marche tres bien.

    Mais est-il possible d'éviter le passage par ce bouton de commande, et qu'en appuyant simplement sur Entrée après avoir écrit le nombre dans la cellule les lignes apparaissent? En gros, éxecuter une macro avec une touche du clavier.

    Merci d'avance pour vos réponses !

  2. #2
    Membre émérite Avatar de Fvandermeulen
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2007
    Messages
    1 869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 869
    Points : 2 662
    Points
    2 662
    Par défaut
    Salut,
    Tu peux faire en sorte que la macro se déclenche dès que la cellule est modifiée, c'est un évènement sur feuille.

    Fais un click droit sur ton onglet et ensuite Voir code (ou un truc du genre, je suis en anglais), là tu te retrouve dans le module de feuille.
    En sélectionnant Worksheet dans la liste de gauche (en haut), tu as la possibilité de choisir entre différents évènement dans la liste de droite.

    Pour ton cas, c'est l'évènement Change, qui se déclenche quand une cellule est modifiée, la cellule modifiée est liée à la variable Target.
    Si dans ton cas, l'utilisateur entre le nombre de ligne en A1, voici le code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Address <> "$A$1" Then Exit Sub
     'colle ici ton code actuel qui ajoute les lignes
     
    End Sub
    A+

  3. #3
    Membre du Club
    Inscrit en
    Mars 2010
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 63
    Points : 44
    Points
    44
    Par défaut
    Merci, ça marche parfaitement !

    Il y a autre chose que j'aurais aimé faire, je te demande ton avis, sans vouloir abuser

    Ma macro me crée donc 3 lignes si l'utilisateur rentre 3 dans sa cellule. Mais imaginons qu'il se soit trompé, et qu'il veut en mettre 4 par exemple. Il va donc taper 4 dans la cellule, et 4 nouvelles lignes se créent. Mais ces dernieres s'ajoutent aux 3 précedentes... On a donc 7 lignes...

    Alors comment fair pour que les X lignes précedentes s'effacent en cas de nouvelle acquisition dans la cellule? Je commence à y reflechir, mais si tu as une idée (ou quelqu'un d'autre ) je suis evidemment preneur.

    En tout cas merci encore pour ta réponse !

  4. #4
    Membre émérite Avatar de Fvandermeulen
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2007
    Messages
    1 869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 869
    Points : 2 662
    Points
    2 662
    Par défaut
    Re,
    Dis nous en plus sur le but final de ton fichier, il entre un nombre de ligne, si il ne se trompe pas que ce passe t'il ?
    Il saisi des données sur les lignes crées et ensuite ?
    Aussi, qu'appelles tu création de ligne ?
    A+

  5. #5
    Membre du Club
    Inscrit en
    Mars 2010
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 63
    Points : 44
    Points
    44
    Par défaut
    Re

    oui exactement, une fois les lignes créées, l'utilisateur peut les remplir.
    J'ai joint un petit visuel pour illustrer cela :

    A gauche, la feuille de calcul au début.
    A droite, l'utilisateur a rentré 2 villes, et 2 lignes qu'il va pouvoir remplir sont créées (en vérité 1 ligne supplémentaire est toujours créée, avec les noms des différentes catégories - la ligne d'entête). Cette création de lignes décale les autres rubriques vers le bas.
    Et voila le problème, si l'utilisateur rentre 2 villes, puis veut en ajouter une autre, 3 lignes supplémentaires sont créées... Avec en + une nouvelle ligne d'entête à chaque fois...

    J'espère que mon problème est plus clair maintenant, merci !
    Images attachées Images attachées  

  6. #6
    Membre émérite Avatar de Fvandermeulen
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2007
    Messages
    1 869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 869
    Points : 2 662
    Points
    2 662
    Par défaut
    Re,

    Quel est la cellule dans laquelle tu entre le nombre de ville ?

    Une fois les cellules bleues remplies, que ce passe t'il?
    Comment la feuille est-elle réinitialisée?

    Désolé de poser ces questions mais c'est pour trouver la solution la plus adéquoite

    A+

  7. #7
    Membre du Club
    Inscrit en
    Mars 2010
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 63
    Points : 44
    Points
    44
    Par défaut
    Re,

    le nombre de villes est entré dans la cellule D1. Il faut voir que la partie droite de mon image correspond à ce qu'il se passe apres avoir rentré ce nombre, je l'ai mis sur la même feuille pour bien illustrer mon problème, mais il n'y a normalement rien qui apparait à cet endroit.

    Une fois les cellules bleues remplies il ne se passe rien, l'utilisateur rentre le nombre d'équipes (puis apparition de lignes bleues qu'il remplie, puis de même pour nombre de joueurs). Eventuellement il pourrait y avoir une macro qui une fois toutes les cellules bleues remplies selectionne directement la cellule où l'utilisateur rentre le nombre d'équipes, mais ce n'est pas la priorité pour le moment^^

    Par contre je ne comprend pas ce que tu veux dire par "Comment la feuille est-elle réinitialisée?". Tu veux dire si on redemarre à 0? Dans ce cas il faut que les lignes bleues et oranges disparaissent, et que seules les lignes jaunes restent.

    J'espère avoir bien répondu à tes questions, n'hesite surtout pas à demander d'autres précisions si nécessaire

    Merci

    Edit : J'avais une idée, mais je ne sais pas si elle est applicable : à la fin de ma macro, je donne à une variable X la valeur du nombre de lignes créées. Au tout début de ma macro, je demande de supprimer X lignes, puis le reste du code de création de lignes est exécuté. Cela permet de faire un genre de "re-boot" à chaque nouvelle utilisation de la macro. Le problème c'est que je ne sais pas si la macro peut se "souvenir" de la variable X d'une utilisation à une autre... A mediter, je continue mes recherches!

  8. #8
    Membre émérite Avatar de Fvandermeulen
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2007
    Messages
    1 869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 869
    Points : 2 662
    Points
    2 662
    Par défaut
    Citation Envoyé par RussellD Voir le message
    ...
    J'espère avoir bien répondu à tes questions, n'hesite surtout pas à demander d'autres précisions si nécessaire...
    Ben non pas vraiment, j'ai bien compris que tu as mis les deux sur une feuille pour l'exemple, ce que je veux savoir c'est l'ensemble de la procédure pour ton fichier.
    L'utilisateur complète toutes les données et puis quoi, il "sauve sous", il ferme sans sauver, il click sur un bouton pour alimenter une base de données,... ?

    Que je parle de réinitialisation, je veux dire: Je suis l'utilisateur, j'ai saisi les informations dans les cellules bleues, comment puis-je revenir à la situation initiale (partie de gauche sur ton exemple)? En fait ce qui pourrait correspond à la suite de ta procédure.

    C'est pour bien comprendre, car la solution la plus simple pourrait ne pas convenir...

    Sans quoi, voici quand même un exemple, l'idée est de balayer les lignes, si le code couleur (à vérifier selon ton cas réel) correspond au bleu on supprime, si c'est orange on supprime ainsi que la ligne précédente:
    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
    Private Sub Worksheet_Change(ByVal Target As Range)
    Dim DerLig As Long, r As Long
     
     
    If Target.Address <> "$D$1" Then Exit Sub
     
        DerLig = ActiveSheet.Cells(Columns(1).Cells.Count, 1).End(xlUp).Row
        For r = DerLig To 1 Step -1
            If Cells(r, 1).Interior.ColorIndex = 44 Then
                Rows(r - 1 & ":" & r).Delete
            ElseIf Cells(r, 1).Interior.ColorIndex = 8 Then
                Rows(r).Delete
            End If
        Next r
        'Le code pour ajouter les lignes
     
    End Sub

  9. #9
    Membre du Club
    Inscrit en
    Mars 2010
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 63
    Points : 44
    Points
    44
    Par défaut
    Re,

    En fait l'exemple que j'ai donné n'était qu'à titre indicatif. J'avais donné cela car je n'étais pas encore totalement sur de ce que je voulais. Mais en gros, j'élabore une feuille de calcul pour effectuer le bilan thermique d'un bâtiment, donc cela ressemblerait à cela (voir doc joint)

    L'utilisateur rentre les données demandées, et le calcul des déperditions thermiques se fait dans la derniere cellule. Il fait ça pour chaque parois, puis pour chaque pont thermiques et enfin pour chaque bassins. Au final, la valeur des déperditions totales du bâtiment s'affiche. C'est cela la finalité de cette feuille de calcul.
    J'aurais du donner ça directement plutot que de passer par un autre exemple, désolé..

    Que je parle de réinitialisation, je veux dire: Je suis l'utilisateur, j'ai saisi les informations dans les cellules bleues, comment puis-je revenir à la situation initiale (partie de gauche sur ton exemple)? En fait ce qui pourrait correspond à la suite de ta procédure.
    C'est là tout mon problème, je ne sais pas comment faire disparaitre les lignes déja créées, notamment si l'utilisateur change le nombre de parois en cours de route.

    Concernant les couleurs c'etait là aussi à titre indicatif. Il est probable qu'au final chaque cellule d'une même ligne puisse avoir une couleur différente. Il est donc difficile de supprimer les lignes en se référant au code couleur...

    J'espere avoir été plus complet cette fois-ci, merci d'avance.
    Images attachées Images attachées  

  10. #10
    Membre émérite Avatar de Fvandermeulen
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2007
    Messages
    1 869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 869
    Points : 2 662
    Points
    2 662
    Par défaut
    Re,
    Vu comme ça j'aurais, si tu veux un truc sympa, utilisé un UserForm.
    Sinon, pour faire simple, j'aurais mis les intitulés en lignes et les données sur les colonnes, ça t'évite de devoir ajouter/supprimer des lignes.
    Toujours pour faire simple, tu peux garder la colonne A pour faire la somme des colonnes remplies. Je dis simple car dans ce cas pas besoin de VBA, juste les formules adéquoites.

    A+
    Images attachées Images attachées  

Discussions similaires

  1. Réponses: 1
    Dernier message: 13/04/2015, 11h17
  2. Déplacer une courbe avec les touches du clavier
    Par juliette78 dans le forum MATLAB
    Réponses: 7
    Dernier message: 20/03/2014, 11h51
  3. [XL-2003] Désactiver une macro avec une macro
    Par Sibuxian dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 29/10/2010, 00h54
  4. [XL-2002] Macro de comparaison d'une cellule d'une feuille avec une cellule d'une autre feuille.
    Par steelydan dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 08/09/2010, 12h59
  5. Réponses: 4
    Dernier message: 15/10/2009, 13h33

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