Code VBA à lier à un bouton d'option

Bonjour,

Mon fichier très simplifié se présente ainsi :

https://www.excel-pratique.com/~files/doc2/20090922.xls

Mon problème : Si un utilisateur ne connaissait pas la valeur exacte à indiquer en C4 et qu’il a employé le CALCUL APPROXIMATIF afin d’en déterminer la valeur, puis qu’il modifie le sexe, le nouveau calcul effectué en C32 n’est pas actualisé en C4. Toutefois il se peut que la valeur en C4 ne vienne pas du CALCUL APPROXIMATIF et on ne peut donc pas actualiser automatiquement la valeur C4.

La solution envisagée pour laquelle j’aurais besoin de votre aide : A condition que la cellule C4 ne soit pas vide, si le sexe est changé, il faudrait qu’une MsgBox apparaisse et demande :

« Le CALCUL APPROXIMATIF a été modifié et présente une valeur de [indiquer la valeur de la cellule C32]. Voulez-vous remplacer la valeur inscrite actuellement en C4 par ce montant ? »

Si l’utilisateur clique « Oui », la valeur en C4 serait remplacée par celle en C32, et s’il clique « Non » la valeur en C4 ne serait pas modifiée.

NB : J’ai posé une question pratiquement identique hier - à laquelle m’avait répondu Claude - mais finalement ce n’est pas vraiment la « construction » qu’il faudrait.

Au plaisir de vous lire.

Bonjour Yvouille

Regarde avec la fonction STATIC. C'est peut-être une solution pour ton problème.

https://www.excel-pratique.com/~files/doc2/Copie_de_20090922.xls

Cette fonction est active tant que ton fichier reste ouvert. Je ne sais pas jusqu'à quel point elle pourra répondre à ta question.

Cordialement

Dan_de_pic

Salut Dan_de_pic,

Merci pour ta réponse.

Je ne connais malheureusement pas la fonction STATIC et ne vois pas où elle est placée dans ton fichier.

Peux-tu m'apporter des éclaircissements, s'il te plait ?

A la prochaine

image1
1soumission.xlsx (18.94 Ko)

Bonjour Yvouille

Après avoir relu ta question, ma première intention était d'utliser l'événement "Change" pour déterminer si la cellule C2 a été modifiée, mais il semblerait que cet événement n'est pas déclenché lorsque la cellule est modifiée par un bouton d'option.

Pour contourner ce problème, j'ai fait un exemple en utilisant l'événement "Calculate" avec l'instruction STATIC.

https://www.excel-pratique.com/~files/doc2/uuHITCopie_de_20090922.xls

Tu trouveras les fonctions-événements dans le code VB en double-cliquant sur le nom de la feuille. Ensuite, dans le haut de l'écran, tu peux choisir les macros (Général) ou Worksheet. Choisis les macros Worksheet ! Puis, à droite, tu as toutes les fonctions-événements pour la feuille désignée comme "Activate", "Change" , "Calculate" et autres. Ces fonctions-événements sont définies par Excel et sont activées en fonction des événements. Pour plus d'explications, il faudra te référer à l'aide.

La fonction-événement "Calculate" est activée lorsque le calcul de la feuille en cours est terminé.

Dans cette fonction, j'ai défini une variable comme statique. La valeur définie de cette variable reste mémorisée en permanence tant que le fichier reste ouvert même si la macro est terminée. Cela permet de comparer la donnée mémorisée avec des valeurs de la feuille de calcul.

Tu trouveras ainsi les instructions pour solutionner ton problème.

Si tu as des questions, n'hésite pas à demander

Cordialement

Dan_de_pic

Bonsoir le Forum, Salut Dan_de_pic,

Ta solution semble très intéressante et je t'en remercie sincèrement. Je suis impatient de l'essayer demain dans mon fichier réel au travail. Je ne manquerai pas de t'informer des résultats obtenus.

Dans l'immédiat, je voudrais encore poser cette question : J'avais indiqué qu'il serait intéressant que le message montre quelle est la valeur calculée en C32, par exemple :

« Le CALCUL APPROXIMATIF a été modifié et présente une valeur de 15'347.50. Voulez-vous remplacer la valeur inscrite actuellement en C4 par ce montant ? ».

Est-ce aussi réalisable ?

A la prochaine

Bonjour Yvouille

Oui, c'est possible en remplaçant le code du MsgBox ainsi :

Réponse = MsgBox("Le CALCUL APPROXIMATIF a été modifié et présente une valeur de " & Range("C32").Value & _
   ". Voulez-vous remplacer la valeur inscrite actuellement en C4 par ce montant ? ", vbYesNo, "Choix du sexe")

Excuse-moi, je n'ai pas fais attention. C'est la fatigue!

Bonne chance pour tes essais demain.

A+

Dan_de_pic

Dan_de_pic,

Merci encore une fois pour ton aide. C'est super !

Mais comme je travaille près de Granges/Soleure, ce serait bien que le message indique les francs suisses de cette manière : 150.00 - 150.05 - 150.10, etc. au lieu de 150 - 150.05 - 150.1 (ces montants sont déjà arrondis correctement en C32). Est-ce aussi possible de modifier le message de la MsgBos afin d'obtenir un tel format ?

A te relire

Bonjour Yvouille

Pour garder le même format dans la MsgBox que dans la cellule, tu peux le faire avec l'instruction suivante:

Réponse = MsgBox("Le CALCUL APPROXIMATIF a été modifié et présente une valeur de " & Format(Range("C32").Value, Range("C32").NumberFormat) & _
    ". Voulez-vous remplacer la valeur inscrite actuellement en C4 par ce montant ? ", vbYesNo, "Choix du sexe")

Bonne chance

A+

Dan_de_pic

Merci infiniment Dan_de_pic,

Tu m'as apporté exactement la solution qu'il me fallait. Je t'en suis très reconnaissant

Avec mes meilleures salutations.

Bonjour,

J’avais indiqué ce fil comme “Résolu”, mais lorsque j’ai voulu transféré la macro de Dan_de_pic dans mon fichier réel, j’ai eu de nouveaux problèmes.

Mon fichier est malheureusement en allemand et il est assez compliqué d’en modifier les textes. Désolé, mais mon problème devrait quand même être compréhensible.

https://www.excel-pratique.com/~files/doc2/20090925.zip

Lorsque l’on change le sexe avec les boutons d’option en C4 et D4 (Frau / Mann) la macro placée dans la feuille 1 devrait être lancée. Si je place « Option Explicit » en tête des macros, un message indique que je dois définir mes variables. Si je l’enlève, un premier message d’erreur apparaît avant le message désiré inscrit dans le code (MsgBox) Private Sub Worksheet_Calculate().

Pouvez-vous m’aider à résoudre cela ?

J’ai un autre problème. Maintenant le texte qui apparaît dans la MsgBox se présente ainsi :

Le CALCUL APPROXIMATIF a été modifié et présente une valeur en CM352 de _(55'454.25_). Voulez-vous remplacer la valeur inscrite actuellement en C5 par ce montant ?

Savez-vous comment faire afin que le texte se présente sans ces soulignés ni parenthèses :

…………CM352 de 55'454.25. Voulez-vous ……….

Bonne journée.

En continuant à chercher, j’ai découvert d’où venait la première partie de mes problèmes décrits dans mon message ci-dessus.

Il ne resterait donc plus que ma question au sujet du texte affiché bizarrement dans mon MsgBox :

_(55'454.25_) au lieu de 55'454.25

Pouvez-vous encore m’aider sur ce point là ? Mon fichier est joint à mon précédent message.

A vous relire.

Bonjour

A la place de reprendre le format de la cellule qui peut changer en fonction de la configuration de Excel, on peut inscrire un format fixe.

Il faut donc remplacer

Range("C32").NumberFormat

par

"#'###.00"

Tu auras ainsi le bon format dans le MsgBox.

Cordialement

Dan_de_pic

Merci infiniment Dan pour ta réponse. Grace à toi j’ai pu avancer dans mon projet, mais il y a de nouvelles questions et problèmes qui surgissent.

Ta macro se présente actuellement ainsi

Private Sub Worksheet_Calculate()

    ' Proposition de Dan_de_pic

    ' Cette macro est activée dans les conditions ci-dessous :
    ' "Cet événement se produit après le recalcul de la feuille de calcul, pour l'objet Worksheet."

    Static memo As Variant                  ' Définition de la variable avec mémorisation permanente

    If memo = Empty Then                    ' Si la variable n'a pas encore été initialisée ...
        memo = Range("C4").Value            ' ... on mémorise le sexe en C4.

    ElseIf memo <> Range("C4").Value Then   ' Si le sexe a changé, on va voir ce qui est inscrit en C5.
        memo = Range("C4")                  ' On mémorise d'abord le sexe.
        If Range("C5").Value <> "" Then     ' On contrôle que la cellule C5 ne soit pas vide
                                            ' Dans ce cas on demande s'il faut faire le remplacement.

    Réponse = MsgBox("Comme le sexe a été changé, le calcul lors de l'invalidité" _
    & vbNewLine & "en CM352 a été recalculé en se monte à CHF " & Format(Range("CM352").Value, "#'###.00") _
    & vbNewLine & "" & vbNewLine & "Voulez-vous remplacer la valeur en C5 par ce nouveau montant? ", _
    vbYesNo, "Berechnung des Alterskapitals")

                                            ' En cas de réponse positive, on effectue le remplacement.
            If Réponse = vbYes Then Range("C5").Value = Range("CM352").Value
        End If

    Else

    End If

End Sub

1) Je me suis alors rendu compte que si la valeur en CM352 est aussi zéro, il ne faudrait pas non plus que le MsgBox apparaisse, ce qui serait également illogique (actuellement le MsgBox n’apparaît pas uniquement si la cellule C5 est vide).

2) De plus, après avoir modifié le format du chiffre qui est inscrit dans la MsgBox ("#'###.00"), je me suis rendu compte que les montants inférieurs à 1'000 apparaissent avec le signe de séparation des milliers, par exemple : ’813.45. Est-il possible d’encore modifier cela, bien que ce soit un moindre problème ?

A tout hasard, mon fichier dans son état actuel :

https://www.excel-pratique.com/~files/doc2/yjbFw20090925.zip

Excellente journée à tout le monde.

Bonjour Yvouille

Pour la première question, il faut modifier la condition au centre de la macro:

If Range("C5").Value <> "" Then     ' On contrôle que la cellule C5 ne soit pas vide

par

If Range("C5").Value <> "" AND Range("CM352").Value <> 0 Then

Ainsi, la MsgBox ne viendra pas s'afficher.

Pour la seconde question, je n'ai pas de réponse. Ca fontionne très bien dans les cellules, mais dans le format macro. C'est peut-être un bug de Excel.

Bonne journée, à bientôt

Dan_de_pic

Salut Dan_de_pic,

Mon projet est maintenant bien complet et fonctionne à mon entière satisfaction. Les montants en dessous de 1000 étant vraiment peu nombreux, ce problème de format n’est pas gênant.

Je tiens alors à te remercier sincèrement pour ton aide géniale

Bonnes salutations et, qui sait, à une prochaine fois.

Rechercher des sujets similaires à "code vba lier bouton option"