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écution d'une procédure à partir d'un SpinButton [XL-2007]


Sujet :

Macros et VBA Excel

  1. #1
    apt
    apt est déconnecté
    Membre éclairé
    Inscrit en
    Mai 2002
    Messages
    867
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 867
    Par défaut Exécution d'une procédure à partir d'un SpinButton
    Bonsoir à tous,

    En K1, j'ai la formule suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =DATEVAL("01/" & O1 & "/" & P1)+(M1*3)
    O1 = 5 (mois en cours)

    P1 = 2013 (Année en cours)

    Quand j'incrémente d'un pas un SpinButton sur la feuille, la date en K1 change et un code VBA s'exécute à l'évènement SpinButton1_Change :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Private Sub SpinButton1_Change()
        With Me.SpinButton1
            .LinkedCell = Range("M1").Address
            .SmallChange = 1
            .Max = 10
            .Min = 0
            .PrintObject = False
            If .Value > 0 And .Value <= 10 Then
                'Call Procédure
            End If
        End With
    End Sub
    Mais voila, j'ai un souci :

    A l'ouverture du classeur, la cellule liée $M$1 affiche un zéro 0 et la date en K1 affiche le 01/05/2013, mais le code n'est pas exécuté.

    Si j'actionne le SpinButton, le code sera exécuté avec en K1 la date du 04/05/2013.

    Mais j'ai besoin de le faire fonctionner avec la date du 01/05/2013.

    Comment faire pour que le code se lancera à cette date ?

    Merci d'avance.

  2. #2
    Membre Expert
    Homme Profil pro
    retraité
    Inscrit en
    Mars 2013
    Messages
    885
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2013
    Messages : 885
    Par défaut execution d'une procédure à partir de SpinButton
    bonjour,

    le probème, je pense, ne vient pas de ton bout de code qui ne fait rien de particulier, mais plutôt de celui auquel tu renvoies et que tu ne présente pas.

    cordialement

  3. #3
    apt
    apt est déconnecté
    Membre éclairé
    Inscrit en
    Mai 2002
    Messages
    867
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 867
    Par défaut
    Bonjour nibledispo,

    Quand le SpinButton change, la cellule liée M1 change de valeur et le code de la procédure est exécuté.

    Le problème vient quand la valeur minimum du contrôle, qui est 0, est affichée.

    La on ne capte pas un changement et le code n'est pas exécuté.

    J'aimerais résoudre ce problème.

  4. #4
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Vous pouvez utilisez les événements SpinUp ou SpinDown plutôt que Change.

    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
     
    Private Sub SpinButton1_SpinUp()
     
        With Me.SpinButton1
            .LinkedCell = Range("M1").Address
            .SmallChange = 1
            .Max = 10
            .Min = 0
            .PrintObject = False
            If .Value > 0 And .Value <= 10 Then
               ' Call Procedure
               ' MsgBox (Range("M1"))
            End If
        End With
    End Sub
     
     
    Private Sub SpinButton1_SpinDown()
     
        With Me.SpinButton1
            .LinkedCell = Range("M1").Address
            .SmallChange = 1
            .Max = 10
            .Min = 0
            .PrintObject = False
            If .Value >= 0 And .Value < 10 Then
              '  Call Procedure
              '  MsgBox (Range("M1"))
            End If
        End With
    End Sub
    Cordialement.
    Dernière modification par Invité ; 25/05/2013 à 05h57.

  5. #5
    apt
    apt est déconnecté
    Membre éclairé
    Inscrit en
    Mai 2002
    Messages
    867
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 867
    Par défaut
    Bonjour Eric,

    J'ai essayé ton code proposé, mais voila la date en K1 ne change pas, parce qu'elle repose sur les valeurs de M1 que tu m'as demandé de l'enlever comme cellule liée.
    Fichiers attachés Fichiers attachés

  6. #6
    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 173
    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 173
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Je ne sais pas j'ai saisi l'ensemble de ton projet.
    Si le SpinButton se trouve sur la feuille du classeur où se trouve la cellule liée, il n'y a pas besoin de code VBA.
    Après avoir dessiné le SpinButton, tu cliques sur la commande Propriétés qui se trouve dans le groupe Contrôle de l'onglet [Développeur] (Il faut vérifier au préalable que le Mode Creation soit bien activé (même groupe).
    Tu modifies la propriété LinkedCell en lui donnant comme valeur M1.
    Tu peux également modifier les propriétés Min et/ou Max.
    Ensuite tu décoches le Mode Création et en cliquant les flèches du SpinButton la date va s'incrémenter ou l'inverse (avec la formule que tu as écrites)
    [EDIT]
    Je constate que tu multiplies par 3 la valeur de M1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =DATEVAL("01/" & O1 & "/" & P1)+(M1*3)
    en donnant à la propriété SmallChange la valeur 3, tu auras un incrémentation ou décrémentation de 3 dans la cellule cible.
    J'aurais utilisé la fonction DATE plutôt que DATEVAL mais ce n'est pas très important
    ou si la date doit être incrémentée par rapport à la date du jour.
    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

  7. #7
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Tu dois faire référence à mon premier message. Je l'ai effacé pour le remplacer rapidement avec l'actuel.

    Je ne comprends pas ta question, ton code fonctionne normalement. La cellule K1 évolue bien avec le spin bouton.

    Cordialement.

  8. #8
    apt
    apt est déconnecté
    Membre éclairé
    Inscrit en
    Mai 2002
    Messages
    867
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 867
    Par défaut
    Bonjour Philippe,

    Le SpinButton fonctionne normalement, et à chaque fois que la cellule liée change de valeur, la date en K1 change.

    Et pour chaque date renvoyé par la formule en K1, un code est exécuté (Le SpinButton me sert pour déclencher l'exécution du code)

    Jusque là par de problème.

    Ce qui me souci, c'est quand la valeur de M1 est égal à zéro est affichée (Valeur par défaut). Là il n'y a pas d’exécution de code.

    Voila !

    EDIT :

    Je ne comprends pas ta question, ton code fonctionne normalement. La cellule K1 évolue bien avec le spin bouton.
    Effectivement, seulement pour la valeur 0, ma procédure n'est pas exécutée (Il n'y a pas d’événement SpinButton à capturer).

  9. #9
    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 173
    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 173
    Billets dans le blog
    53
    Par défaut
    Bonjour,

    Comme je l'ai expliqué dans ma réponse, dans ton cas nul besoin de code VBA.
    Il suffit de modifier les propriétés du SpinButton et si tu souhaites que M1 commence à 1, il faut modifier la propriété MIN.
    Toutefois en sauvant ton classeur la valeur contenue dans M1 sera préservée
    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

  10. #10
    apt
    apt est déconnecté
    Membre éclairé
    Inscrit en
    Mai 2002
    Messages
    867
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 867
    Par défaut
    Bonjour,

    Modifications apportés au code :

    - Attribution des propriétés du SpinButton depuis le mode création.

    - Ajout du signe "=" pour prendre en considération la valeur "0" de la cellule liée M1.

    - Comme les deux procédures SpinUp et SpinDown ont le même codage, j'ai réutilisé l'événement SpinButton1_Change

    Le code est devenu :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Sub SpinButton1_Change()
        With Me.SpinButton1
            If .Value >= 0 And .Value <= 10 Then
                Call MaProcédure
            End If
        End With
    End Sub
    Un commentaire ?

  11. #11
    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 173
    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 173
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Je changerais simplement cette ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    If .Value >= 0 And .Value <= 10 Then
      Call MaProcédure
    End If
    Par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If .Value >= 0 And .Value <= 10 Then MaProcédure
    La condition peut tenir sur une seule ligne et évite ainsi le End If et le Call n'est pas obligatoire, tu peux invoquer une procédure directement par son nom
    Mais si la propriété MIN vaut 0 et MAX vaut 10 il n'y a pas lieu de faire le test.
    Il y aurait lieu de savoir aussi ce que fait la procédure nommée MaProcédure parce-que s'il s'agit d'une recherche par rapport à la valeur contenue entre 0 et 10 il est probable que cela peut-être réglé par des fonctions natives d'excel (INDEX, DECALER, RECHERCHEV etc...) et donc plus besoin de code VBA.
    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

  12. #12
    apt
    apt est déconnecté
    Membre éclairé
    Inscrit en
    Mai 2002
    Messages
    867
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 867
    Par défaut
    Re,

    Merci Philippe.

    Si je devrais choisir entre la toupie (Contrôle Formulaire) et la toupie (Contrôle ActiveX), laquelle entre les deux est plus praticable ?

    Parce que j'ai remarqué une lenteur quand à l'exécution du code avec le SpinButton, je ne sais pour quel raison ?

  13. #13
    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 173
    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 173
    Billets dans le blog
    53
    Par défaut
    Bonour,

    La toupie (Contrôle Formulaire) peut avoir également des comportements curieux comme par exemple sauter les pas (un clic générant 3 pas, voir plus).
    Je l'utilise avec un agenda pour parcourir les semaines.
    Je n'ai pas vraiment d'expérience suffisante pour savoir lequel est plus performant que l'autre mais je trouve curieux cette lenteur. Il faudrait voir ce que la procédure appelée fait comme travail.
    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

  14. #14
    apt
    apt est déconnecté
    Membre éclairé
    Inscrit en
    Mai 2002
    Messages
    867
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 867
    Par défaut
    Avec la même procédure (Création d'un tableau modèle dans une feuille "Modèle", le copier en trois fois, dans une autre feuille, l'un au dessus de l'autre et enfin remplissage de ces derniers), Il n'y avait cette lenteur avant (J’utilisais la toupie contrôle formulaire), mais depuis que j'utilisais le SpinButton pour avoir l’événement SpinButton1_Change (Peut-être une coïncidence), je ne cesse de remarquer cette lenteur ...

  15. #15
    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 173
    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 173
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Encore une fois je ne sais pas ce que ta procédure appelée exécute comme code mais pour ma part, j'utilise les fonctions d'excel avec les boutons formulaires ou ActiveX en utilisant la cellule cible comme paramètre.
    Ainsi pour mon agenda, je pars de la date du jour et avec le ScrollBar (formulaire), j'avance d'1 semaine (changement de pas) ou 4 semaines (Changement de page) et c'est quand ma souris reste sur la flèche que l'avancement de pas continue.
    Tu pourrais te passer du code VBA si la valeur de la cellule cible est le numéro de colonne ou de ligne à déplacer voir de mois, d'année etc...
    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

  16. #16
    apt
    apt est déconnecté
    Membre éclairé
    Inscrit en
    Mai 2002
    Messages
    867
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 867
    Par défaut
    Bonjour,

    Merci Philippe.

    Je vais essayé de chercher le problème ailleurs.

    Merci pour vos tous.


  17. #17
    Membre Expert
    Inscrit en
    Octobre 2010
    Messages
    1 401
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 401
    Par défaut
    A mettre dans ThisWorkBook pour que le code s'exécute à l'ouverture du classeur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub Workbook_Open()
     
     Call procédure
     
    End Sub

  18. #18
    apt
    apt est déconnecté
    Membre éclairé
    Inscrit en
    Mai 2002
    Messages
    867
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 867
    Par défaut
    Bonjour Docmarti,

    Citation Envoyé par Docmarti Voir le message
    A mettre dans ThisWorkBook pour que le code s'exécute à l'ouverture du classeur :
    Je ne peux le faire, parce que j'ai besoin de mettre à jour d’autres données dans le reste du classeur, et qui sont nécessaires pour le lancement du code dans le SpinButton.

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

Discussions similaires

  1. [XL-2003] Exécution d'une procédure SQL Server à partir d'Excel en VBA
    Par Peanut dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 23/09/2011, 16h14
  2. Exécution d'une requête à partir d'un shell
    Par Spyco dans le forum Oracle
    Réponses: 3
    Dernier message: 15/03/2006, 10h58
  3. Accès non autorisé à l'exécution d'une procédure stockée
    Par celine33 dans le forum Bases de données
    Réponses: 6
    Dernier message: 11/01/2006, 10h27
  4. [VB6] Durée d'exécution d'une procédure
    Par Invité dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 17/10/2005, 14h51
  5. Réponses: 15
    Dernier message: 08/07/2004, 08h20

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