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

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 5
    Points : 2
    Points
    2
    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 éminent sénior
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    6 803
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 6 803
    Points : 32 065
    Points
    32 065
    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......
    Les 4 règles d'airain du développement informatique sont, d'après Michael C. Kasten :
    1)on ne peut pas établir un chiffrage tant qu'on a pas finalisé la conception
    2)on ne peut pas finaliser la conception tant qu'on a pas complètement compris toutes les exigences
    3)le temps de comprendre toutes les exigences, le projet est terminé
    4)le temps de terminer le projet, les exigences ont changé
    Et le serment de non-allégiance :
    Je promets de n’exclure aucune idée sur la base de sa source mais de donner toute la considération nécessaire aux idées de toutes les écoles ou lignes de pensées afin de trouver celle qui est la mieux adaptée à une situation donnée.

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

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

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Points : 9 548
    Points
    9 548
    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 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
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 5
    Points : 2
    Points
    2
    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 éminent Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Ardennes (Champagne Ardenne)

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

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Points : 9 548
    Points
    9 548
    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 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...)

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

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

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Points : 9 548
    Points
    9 548
    Par défaut
    C'est bien ce que je pensais, tu n'as pas que cette instruction dans l'évènement change et c'est peu dire .

    tu n'as pas mis de condition pour les valeurs de i ou de j, donc dans l'évènement change (que j'avais précisé, délicat à manier) dès qu'un calcul ou une saisie a lieu dans une autre cellule, i ou j prennent sa valeur et le code recommence, j'espère être clair.

    ton code est trop long à lire, tu as du t'amuser mais perso, je ne pourrais pas t'aider car rien que cette fonction me parait bizarre et dépasse mes comptétences ;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Public Function Worksheet_Change(ByVal Target As Range) As String
    je connais l'évènement ;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Worksheet_Change(ByVal Target As Range)
    mais ça s'arrête là, je suis désolé.

    Bon courage et bon weed-end studieux
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur 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...)

  7. #7
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 5
    Points : 2
    Points
    2
    Par défaut re
    effectivement j'ai mis pas mal de temps mais c'est surtout la galère une fois que le code est finit et que ça ne marche pas je pense devoir utiliser une fonction plutôt que la procédure car celle renvoit une valeur à une variable alors que la procédure non... cependant, l'écriture reste tout de même moins évidante à faire qu'à dire ^^ je pioche sur le morceau pi je donne des newz si personne ne trouve de solution avant moi :/ en tout cas merci pour ton aide ça me fixe au moins sur le problème

    bonne continuation

    Math'

    ps: toute autre info est la bienvenue

  8. #8
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 5
    Points : 2
    Points
    2
    Par défaut pb résolu
    J'ai pris mon courage à deux mains. J'ai réunis toutes les infos que j'ai pu obtenir sur les forums et j'ai réussis à obtenir ma valeur de i ^^
    je join le fichier pour les interessés

    Il y a encore des erreurs que je ne maîtrise pas tout à fait, en cas de correction tenez moi informé

    Merci et bonne continuation

    Math'
    Fichiers attachés Fichiers attachés

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