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 :

garder une valeur de variable d'une procédure à une autre


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 5
    Par défaut garder une valeur de variable d'une procédure à une autre
    Bonjour à tous,

    Sur mon programme, j'ai trois fonctions qui sont les suivantes:


    •sub worksheet_change(Byval target as range) qui effectue une première saisie
    •sub saisie2() qui permet une saisie manuelle des cellules restantes
    •sub calcul() qui effectue les calculs selon les infos précédemment remplies

    Le problème est le suivant:
    j'utilise dans la fonction worksheet_change
    i = Target.Row afin d'avoir la ligne sélectionnée => date_travaux = Range("AV" & i)

    cependant, la valeur de i disparaît dès que je quitte ma fonction sub worksheet_change...
    A quoi celà est dû? puis-je parer ce problème et si oui comment?
    Merci de l'attention et bonne continuation
    Math'

  2. #2
    Expert confirmé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    6 814
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 6 814
    Par défaut
    de deux choses l'une.

    soit tu veux garder i dans ta procédure, même quand tu la quitte. Auquel cas, il te faut déclarer i en static au début de ta procédure :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Sub worksheet_change(ByVal target As Range)
    Static i As Long
    (.../...)code
    soit tu veux que i se balade d'une procédure à l'autre en gardant toujours sa valeur, auquel cas il faut la déclarer en variable globale, une seule fois, hors des procedures(en général en haut) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Public i As Long
    Sub MaProcedure......

  3. #3
    Expert confirmé Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Par défaut
    Bonjour,
    1 - Déclares i en "public" en haut d'un module de base

    2 - Dans l'évènement change, target représente la cellule sélectionnée et dont la valeur a changé, donc à manier avec précaution, si tu ne mets pas de conditions.
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur :resolu: si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 5
    Par défaut infos
    ma déclaration est ainsi faite:
    Public i, saisie As Integer
    Dim reference, energie, zone, activite As String

    ensuite j'utilise ma procédure:
    sub Worksheet_Change(ByVal Target As Range)
    i = target.row

    du coup, i prend la valeur de ma cellule sélectionnée à chaque fois que l'action se déroule.

    ma deuxième procédure est:
    Sub ok_Click()
    R = Range("BH" & i).Value
    If reference = "BAR-EN-01" Then
    a = 12
    End If
    prime = cumac * 0.015
    Range("BJ" & i).Value = cumac
    End Sub

    si je sélectionne ma cellule afin de définir une données, mon "i" prendra la valeur de la ligne affectée à la cellule ( ce que je recherche). cependant, lorsque j'ai fini ma saisie, je souhaite utiliser cette même ligne pour continuer à remplir certaines cellules manuellement en amenant l'utilisateur sur la cellule à l'aide d'un focus et une fois les cellules concernées remplies, je voudrais effectuer les calculs à l'exemple de la procédure: ok_click.
    ne devrais-je pas utiliser des "function" qui, elles, renvoient une valeur?
    La fameuse valeur de i ne se sauvegarde pas du worksheet à ok_click, mais les procédures ne renvoient pas de valeurs, c'est peut-être le pourquoi du comment?

  5. #5
    Expert confirmé Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Par défaut
    re,
    excuses-moi mais je ne comprends pas trop,

    si ton évènement "change ne contient que cette ligne,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Sub Worksheet_Change(ByVal Target As Range)
    i = Target.Row
    End Sub
    ce code est inutile, il vaut mieux passer la valeur dans :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Sub ok_Click()
    i = ActiveCell.Row
    R = Range("BH" & i).Value
    If reference = "BAR-EN-01" Then
       a = 12
    End If
    prime = cumac * 0.015
    Range("BJ" & i).Value = cumac
    End Sub
    mais je n'ai peut-être pas tout saisi.
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur :resolu: si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

Discussions similaires

  1. Réponses: 2
    Dernier message: 18/11/2012, 11h25
  2. [Spip] Récupérer une valeur de variable
    Par o_live dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 2
    Dernier message: 04/06/2007, 17h29
  3. [POO] Passer une valeur de variable en variable
    Par hugo69 dans le forum Langage
    Réponses: 8
    Dernier message: 23/11/2006, 23h48
  4. Réponses: 1
    Dernier message: 14/06/2006, 17h53
  5. Réponses: 8
    Dernier message: 21/04/2006, 18h18

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