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

Excel Discussion :

Changement reciproque de la valeur de deux cellules


Sujet :

Excel

  1. #1
    Membre à l'essai
    Inscrit en
    Juillet 2006
    Messages
    68
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 68
    Points : 24
    Points
    24
    Par défaut Changement reciproque de la valeur de deux cellules
    Bonjour a tous,

    J'espere que cette question n'a pas ete deja posee, mais mes recherches sur le forum ne m'ont rien donne donc je me decide a vous poser la question.

    Je dispose de quatre cellules qui vont de paire, B11-B12 et B15-B16.
    B11 se calcule a partir de B15 et B16
    B12 se calcule a partir de B15 et B16
    B15 se calcule a partir de B11 et B12
    B16 se calcule a partir de B11 et B12

    J'aimerais que l'utilisateur puisse soit rentrer B11 et B12 pour calculer B15 et B16, soit faire le contraire.

    Le probleme se complique puisqu'il y a des valeurs qui posent probleme donc il faut faire des cas particuliers.

    Voici ce que j'ai essaye de faire, et qui me donne des problemes d'overflow quelle que soit la valeur que je donne:

    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
    Private Sub Worksheet_Change(ByVal Target As Range)
     
     
    If Not Intersect(Target, [B11]) Is Nothing Then
        If [B11] = 0 Then [B15] = 0
        Else: [B15] = Atn(Cos(WorksheetFunction.Radians([B12])) * Tan(WorksheetFunction.Radians([B11]))) * Application.Pi() / 180
        End If
    If Not Intersect(Target, [B15]) Is Nothing Then
        If [B15] = 0 Then [B11] = 0
        Else: [B11] = Atn(Tan(WorksheetFunction.Radians([B16])) / Sin(Atn(Tan(WorksheetFunction.Radians([B16])) / Tan(WorksheetFunction.Radians([B15]))))) * Application.Pi() / 180
        End If
     
     
    If Not Intersect(Target, [B12]) Is Nothing Then
        If [B12] = 0 Then [B16] = 0
        Else: [B16] = Atn(Sin(WorksheetFunction.Radians([B12])) * Tan(WorksheetFunction.Radians([B11]))) * Application.Pi() / 180
        End If
    If Not Intersect(Target, [B16]) Is Nothing Then
        If [B16] = 0 Then [B12] = 0
        Else: [B12] = Atn(Tan(WorksheetFunction.Radians([B16])) / Tan(WorksheetFunction.Radians([B15]))) * Application.Pi() / 180
        End If
     
    End Sub

    Si vous avez des idees, suggestions, merci de votre aide!

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 128
    Points : 55 940
    Points
    55 940
    Billets dans le blog
    131
    Par défaut
    Bonjour

    Un problème d'overflow, c'est probablement des valeurs incorrectes pour les fonctions considérées.

    As-tu vérifié en pas-à-pas les valeurs utilisées?

    Pour rappel, VBA requiert des amplitudes d'angle en radians pour les calculs.

    angle en degrés * pi/180 = angle en radians
    angle en radians *180/pi = angles en degrés

    angle en grades *pi/200= angle en radians
    angle en radians *200/pi = angle en grades

    Ok?

  3. #3
    Membre à l'essai
    Inscrit en
    Juillet 2006
    Messages
    68
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 68
    Points : 24
    Points
    24
    Par défaut
    Bonjour et merci de ta proposition.

    Effectivement l'Overflow etait du a des valeurs incorrectes pour les fonctions utilisees (mais pas a cause de la conversion radians-degres).

    J'ai reformule le code et maintenant ca marche super, ca donne ca:


    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
    Private Sub Worksheet_Change(ByVal Target As Range)
     
        Application.EnableEvents = False
     
        If Not Intersect(Target, Range("B11:B16")) Is Nothing And Target.Count = 1 Then
            Select Case Target.Address
     
                Case "$B$11"
     
                        [B15] = Atn(Cos(WorksheetFunction.Radians(270 - [B12])) * Tan(WorksheetFunction.Radians([B11]))) * 180 / Application.Pi()
                        [B16] = Atn(Sin(WorksheetFunction.Radians(270 - [B12])) * Tan(WorksheetFunction.Radians([B11]))) * 180 / Application.Pi()
     
                Case "$B$12"
     
                        [B15] = Atn(Cos(WorksheetFunction.Radians(270 - [B12])) * Tan(WorksheetFunction.Radians([B11]))) * 180 / Application.Pi()
                        [B16] = Atn(Sin(WorksheetFunction.Radians(270 - [B12])) * Tan(WorksheetFunction.Radians([B11]))) * 180 / Application.Pi()
     
                Case "$B$15"
     
                    If [B15] = 0 Then
                        [B11] = [B16]
                        [B12] = 270 - 90
                    Else
                        [B11] = Atn(Tan(WorksheetFunction.Radians([B16])) / Sin(Atn(Tan(WorksheetFunction.Radians([B16])) / Tan(WorksheetFunction.Radians([B15]))))) * 180 / Application.Pi()
                        [B12] = (3 * Pi / 2 - Atn(Tan(WorksheetFunction.Radians([B16])) / Tan(WorksheetFunction.Radians([B15])))) * 180 / Application.Pi()
                    End If
     
                Case "$B$16"
     
                    If [B16] = 0 Then
                        [B11] = [B15]
                        [B12] = 270 - 0
                    Else
                        [B11] = Atn(Tan(WorksheetFunction.Radians([B16])) / Sin(Atn(Tan(WorksheetFunction.Radians([B16])) / Tan(WorksheetFunction.Radians([B15]))))) * 180 / Application.Pi()
                        [B12] = (3 * Pi / 2 - Atn(Tan(WorksheetFunction.Radians([B16])) / Tan(WorksheetFunction.Radians([B15])))) * 180 / Application.Pi()
                    End If
     
                Case Else
     
                    'nothing
     
            End Select
     
        End If
     
        Application.EnableEvents = True
     
    End Sub

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

Discussions similaires

  1. [VBA-E] Séparer deux valeurs d'une cellule
    Par Yoshiblow dans le forum Macros et VBA Excel
    Réponses: 13
    Dernier message: 24/03/2017, 08h12
  2. [XL-2007] Comparer valeurs de deux cellules avec un bouton valider
    Par Merryy dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 29/06/2015, 15h53
  3. comparaison de la valeur de deux cellules sur 2 classeurs différents
    Par nevpen dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 23/05/2014, 15h52
  4. Changement automatique de la valeur d'une cellule
    Par meledjeauguste dans le forum Excel
    Réponses: 1
    Dernier message: 29/11/2013, 15h34
  5. [VBA-E] RechercheV si changement de valeur sur une cellule
    Par bonilla dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 18/01/2007, 17h22

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