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 :

Problème Fonction SI [XL-2007]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Licence Professionnelle : Maintenance en milieu Nucléaire
    Inscrit en
    Avril 2013
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Licence Professionnelle : Maintenance en milieu Nucléaire
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2013
    Messages : 10
    Par défaut Problème Fonction SI
    Bonjour à tous !

    Je viens encore vers vous car une autre problématique est survenue lors de la création de mon programme.

    Il s'agit d'un calcul InterUSF, je m'explique :

    J'ai 2 USF différentes pour 2 feuilles différentes, sauf que un calcul préliminaire doit être effectué (3e USF qui est commune au deux).

    Je cherche à vouloir faire en sorte que le résultat du calcul s'affiche sur la USF correspondante, en gros :

    Si je viens de USF 1, la résultat de USF 3 s'affiche dans la textbox 1 de USF 1
    et si je viens de USF 2, le résultat de USF 3 S'affiche dans la textbox de USF 2

    Je pense que c'est un code en fonction si, mais je ne sais pas le faire pour mettre en relation les 3 USF en même temps.

    Pouvez vous m'aider s'il vous plait ?

    Voici mon programme :
    http://dl.free.fr/gBYfkGVHg


    USF 1 : parametrecollective
    USF 2 : parametreindividuelle
    USF 3 : Calcul KS

  2. #2
    Membre Expert
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    1 186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 1 186
    Par défaut
    Bonsoir,

    Les dépendances que tu souhaites établir entre USF doivent être pensé dans le sens inverse.
    C'est les USF parametrecollective et parametreindividuelle qui affiche la USF calculks.
    Il suffit d'ajouter une fonction public dans calculks qui retourne le résultat de cette USF.
    Il ne restera plus à parametrecollective et parametreindividuelle qu'à appeller cette fonction après la ligne. calculks.Show.
    De cette manière, comme c'est la USF affichant calculks qui demande le résultat,
    plus de problème pour savoir où afficher le résultat.

    exemple de fonction public à mettre dans USF calculks :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Public Function GetResult() As String
        GetResult = TextBox1.Text
    End Function
    exemple de code à mettre dans USF parametrecollective et parametreindividuelle :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ...
        calculks.Show
        TextBox1.Text = calculks.GetResult
    ...

  3. #3
    Membre Expert
    Inscrit en
    Octobre 2010
    Messages
    1 401
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 401
    Par défaut
    Je confirme qu'il s'agit du parfait exemple qui permet d'utiliser une fonction dans Userform3 qui recoit une valeur, effectue un calcul et retourne un résultat à l'expéditeur.

    Ainsi par exemple, Userform2 envoie une VALEUR à une fonction de Userform3 qui s'appelle CalculEffectuerDansUserform3, fonction qui retourne un RESULTAT à l'expéditeur, Userform2 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Sub TextBox2_Change()
     
     valeur = UserForm2.TextBox2.Value
     resultat = UserForm3.CalculEffectuerDansUserform3(valeur)
     UserForm2.TextBox1.Value = resultat
     
    End Sub
    Idem pour Userform1 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Sub TextBox2_Change()
     
     valeur = UserForm1.TextBox2.Value
     resultat = UserForm3.CalculEffectuerDansUserform3(valeur)
     UserForm1.TextBox1.Value = resultat
     
    End Sub
    Et la fonction qui se trouve dans Userform3 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Public Function CalculEffectuerDansUserform3(valeurRecue)
     
    CalculEffectuerDansUserform3 = valeurRecue * 100
     
    End Function

  4. #4
    Membre averti
    Homme Profil pro
    Licence Professionnelle : Maintenance en milieu Nucléaire
    Inscrit en
    Avril 2013
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Licence Professionnelle : Maintenance en milieu Nucléaire
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2013
    Messages : 10
    Par défaut
    Je comprend un peu la logique de votre raisonnement mais je n'arrive pas à le mettre en pratique. Je pense que je ne suis pas assez précis.

    Voici ma USF 1 ou 2

    Si j'ai pas la valeur direct du Ks, je vais le calculer.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    ' Aller au calcul de ks '
    Private Sub Calcul_Click()
    Parametrecollective.Hide
    calculks.Show
    End Sub
    Voici ma USF 3

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub valider_Click()
    KS = CDbl(TextBox1.Value) / (CDbl(TextBox2.Value) + CDbl(TextBox3.Value))
    calculks.Hide
    ParametreIndividuel.Show
    End Sub

  5. #5
    Membre Expert
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    1 186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 1 186
    Par défaut
    Bonjour,

    Comme dit précédemment, il faut revoir la façon dont les USF communiquent entre elles.

    1) Lorsqu'on appelle la méthode Show/Hide depuis une USF, il est inutile de préciser son nom. C'est même source de problème, puisque si on renomme
    l'USF, le code ne fonctionne plus tant que le code n'est pas mis à jour.

    2) Par défaut, la méthode Show d'une USF est un appel avec le paramètre modal fixé à vbModal.
    Ce qui veut dire que le code qui suit calculks.Show ne s'exécute qu'après que l'USF calculks soit fermée ou masquée.

    Pour reprendre l'exemple du post 16h05 :
    le code de USF 1 et 2 devient

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Private Sub Calcul_Click()
      Hide
      calculks.Show
      Show
      TextBoxKs.Text = calculks.GetResultat 
    End Sub
    et USF 3

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private Sub valider_Click()
       KS = CDbl(TextBox1.Value) / (CDbl(TextBox2.Value) + CDbl(TextBox3.Value))
       Hide
    End Sub
     
    Public Function GetResultat() as Double
        GetResultat = KS 
    End Function

  6. #6
    Membre averti
    Homme Profil pro
    Licence Professionnelle : Maintenance en milieu Nucléaire
    Inscrit en
    Avril 2013
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Licence Professionnelle : Maintenance en milieu Nucléaire
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2013
    Messages : 10
    Par défaut
    Je viens de faire ce que tu ma dit de faire !

    Aucune erreur de code n'est détecter, cependant le résultat ne s'affiche pas dans la Textbox :s

    Nan mais, je dois vraiment être mauvais, car je ne comprend pas pourquoi on met :

    TextBoxKs.Text = calculks.GetResultat au niveau de la commande pour partir justement sur le calcul.

    J'upload mon fichier avec t'es modifications. Sinon c'est pas grave, je vais essayer de m'y prendre autrement. Je suis blasé de pas comprendre ce que vous me dites.

    http://dl.free.fr/jtvuVFCRQ

  7. #7
    Membre Expert
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    1 186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 1 186
    Par défaut
    je ne comprend pas pourquoi on met :
    TextBoxKs.Text = calculks.GetResultat au niveau de la commande pour partir justement sur le calcul.
    Le calcul est déjà fait à l'appel de calculks.GetResultat.
    On ne fait que récupérer le résultat mémorisé dans la variable KS.

    Ci-dessous une explication ligne par ligne de ce qui se passe de façon chronologique :
    -ParametreCollective::CommandButton3_Click::Hide ' masque la USF.
    -ParametreCollective::CommandButton3_Click::calculks.Show 'affiche la USF de calcul de KS. 'effectue le calcul du KS dans la USF calculKS
    -calculKS::valider_Click():: KS = CDbl(TextBox1.Value) / (CDbl(TextBox2.Value) + CDbl(TextBox3.Value) 'mémorise le résultat dans KS.
    -calculKS::valider_Click()::Hide() ' masque la USF calculKS
    ' met à jour le text dans l'USF ParametreCollective depuis le résultat calculé dans calculks et mémorisé dans KS.
    -ParametreCollective::CommandButton3_Click::TextBoxKs.Text = calculks.GetResultat.
    Rend visible l'USF ParametreCollective
    -ParametreCollective::CommandButton3_Click::Show().

    Pour que ça fonctionne, effectue les corrections suivantes :
    1)calculks
    en haut du fichier calculks: ajoute :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim KS As Double ' stocke le résultat du calcul du KS.
    2)ParametreCollective
    Modifie l'ordre du Show et de la mise à jour du résultat dans les USF ParametreCollective (pour ParametreIndividuel il faut renommer le composant TextBox1 en TextBoxKs)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Private Sub CommandButton3_Click()
      Hide 
      calculks.Show
      TextBoxKs.Text = calculks.GetResultat
      Show
    End Sub

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

Discussions similaires

  1. Problème : Fonctions et commande Execute
    Par bubi dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 15/11/2005, 11h01
  2. Problème fonction SDL
    Par seeme dans le forum SDL
    Réponses: 2
    Dernier message: 06/11/2005, 20h22
  3. Problème fonction PL/SQL
    Par SSJ17Vegeta dans le forum PL/SQL
    Réponses: 2
    Dernier message: 29/10/2005, 21h14
  4. Problème fonction et trigger sous 7.2
    Par anoukhan dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 22/06/2005, 22h53
  5. Réponses: 2
    Dernier message: 20/08/2004, 17h10

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