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 :

Faire un cercle unité qui montre un angle


Sujet :

Macros et VBA Excel

  1. #1
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2015
    Messages : 14
    Par défaut Faire un cercle unité qui montre un angle
    Bonjour, je suis débutant en VBA alors j'ai besoin de votre aide! Je dois faire un cercle unité qui propose un angle parmi les angles remarquables à chaque fois que je clique sur un bouton. Je sais comment faire un bouton et la lier à une macro. J'ai aussi été capable de faire un cercle avec la fonction suivante:
    Pour le reste, j'ai besoin d'un petit coups de pouce!
    Merci et bonne journée!


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub Draw_Cirlce()
    ActiveSheet.Shapes.AddShape(msoShapeOval, 12, 6.75, 500, 500).Select
    Selection.ShapeRange.Fill.Visible = msoFalse
    With Selection.ShapeRange.Line
    .Visible = msoTrue
    .ForeColor.RGB = RGB(255, 0, 0)
    .Transparency = 0
    End With
    With Selection.ShapeRange.Line
    .Visible = msoTrue
    .Weight = 2.25
    End With
    End Sub

  2. #2
    Membre émérite
    Homme Profil pro
    Programmeur analyste
    Inscrit en
    Février 2009
    Messages
    546
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Canada

    Informations professionnelles :
    Activité : Programmeur analyste
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2009
    Messages : 546
    Par défaut
    Citation Envoyé par soundman01 Voir le message
    Je dois faire un cercle unité qui propose un angle parmi les angles remarquables à chaque fois que je clique sur un bouton.
    Bonjour,
    Votre demande est dans cette phrase ci-haut, mais j'ai de la difficulté à comprendre.
    pouvez-vous précisé svp?

  3. #3
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2015
    Messages : 14
    Par défaut
    Désolé! Je dois avouer que ma question n'est pas très précise. Donc reprenons!

    Avec VBA, voici ce que je dois coder:
    Un cercle unité (pour la trigonométrie). Une fois que l'utilisateur clique sur un bouton, un angle apparaît sur le cercle unité (un point sur le cercle, qui fait une ligne liée au point [0,0], et la mesure de l'angle qui apparaît).
    L'utilisateur devra alors déduire, selon l'angle donné, le radians, le cos ainsi que le sin.

    Merci!

  4. #4
    Membre émérite
    Homme Profil pro
    Programmeur analyste
    Inscrit en
    Février 2009
    Messages
    546
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Canada

    Informations professionnelles :
    Activité : Programmeur analyste
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2009
    Messages : 546
    Par défaut
    Bonjour,
    Pour utiliser, il faut faire votre cercle avant tout, ensuite entrer le degré dans la cellule A1 puis exécuter la macro.
    Cette macro à été faite en fonction de la position du centre de votre cercle et en fonction de son rayon
    si vous changé ces 2 paramètres, il faudera ajuster cette macro.
    en espérant de vous avoir aidé.

    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    Sub Draw_Line()
     
        Dim Position_Centre_X
        Dim Position_Centre_Y
        Dim Point_Cercle_X
        Dim Point_Cercle_Y
        Dim Rayon
     
        Rayon = 250 ' = Diamètre / 2 (Diamètre = 500 que vous avez donné pour votre cercle)
     
        Position_Centre_X = 262 ' = Rayon + 12 (12 pour position que vous avez donné pour votre cercle)
        Position_Centre_Y = 256.75 ' = Rayon + 6.75 (6.75 pour position que vous avez donné pour votre cercle)
     
        '=============================================================================
        '=============================================================================
        'Position point sur cercle selon angle
        'Formule mathématique
        'x = x0 + r*cos(t)
        'y = y0 + r*sin(t)
        'où (x0,y0) sont les coord du centre, r est le rayon, et t l'angle en radian
        '1 degré = 0.0174532925 Radian
        Point_Cercle_X = Position_Centre_X + (Rayon * Cos(Cells(1, 1) * -0.0174532925))
        Point_Cercle_Y = Position_Centre_Y + (Rayon * Sin(Cells(1, 1) * -0.0174532925))
        '=============================================================================
        '=============================================================================
     
        With ActiveSheet.Shapes.AddLine(Position_Centre_X, Position_Centre_Y, Point_Cercle_X, Point_Cercle_Y).Line
            .Weight = 2.25
            .ForeColor.RGB = RGB(255, 0, 0)
        End With
     
    End Sub

  5. #5
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2015
    Messages : 14
    Par défaut
    Merci beaucoup! C'est vraiment intéressant. J'ai cependant trouvé une solution qui est, à mes yeux, plus simple. J'ai utilisé un graphique, tout simplement. J'ai cependant une autre question pour vous, si vous avez le temps!
    J'ai fais un tableau qui montre le cos et le sin d'un angle en radian. Cependant, la valeur du cos et du sin est exprimé en décimal. J'aimerais que ceux-ci soient exprimés comme : (racine de 2)/2. Si j'utilise la notation fractionnaire, j'obtiens une bonne réponse mais pas sous la forme que je désire.
    Merci et bonne journée!

  6. #6
    Membre émérite
    Homme Profil pro
    Programmeur analyste
    Inscrit en
    Février 2009
    Messages
    546
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Canada

    Informations professionnelles :
    Activité : Programmeur analyste
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2009
    Messages : 546
    Par défaut
    Bonjour,
    le symbole racine carré n'a pas de code ascii alors pour obtenir ce que tu veux il faut triché,
    comme ceci
    r = Rayon

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    msgbox "\/¯" & (r * 4 - (r ^ 2)) & "/2"

  7. #7
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut



    Bonjour, bonjour !

    Si le caractère existe rien qu'en ouvrant la Table des caractères des accessoires Windows !

    Trouvé en cinq secondes : et son code : ChrW(8730) (221A dans la Table des caractères en hexadécimal) …


    __________________________________________________________________________________________________
    Je suis Charlie - Je suis Bardo

  8. #8
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2015
    Messages : 14
    Par défaut
    Merci beaucoup! J'apprend énormément. J'ai presque terminé mon programme. Je ne compte même plus les heures que j'ai mis...

    Je fais face à un nouvel obstacle. Selon le theta, je donne, dans mon code, une valeur à rad, coss (coss) et sinn (sinus). L'élève entre ensuite les valeurs et clique sur le bouton terminé.
    Si la réponse est bonne, la cellule affiche vert sinon elle affiche rouge.

    Voici mon code qui donne les valeurs ainsi que celui qui donne la couleur à la cellule:
    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    Sub niveau1()
    Cells(7, 19).ClearContents
    Cells(8, 19).ClearContents
    Cells(9, 19).ClearContents
    Cells(7, 19).Interior.Color = RGB(255, 255, 255)
    Cells(8, 19).Interior.Color = RGB(255, 255, 255)
    Cells(9, 19).Interior.Color = RGB(255, 255, 255)
     
    Randomize
       nombre_aleatoire = Int(5 * Rnd) + 1
     
       If nombre_aleatoire = 1 Then
       Cells(6, 19).Value = 0
    rad = 0
    Coss = 1
    Sinn = 0
    End If
     
       If nombre_aleatoire = 2 Then
       Cells(6, 19).Value = 30
    rad = 52
    Coss = racine3
    Sinn = 1 / 2
    End If
     
      If nombre_aleatoire = 3 Then
       Cells(6, 19).Value = 45
    rad = 79
    Coss = racine1
    Sinn = racine1
    End If
     
       If nombre_aleatoire = 4 Then
       Cells(6, 19).Value = 60
    rad = 104
    Coss = 1 / 2
    Sinn = racine3
    End If
     
      If nombre_aleatoire = 5 Then
       Cells(6, 19).Value = 90
    rad = 157
    Coss = 0
    Sinn = 1
       End If
     
    End Sub
     
    Sub termine()
    If Cells(7, 19) = rad Then
    Cells(7, 19).Interior.Color = RGB(0, 255, 0)
    Else
    Cells(7, 19).Interior.Color = RGB(255, 0, 0)
    End If
     
    'If Cells(8, 19) = Coss Then
    'Cells(8, 19).Interior.Color = RGB(0, 255, 0)
    'Else
    'Cells(8, 19).Interior.Color = RGB(255, 0, 0)
    'End If
     
    'If Cells(9, 19) = Sinn Then
    'Cells(9, 19).Interior.Color = RGB(0, 255, 0)
    'Else
    'Cells(9, 19).Interior.Color = RGB(255, 0, 0)
    'End If
     
     
    End Sub
    Mon problème: La cellule devient verte seulement si la valeur est de 0 ou si la cellule est vide.
    Je vous remercie encore une fois pour l'aide, j'apprend énormément!

  9. #9
    Membre émérite
    Homme Profil pro
    Programmeur analyste
    Inscrit en
    Février 2009
    Messages
    546
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Canada

    Informations professionnelles :
    Activité : Programmeur analyste
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2009
    Messages : 546
    Par défaut
    puisque rad fait partie de 2 sub il faut le déclarer au tout début du 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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    Dim rad As Long
    
    Sub niveau1()
        Cells(7, 19).ClearContents
        Cells(8, 19).ClearContents
        Cells(9, 19).ClearContents
        Cells(7, 19).Interior.Color = RGB(255, 255, 255)
        Cells(8, 19).Interior.Color = RGB(255, 255, 255)
        Cells(9, 19).Interior.Color = RGB(255, 255, 255)
     
        Randomize
        nombre_aleatoire = Int(5 * Rnd) + 1
     
        If nombre_aleatoire = 1 Then
            Cells(6, 19).Value = 0
            rad = 0
            Coss = 1
            Sinn = 0
        End If
     
       If nombre_aleatoire = 2 Then
       Cells(6, 19).Value = 30
    rad = 52
    Coss = racine3
    Sinn = 1 / 2
    End If
     
      If nombre_aleatoire = 3 Then
       Cells(6, 19).Value = 45
    rad = 79
    Coss = racine1
    Sinn = racine1
    End If
     
        If nombre_aleatoire = 4 Then
            Cells(6, 19).Value = 60
            rad = 104
            Coss = 1 / 2
            Sinn = racine3
        End If
     
        If nombre_aleatoire = 5 Then
            Cells(6, 19).Value = 90
            rad = 157
            Coss = 0
            Sinn = 1
        End If
     
    End Sub

  10. #10
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2015
    Messages : 14
    Par défaut
    J'ai toujours le même problème, de plus, si je met le dim rad as long en haut de mon sub, il se met automatiquement dans le sub en haut. Est-ce que je dois rappeler dim rad as long dans ma 2e partie (ligne 50)?

  11. #11
    Membre émérite
    Homme Profil pro
    Programmeur analyste
    Inscrit en
    Février 2009
    Messages
    546
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Canada

    Informations professionnelles :
    Activité : Programmeur analyste
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2009
    Messages : 546
    Par défaut
    Il faut mettre dim rad as long en tête de ton module. (à la première ligne de toute du module)
    si, bien entendu, tes 2 sub sont dans le même module.

    aussi il te fauderait une condition que si rad = vide alors on met rouge

  12. #12
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2015
    Messages : 14
    Par défaut
    Merci! Je ne l'avais pas mis au tout début du module. Le seul problème qui me reste maintenant à régler est que le programme ne semble pas reconnaître la valeur: 0.52 par exemple. Cependant, le programme fonctionne avec des entiers. J'utilise le point puisque la virgule me donne une erreur de syntaxe.

  13. #13
    Membre émérite
    Homme Profil pro
    Programmeur analyste
    Inscrit en
    Février 2009
    Messages
    546
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Canada

    Informations professionnelles :
    Activité : Programmeur analyste
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2009
    Messages : 546
    Par défaut
    Déclaration de variable incorrecte, je vous ai induit en erreur,
    Long est un entier, Double est nombre à virgule



    au lieu de
    il faut

  14. #14
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2015
    Messages : 14
    Par défaut
    Étrangement cela ne semble pas fonctionner, je crois que le problème vient tu fais que j'utilise un point comme par exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
       If nombre_aleatoire = 2 Then
       Cells(6, 19).Value = 30
    rad = 0.52
    coss = racine3
    sinn = 1 / 2
    End If
    Pour ce qui est de coss et sinn, j'imagine que je devrais faire: dim coss as string? Puisque racine3 = ChrW(8730) + "3/2" (racine de 3 sur 2)

  15. #15
    Membre émérite
    Homme Profil pro
    Programmeur analyste
    Inscrit en
    Février 2009
    Messages
    546
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Canada

    Informations professionnelles :
    Activité : Programmeur analyste
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2009
    Messages : 546
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Dim rad as Double
    rad= 0.52
    msgbox rad
    le msgbox retourne bien 0.52

  16. #16
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2015
    Messages : 14
    Par défaut
    J'ai finalement trouvé le problème pour ce qui des décimaux. Le code VBA ne prend pas en compte la virgule, elle donne un erreur de syntaxe donc je dois écrire: 0.50 par exemple.
    Cependant, je dois écrire dans la cellule: 0,50 et non 0,50.
    Me reste maintenant à voir si VBA reconnaîtra les symboles tel ChrW(8730)!

  17. #17
    Membre émérite
    Homme Profil pro
    Programmeur analyste
    Inscrit en
    Février 2009
    Messages
    546
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Canada

    Informations professionnelles :
    Activité : Programmeur analyste
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2009
    Messages : 546
    Par défaut
    Citation Envoyé par soundman01 Voir le message
    racine3 = ChrW(8730) + "3/2" (racine de 3 sur 2)
    racine3 = ChrW(8730) + "3/2" ne calculera pas la (racine de 3)/2

    en vba pour la calculer il faut faire

  18. #18
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2015
    Messages : 14
    Par défaut
    Je sais, elle va seulement faire apparaître √3/2 par exemple. Le problème est que si je marque √3/2 dans la cellule, elle ne comprend pas que c'est la même chose exprimé dans le code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    If nombre_aleatoire = 2 Then
       Cells(6, 19).Value = 30
    rad = 0.52
    coss = racine3
    sinn = 1 / 2
    End If
    De plus, si je tape 1/2 dans une cellule, on m'apparaît 02-janv. Je n'aurais jamais cru avoir autant de difficulté dans la création de ce programme!

  19. #19
    Membre émérite
    Homme Profil pro
    Programmeur analyste
    Inscrit en
    Février 2009
    Messages
    546
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Canada

    Informations professionnelles :
    Activité : Programmeur analyste
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2009
    Messages : 546
    Par défaut
    Citation Envoyé par soundman01 Voir le message
    De plus, si je tape 1/2 dans une cellule, on m'apparaît 02-janv. Je n'aurais jamais cru avoir autant de difficulté dans la création de ce programme!
    Voir le format de la cellule.
    mettre le format en texte ou en fraction

    Citation Envoyé par soundman01 Voir le message
    Je sais, elle va seulement faire apparaître √3/2 par exemple. Le problème est que si je marque √3/2 dans la cellule, elle ne comprend pas que c'est la même chose exprimé dans le code
    il faut vérifier par code
    ex:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Sub test()
    Cells(1, 1) = ChrW(8730) + "3/2"
    Calcul_resultat
    End Sub
     
    Sub Calcul_resultat()
     
    If Left(Cells(1, 1), 1) = ChrW(8730) Then
        MsgBox (Sqr(Mid(Cells(1, 1), 2, 1))) / 2
    Else
        'UN AUTRE CALCUL
    End If
     
    End Sub

    Pour le 1/2 qui se transforme en date
    Voir le format de la cellule.
    mettre le format en texte ou en fraction

  20. #20
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2015
    Messages : 14
    Par défaut
    Je comprend votre code, mais je crois que ce n'est pas ce que je cherche. Je ne veux pas la réponse du calcul. Mon programme donne une valeur à coss selon le theta. Par exemple, cette valeur est de ChrW(8730) + "3/2". Cette valeur est caché.
    Maintenant, je veux que si l'élève entre, dans la case appropriée √3/2. Celui-ci fasse automatiquement le lien et donc que la case affiche verte.

Discussions similaires

  1. [newbie]comment faire un mouseon/mouseover qui tri par ASC ou DESC?
    Par megapacman dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 30/06/2006, 13h01
  2. mon unité qui rame
    Par starway dans le forum Composants
    Réponses: 5
    Dernier message: 12/02/2006, 22h30
  3. []Faire un glisser-déplacer qui marche.
    Par méphistopheles dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 06/09/2005, 20h28
  4. faire un petit menu qui lance des processus
    Par tomsoyer dans le forum Linux
    Réponses: 4
    Dernier message: 30/11/2004, 18h37
  5. Réponses: 9
    Dernier message: 09/11/2004, 11h41

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