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 :

Incrémenter sur une variable après un UnloadUserform [XL-2013]


Sujet :

Macros et VBA Excel

  1. #1
    Membre chevronné
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 369
    Par défaut Incrémenter sur une variable après un UnloadUserform
    Bonjour, depuis quelques heures je suis bloqué sur ce code. Je n'arrive pas à automatiquement incrémenter "+1" à la variable "A" lorsque je clique sur le bouton "Addition". En somme, je souhaiterai que si j'appuie sur le bouton "Addition" n-fois, ma "Test2.Caption" soit égale à "A + n"

    Ceci est un code à part, car il ferait partie intégrante d'un code beaucoup plus long.

    Merci Beaucoup de votre aide ! (J'ai testé avec le "A=A+1" dans le PS Addition_Click, ça ne change rien.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Dim A As Integer
    Private Sub Addition_Click()
        Unload UserForm2
        UserForm2.Show
        A = A + 1
    End Sub
    Private Sub Test_Click()
        Test2.Caption = A
    End Sub
    Private Sub UserForm_Initialize()
        A = 1
    End Sub

  2. #2
    Membre éprouvé
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2015
    Messages
    78
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Aube (Champagne Ardenne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2015
    Messages : 78
    Par défaut
    si tu veux que test2 change à chaque fois que tu cliques sur Addition autant le mettre directement dans Addition_click

    un truc comme ça :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Private Sub Addition_Click()
        Unload UserForm2
        UserForm2.Show
        Test2.Caption = A +1
    End Sub

    par contre vu que tu Unload l'userform me semble que ça vide toutes les données à chaque fois dont le A

  3. #3
    Membre chevronné
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 369
    Par défaut
    Ce serait plutôt un code comme ça finalement, puisque c'est une Variable à laquelle je veux incrémenter la valeur +1.

    Le problème, c'est que vu qu'elle est déjà initialisée à 7, j'ai beau la changer en 8 via le "Addition_Click()" , elle reprendra automatiquement la Valeur 7 puisque je l'ai définie ainsi.

    C'est là que je ne vois pas comment faire puisque j'ai vraiment besoin d'initialiser ma valeur à 7, mais je veux chaque fois que je clique sur le bouton "Addition"il s'y ajoute "1".

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Dim A As Integer
     
    Private Sub UserForm_Initialize()
    A = 7
    End Sub
     
    Private Sub Addition_Click()
    A = A + 1
    Unload UserForm1
    UserForm1.Show
    End Sub
    Quand tu unload le UserForm ça supprime toutes les données des objets, mais ne supprime pas les déclarations de variables.

  4. #4
    Membre chevronné
    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    181
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2011
    Messages : 181
    Par défaut
    Bonjour à tous,

    Il faudrait utiliser plutôt l'instruction Hide que Unload, car cette dernière ferme le formulaire au lieu de le masquer qui fait qu'à la nouvelle instruction Show tu repasses par la procédure Initialize.

  5. #5
    Membre chevronné
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 369
    Par défaut
    Du coup avec la fonction .Hide, ça ignorera la partie "UserForm_Initialize()" et déroulera le reste ?

  6. #6
    Membre chevronné
    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    181
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2011
    Messages : 181
    Par défaut
    Pas tout à fait :
    Au 1er affichage du Formulaire par l'instruction Show, la procédure Initialize sera lancée.
    Ensuite avec Hide, le formulaire est masqué et les variables et controls conservent leurs valeurs. les affichages suivants par Show ne passent plus par la Sub Initialize puisque que le formulaire est resté en mémoire.

  7. #7
    Invité
    Invité(e)
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    static A As Integer
     
    Private Sub UserForm_Initialize()
    A = 7
    End Sub
     
    Private Sub Addition_Click()
    A = A + 1
    Unload UserForm1
    UserForm1.Show
    End Sub

  8. #8
    Membre chevronné
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 369
    Par défaut
    Dois-je obligatoirement mettre le "Option explicit" ? (dans mon cas je l'ai mis)

    Je n'arrive pas à mettre le "static" ça me dit qu'il y a une erreur de compilation.

  9. #9
    Invité
    Invité(e)
    Par défaut
    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
    dim A As Integer
     Function autolncrement(optional valeur as string="") as integer
    Static B as integer
    If valeur<>"" then B= cint(valeur) Else B= B + 1
    autoIncrement = B
    End function
     
     
     
    Private Sub UserForm_Initialize()
    Static bool as booleant
    If bool =false then bool = True : autoIncrement cstr(7)
    End Sub
     
    Private Sub Addition_Click()
    A = autoOncrement
    Unload UserForm1
    UserForm1.Show
    End Sub

  10. #10
    Expert confirmé
    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
    Par défaut
    Bonjour,

    J'ai un peu de peine à comprendre réellement ce que tu veux !*
    Si tu veux qu'à chaque ouverture la variable soit initialisée à 7, c'est bien dans "UserForm_Initialize" et si sur chaque clic du bouton tu veux une incrémentation (depuis la valeur 7) alors c'est dans "Addition_Click", la variable devant être accessible à c'est deux procédures évènementielles, elle doit être déclarée en tête de 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
     
    Dim A As Integer
     
    Private Sub Addition_Click()
     
        A = A + 1
        Test2.Caption = A
     
    End Sub
     
    Private Sub UserForm_Initialize()
     
        A = 7
        Test2.Caption = A
     
    End Sub
    Maintenant, si tu veux que cette variable conserve sa valeur quand tu ferme ta Form (Unload) pour pouvoir être à nouveau utiliser (et ceci bien sûr sans que le classeur soit fermé), il te faux la déclarer non pas dans le module de la Form mais "Public" en tête d'un module standard :
    dans le module standard :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Public A As Integer
    Il te suffit alors dans "UserForm_Initialize" de vérifier sa valeur, si elle est inférieure à 7 alors non initialisé et sa valeur passe à 7 sinon on y touche pas et on affiche sa valeur mémorisée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    Private Sub Addition_Click()
     
        A = A + 1
        Test2.Caption = A
     
    End Sub
     
    Private Sub UserForm_Initialize()
     
        If A < 7 Then A = 7
        Test2.Caption = A
     
    End Sub

  11. #11
    Membre chevronné
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 369
    Par défaut
    Mon code fonctionne désormais, je n'ai pas utilisé la fonction unload, j'ai juste préféré créer une fonction afin de réinitialiser les données des objets souhaités.

    Je vous remercie à tous pour votre aide !

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

Discussions similaires

  1. [XSLT] Faire une boucle sur une variable [i]
    Par PoT_de_NuTeLLa dans le forum XSL/XSLT/XPATH
    Réponses: 8
    Dernier message: 07/06/2010, 12h45
  2. Opération sur une variable
    Par pcdj dans le forum Linux
    Réponses: 2
    Dernier message: 29/10/2005, 20h02
  3. Réponses: 2
    Dernier message: 23/10/2005, 18h05
  4. Ajouter un listener sur une variable
    Par serwol dans le forum Général Java
    Réponses: 4
    Dernier message: 14/10/2005, 15h39
  5. [Débutant] Probleme d'incrémentation d'une variable
    Par sakuragikan dans le forum ASP
    Réponses: 2
    Dernier message: 25/08/2005, 13h11

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