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 :

[VBA - Excel] Problème de deux cellules sur l'evenement OnChange


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10
    Points : 8
    Points
    8
    Par défaut [VBA - Excel] Problème de deux cellules sur l'evenement OnChange
    Bonjour tous le monde,

    Malheuresement comme d'habitude, quand je viens soliciter de l'aide sur ce forum, c'est que j'ai un problème insolvable (pour mon humble niveau).

    Le problème est le suivant, je suis entrain de develloper une application VBA-Excel, et je me retrouve face à une impasse.
    En effet j'ai deux cellules qui sont calculées par des formules, mais qui viennent interagir l'une sur l'autre.

    Dans la première cellule ("tonnes"), si je rentre un chiffre il est automatiquement converties en nombres de bobines correspondants dans la cellule deux ("bobine").
    Le problème c'est que je dois également permettre de rentrer un chiffre dans la cellule bobine qui doit permettre de recalculer l'équivalent en tonne.

    Vu que c'est sur l'évenement OnChange que les formules sont appliquées, dès qu'une de mes cellules est modifiées par la deuxième, l'évenemenent est de nouveau invoqué. Les cellules sont très vite saturée par les calcules frénétique qu'on leurs demande de faire .

    Voici le code
    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
    Private Sub Worksheet_Change(ByVal Target As Range)
        If Target.Address = Range("QteTonne").Address Then
            If Range("nbBobine").Value <> "=SI(IU17="";;)" Then
               Range("nbBobine").Value = Range("qteTonne").Value * 1000 / (Range("longueur").Value * Range("laize").Value * Range("grammage").Value / 1000000)
               Range("nbBobine").FormulaR1C1 = "=IF(R[0]C[3]="""",,)"
            End If
        End If
        If Target.Address = Range("nbBobine").Address Then
            If Range("QteTonne").FormulaLocal <> "=SI(H17="";;)" Then
               Range("QteTonne").Value = (Range("nbBobine").Value * (Range("laize").Value * Range("grammage").Value / 1000000)) / 1000
               Range("QteTonne").FormulaR1C1 = "=IF(R[0]C[-3]="""",,)"
            End If
        End If
     
    End Sub
    J'aurais esperé que vous auriez une technique à me faire part pour contourner cette difficultée.

    En vous remerciant d'avance je vous souhaite une agréable journée.

  2. #2
    Membre actif Avatar de marsupilami34
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    574
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 574
    Points : 258
    Points
    258
    Par défaut
    Bonjour,
    tu peux essayer avec l'evenement "AfterUpdate" qui te modifira l'autre cellule une fois que tu seras sorti de ta première

    Ou alors "Selectionchange" peut être

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10
    Points : 8
    Points
    8
    Par défaut
    Citation Envoyé par marsupilami34
    Bonjour,
    tu peux essayer avec l'evenement "AfterUpdate" qui te modifira l'autre cellule une fois que tu seras sorti de ta première
    Merci pour ta réponse rapide, mais malheuresement sur VB 6.3, cet évenement n'existe pas (ou alors je ne sais pas où aller le chercher).

  4. #4
    Membre actif Avatar de marsupilami34
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    574
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 574
    Points : 258
    Points
    258
    Par défaut
    As tu essayé avec "Selectionchange" ?

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10
    Points : 8
    Points
    8
    Par défaut
    Citation Envoyé par marsupilami34
    As tu essayé avec "Selectionchange" ?
    je m'y emploie mais ca risque d'être un arrache cerveau car ce sont de belles référence circulaire

  6. #6
    Expert éminent
    Avatar de cafeine
    Inscrit en
    Juin 2002
    Messages
    3 904
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 3 904
    Points : 6 781
    Points
    6 781
    Par défaut
    Hello,

    Marsupilami, tu as testé les solutions que tu proposes ?
    Citation Envoyé par marsupilami34
    As tu essayé avec "Selectionchange" ?
    Sinon, pour en revenir au problème, tu peux gérer ça en testant si la formule qui appelle le Change contient une formule avec .HasFormula pour distinguer une modif issue d'une saisie manuelle ou bien de ta propre macro ..

    Dans cet exemple la colonne 2 sert à la saisie en Francs
    la colonne 4 à celle en Euros et les conversions sont faites automatiquement.

    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
    Private Sub Worksheet_Change(ByVal Target As Range)
     
    If Target.Column = 2 Then
    ' saisie en franc
        For Each c In Target.Cells
            If Not c.HasFormula Then
                c.Offset(0, 2).FormulaR1C1 = "=IF(RC[-2]<>"""",RC[-2] / 6.55957,"""")"
            End If
        Next c
    ElseIf Target.Column = 4 Then
    'saisie en €
        For Each c In Target.Cells
            If Not c.HasFormula Then
                c.Offset(0, -2).FormulaR1C1 = "=IF(RC[2]<>"""",RC[2] * 6.55957,"""")"
            End If
        Next c
    End If
     
    End Sub
    Je pense que tu peux l'adapter à ton cas précis.
    Ne mettez pas "Problème" dans vos titres, par définition derrière toute question se cache un problème
    12 tutoriels Access



  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10
    Points : 8
    Points
    8
    Par défaut
    Je te remercie c'est parfait !

    Pour me dépanner j'utilisais pour le moment 4 cellules :
    - 2 qui contenaient le résultat des calcules, mais qui n'était pas attrapé par l'évenement OnChange.
    - et mes 2 cases sencés contenir le résultat dont la formule est : =caseIntermediaire

    (c'est totalement incompréhensible c'est pour cela que je vais mettre le code à la suite, néanmoins ta solution est propre, je te remercie vraiment bcp pour ton aide

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
        If Target.Address = Range("QteTonne").Address Then
            Range("nbBobine").FormulaLocal = "=nbBobineBis"
        End If
        If Target.Address = Range("nbBobine").Address Then
            Range("QteTonne").FormulaLocal = "=QteTonneBis"
        End If
    End Sub

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

Discussions similaires

  1. [XL-2003] VBA excel problème sur contrôle statusbar
    Par wolop dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 26/08/2009, 15h07
  2. Réponses: 6
    Dernier message: 20/02/2007, 17h00
  3. [VBA-Excel] - protection plage de cellule sur i feuilles
    Par Chewi dans le forum Macros et VBA Excel
    Réponses: 12
    Dernier message: 01/02/2007, 16h52
  4. [VBA Excel] problème de range avec find
    Par loacast dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 23/11/2005, 13h56
  5. vba excel - Comment saisir une cellule sans faire entrer
    Par brethomeau dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 15/11/2005, 17h50

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