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 :

Associer un résultat d'un calcul à des couples de valeurs


Sujet :

Macros et VBA Excel

  1. #21
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vosges (Lorraine)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2015
    Messages : 20
    Points : 1
    Points
    1
    Par défaut
    Voilà, j'ai effectuer rapidement la copie de mon classeur, je vous l'ai mis en pièce jointe.
    appli.xlsm
    Mais soucis, j'ai remis exactement le même code et mon alpha me donne "0" ...

  2. #22
    Expert éminent

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 071
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 071
    Points : 9 850
    Points
    9 850
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    ton elseif est forcément toujours faux, il faut mettre l'opérateur OR ou alors tu voulais mettre -20 ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    If CDbl(Me.TextBox3) >= 80 And CDbl(Me.TextBox3) <= 100 Then
            alpha = CDbl(Me.TextBox5) * CDbl(Me.TextBox3) / 100
        ElseIf CDbl(Me.TextBox3) >= 20 And CDbl(Me.TextBox3) <= 0 Then
            alpha = CDbl(Me.TextBox5) + ((CDbl(Me.TextBox3) / 100) * CDbl(Me.TextBox5))
    End If
    j'ai opté pour un remplacement par "OR", et ensuite un remplacement de 20 par -20 : ça a fonctionné pour les deux issues

    par ailleurs, ton label est trop petit pour contenir tous tes couples
    j'ai étiré sa hauteur au maximum de ton userform et ça ne suffit pas

    pour que ça soit plus pratique, tu pourrais mettre un listbox qui est alimenté par l'ensemble des valeur (ou un combobox)

  3. #23
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vosges (Lorraine)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2015
    Messages : 20
    Points : 1
    Points
    1
    Par défaut
    Non non, je voulais bien mettre -20
    L'affichage en listbox se fait comme en label?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Me.ListBox1.Text.Caption = chaine

  4. #24
    Expert éminent

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 071
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 071
    Points : 9 850
    Points
    9 850
    Billets dans le blog
    5
    Par défaut
    Non le contrôle est différent

    pour le label, on utilise son titre ... c'est sa fonction première que d'afficher UNE information
    un listbox sert à afficher une collection d'informations, sous la forme de lignes et de colonnes (si on en met plusieurs)
    on va donc alimenter la liste, une seule colonne suffit.

    chaque fois qu'on trouve un Ai/Bi qui répond à tes conditions, on l'ajoute dans la listbox

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Set plage = Sheets("appli").Range("a1:c2025")
    tablo = plage
     
    Me.ListBox1.Clear
    For i = LBound(tablo) To UBound(tablo)
        If CDbl(tablo(i, 3)) >= ratioInf And CDbl(tablo(i, 3)) <= ratioSup Then
            Me.ListBox1.AddItem CDbl(tablo(i, 1)) & "/" & CDbl(tablo(i, 2))
        End If
    Next i
    au lieu de créer des "fausses lignes" de résultat dans une chaine de caractère, qu'on affiche dans le caption du label

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Set plage = Sheets("appli").Range("a1:c2025")
    tablo = plage
     
    For i = LBound(tablo) To UBound(tablo)
        If CDbl(tablo(i, 3)) >= ratioInf And CDbl(tablo(i, 3)) <= ratioSup Then
            chaine = chaine & vbCrLf & CDbl(tablo(i, 1)) & "/" & CDbl(tablo(i, 2))
        End If
    Next i
     
    Me.Label10.Caption = chaine

    je te conseille de bien assimiler le tutoriel suivant : http://silkyroad.developpez.com/VBA/ControlesUserForm/

    tu verras que de passer à un listbox offre un énorme avantage par rapport au label : manipuler et interagir avec chaque couple si envie

  5. #25
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vosges (Lorraine)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2015
    Messages : 20
    Points : 1
    Points
    1
    Par défaut
    Je vous joint mon ultime appli mais j'ai encore le même soucis qu'hier, mon alpha me donne 0, pourquoi?
    Calcul jeux de pignons pour lancement.xlsm

  6. #26
    Expert éminent

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 071
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 071
    Points : 9 850
    Points
    9 850
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    pourquoi tu as scindé ton userform initial en deux userform ?

    tu as maintenant certains Textbox dans ton Userform1 (celui où on fait les calculs) et dans ton Userform2 (qui contient certains Textbox utilisés dans les calcul du userform1) ?


    en l'état, ça ne peut que planter, voici pourquoi :

    1) Userform1

    - tu écris des valeurs dans des Textbox
    - tu cliques sur un bouton et ça décharge ton Userform1 : la valeur de tes textbox n'existe plus !

    2) Userform2

    - tu écris des valeurs dans des Textbox
    - tu cliques sur un bouton et ça effectue des calculs qui font référence à tes Textbox du Userform2

    ==> ça plante car les contrôles de Userform2 ont été déchargés, VBA ne trouve pas les objets !


    T'as plusieurs solutions, je ne donne que les plus "simples" à mettre en oeuvre :

    1) Mon conseil

    tu remets tout dans le même userform

    2) Utilisation de Variables publiques

    Tu déclares dans un module standard des variables publiques, par exemple "Etirage" / "VitesseArbreMoteur" / "VitesseMachine"
    dans ton userform2, quand tu clique sur ton bouton de validation, tu mets les valeurs de tes textbox dans les variables publiques

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Private Sub CommandButton1_Click()
     
    Etirage = Me.TextBox1
    VitesseArbreMoteur = Me.TextBox2
    VitesseMachine = Me.TextBox3
    Unload Me
     
    End Sub

    Ces variables étant publiques, tu peux les réutiliser dans ton userform1, tu remplaces tes "Userform2.Textbox1" par "Etirage" et là tu récupère bien la valeur


    3) Ne pas décharger Userform2 mais le masquer

    Au lieu de décharger ton Userform2
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Private Sub CommandButton1_Click()
     
    Unload Me
     
    End Sub
    Tu le caches, comme ça tes contrôles et leurs valeurs sont encore utilisables
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Private Sub CommandButton1_Click()
     
    Me.Hide
     
    End Sub
    quand tu caches un userform, tu le fais réapparaître de la même manière quand quand tu l'appelles :



    Prend ce qui te vas le mieux

  7. #27
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vosges (Lorraine)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2015
    Messages : 20
    Points : 1
    Points
    1
    Par défaut
    C'est parfait, le programme fonctionne!!!
    Juste une dernière chose, si je voudrais par exemple afficher un maximum de 5 couples de valeurs, comment je pourrait faire?

  8. #28
    Expert éminent

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 071
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 071
    Points : 9 850
    Points
    9 850
    Billets dans le blog
    5
    Par défaut
    Il faut déjà savoir si tu as une préférence sur les couples à récupérer ?

    sans aucun préférence, on va récupérer les 5 premiers, en partant du ratio inférieur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Set plage = Sheets("appli").Range("a1:c2025")
    tablo = plage
     
    Me.ListBox1.Clear
    For i = LBound(tablo) To UBound(tablo)
        If CDbl(tablo(i, 3)) >= ratioInf And CDbl(tablo(i, 3)) <= ratioSup Then
            Me.ListBox1.AddItem CDbl(tablo(i, 1)) & "/" & CDbl(tablo(i, 2))
        End If
        ' on arrête de récupérer des couples quand on en a 5 dans la listbox
        If Me.ListBox1.ListCount = 5 Then Exit For
    Next i

  9. #29
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vosges (Lorraine)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2015
    Messages : 20
    Points : 1
    Points
    1
    Par défaut
    Quitte à choisir, je prendrais ceux qui sont les plus près d'alpha (alpha sans l'encadrement)

  10. #30
    Expert éminent

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 071
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 071
    Points : 9 850
    Points
    9 850
    Billets dans le blog
    5
    Par défaut
    On a quand même besoin d'un référentiel pour approcher ta valeur exact.

    le but de l'encadrement était justement d'éviter d'avoir 0 couple dans ton rapatriement, sans complexifier ton code par une méthode qui recalculerait ton alpha si on ne trouve rien, ou moins de 5 valeurs

    c'est plutôt le pourcentage de variation de la valeur alpha qui n'est pas adaptée, si tu remontes trop de choses.

    joue sur cette ligne de code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Encadrement = alpha * 0.01   'revoir l'encadrement
    là on est à 1% de variation, c'est peut être trop élevé.

    si vraiment ça colle pas, on changera notre fusil d'épaule, mais le code va être un peu plus lourd

  11. #31
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vosges (Lorraine)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2015
    Messages : 20
    Points : 1
    Points
    1
    Par défaut
    Oui c'est bon j'ai mis un encadrement à 0,25 % et c'est beaucoup mieux!!
    Si je souhaite mettre un bouton dans excel, et que quand je clique dessus j'ouvre directement mon programme, comment dois-je m'y prendre?

  12. #32
    Expert éminent

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 071
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 071
    Points : 9 850
    Points
    9 850
    Billets dans le blog
    5
    Par défaut
    il faut écrire une macro dans un module standard :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Sub AfficheUserform()
     
    Userform1.Show
    End Sub
    tu adaptes le nom de ton userform dans cette macro

    ensuite tu colles un bouton dans une feuille, tu fais un clic droit et tu sélectionnes "affecter une macro" et tu sélectionnes la macro AfficheUserform

  13. #33
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vosges (Lorraine)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2015
    Messages : 20
    Points : 1
    Points
    1
    Par défaut
    J'ai mis dans un module
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim etirage As Double, Va As Double, Vm As Double
    J'ai mis dans l'userform2
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Private Sub CommandButton1_Click()
     
    etirage = Me.TextBox1
    Va = Me.TextBox2
    Vm = Me.TextBox3
     
    Unload Me
     
    End Sub
    J'ai mis alors dans userform1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ratioInf = (((alpha - encadrement) * Vm * 0.0762 * WorksheetFunction.Pi * 60 * (1 + etirage) / 0.077 / 1000 / 1.115) / (25 * 60 / 1000)) * 36 / (Va * 80)
    ratioSup = (((alpha + encadrement) * Vm * 0.0762 * WorksheetFunction.Pi * 60 * (1 + etirage) / 0.077 / 1000 / 1.115) / (25 * 60 / 1000)) * 36 / (Va * 80)
    Et pourtant j'ai dans Vm, Va, et etirage la valeur 0

  14. #34
    Expert éminent

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 071
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 071
    Points : 9 850
    Points
    9 850
    Billets dans le blog
    5
    Par défaut
    J'ai dis des variables publiques, là ce sont des variables dont la portée ne dépassera pas le module

    pour étendre cette portée à tout ton projet :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Public etirage As Double
    Public Va As Double
    Public Vm As Double
    bien comprendre ce tutoriel : http://silkyroad.developpez.com/VBA/LesVariables/

    et plus particulièrement pour cette question de portée des variables : http://silkyroad.developpez.com/VBA/LesVariables/#LV

  15. #35
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vosges (Lorraine)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2015
    Messages : 20
    Points : 1
    Points
    1
    Par défaut
    Ok, tout est bon
    Je vous remercie pour toutes vos réponses, et pour le temps que vous m'avez consacré!

  16. #36
    Expert éminent

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 071
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 071
    Points : 9 850
    Points
    9 850
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    fais-en bonne usage, c'est tout ce qui compte
    merci également

  17. #37
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vosges (Lorraine)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2015
    Messages : 20
    Points : 1
    Points
    1
    Par défaut
    Changement de programme je doit absolument mettre mes couples de valeurs en label :
    Est-ce que je réutilise le code que vous m'aviez suggérer précédemment?

  18. #38
    Expert éminent

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 071
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 071
    Points : 9 850
    Points
    9 850
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    les deux possibilités sont dans le message #25

    il te suffit d'intervertir le premier (qui est dans ton code) avec le second.

  19. #39
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vosges (Lorraine)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2015
    Messages : 20
    Points : 1
    Points
    1
    Par défaut
    Pas d'affichage dans le label.. Quand je met un point d'arrêt sur la ligne me.label.caption et plus exactement sur chaine j'ai bien les couples mais pourtant rien ne s'affiche dans le label, pourquoiii?

  20. #40
    Expert éminent

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 071
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 071
    Points : 9 850
    Points
    9 850
    Billets dans le blog
    5
    Par défaut
    Il faut agrandir la taille verticale de ton label.

    Sinon tu ne vois que la première ligne de ta Chaine.
    Or la première ligne .. c'est un saut de ligne.

    mon message #23 abordait cet aspect "redimensionnement"

    par ailleurs, ton label est trop petit pour contenir tous tes couples
    j'ai étiré sa hauteur au maximum de ton userform et ça ne suffit pas

Discussions similaires

  1. Réponses: 3
    Dernier message: 20/11/2014, 23h36
  2. Calculs des plus grandes valeurs propres
    Par Swaraj dans le forum Calcul scientifique
    Réponses: 9
    Dernier message: 27/06/2011, 11h04
  3. [PPT-97] Créer un quizz avec calcul des résultats
    Par KermitBlue dans le forum Powerpoint
    Réponses: 5
    Dernier message: 31/01/2010, 23h09
  4. Calcul des heures avec résultat en euro
    Par Philippe608 dans le forum Excel
    Réponses: 5
    Dernier message: 26/05/2008, 20h19
  5. [Collection] Regrouper des couples clé/valeur
    Par webspeak dans le forum Collection et Stream
    Réponses: 4
    Dernier message: 22/05/2006, 15h12

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