Mise en page équation

Bonjour,

Je dois faire une note de calcul où je doit faire apparaitre la formule littéraire d'une équation puis en égalité je dois faire apparaitre l'équation avec en remplacement des lettres la valeur que je lui ai attribué dans une case et puis le résultat. Y-a-t-il une automatisation possible pour que l'équation soit posée avec les chiffres?

Exemple d'équations à poser :

image

Exemple de formule à obtenir en automatisant la partie chiffrée en référence aux cases déjà remplies dans mon classeur

image

vous en remerciant par avance

Bonjour,

Ci-joint un fichier qui crée un groupement de shapes basé sur votre équation Fc90d.

Le principe est très simple :

  • On copie un modèle contenant 4 formes.
  • Les formes sont remplies avec les valeurs figurant dans le tableau.
  • La forme est générée sur clic droit de la cellule résultat.
capture 0 capture 1

Il est possible que le résultat de l'équation dans mon exemple ne soit pas celui attendu...

C'est bien ce genre de visuel que je veux, cependant j'aimerais savoir comment créer tout ça car j'ai des dizaine de formules différentes à créer avec des parenthèses, crochets, puissances....

Pouvez vous développer la solution que vous m'avez proposé?

Bonjour,

Il vous faut d'abord construire la forme de l'équation pour qu'elle vous serve de modèle et qui contiendra les données. Dans le cas présent, celle-ci contient 4 autres formes et elles sont groupées et son nom est "Fc,90,d_Modele". Chaque forme est baptisée avec un nom qui permettra de déverser les données comme ici Numerateur, Denominateur, Resultat, la quatrième forme est la barre de fraction.

Le code suivant permet de mettre en place les valeurs dans la forme :

Sub CreerShapeFc90d(ByVal Num1 As Double, ByVal Num2 As Double, ByVal Denum As Double, ByVal Resultat As Double)

Dim ShEquations As Worksheet
Dim ShapeFc90 As Shape
Dim I As Integer, NbShapes As Integer

   Set ShEquations = Sheets("Equations")
   With ShEquations

        NbShapes = .Shapes.Count
        .Shapes("Fc,90,d_Modele").Copy
        .Paste

        Set ShapeFc90 = .Shapes(NbShapes + 1)
        With ShapeFc90
           .Name = "Fc90d_" & Format(NbShapes + 1, "00")
           .Top = 97
           .Left = 445
           For I = 1 To .GroupItems.Count
               With .GroupItems(I)
                    Select Case .Name
                           Case "Numerateur"
                                .TextFrame2.TextRange = Format(Num1, "#0.00") & " * " & Format(Num2, "#0.00")
                           Case "Denominateur"
                                .TextFrame2.TextRange = Format(Denum, "#0.00") & "D"
                           Case "Resultat"
                                .TextFrame2.TextRange = Format(Resultat, "#0.00") & " MPa"
                    End Select
                End With
           Next I
        End With

        .Range("ResultatEquation").Offset(0, 1) = ShapeFc90.Name

   End With

End Sub

La macro est lancée par l'événement Clic-droit sur la cellule nommée ResultatEquation dans l'onglet Equations

Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)

        If Target.Count > 1 Then Exit Sub

        If Not Intersect(Target, Range("ResultatEquation")) Is Nothing Then

           With Target
                Target.Offset(0, 1) = ""
                CreerShapeFc90d .Offset(0, -3), .Offset(0, -2), .Offset(0, -1), .Value
           End With

        End If

        Cancel = True

End Sub

Si vous avez d'autres équations à créer, il vous faut créer vos modèles avec autant de shapes que nécessaires, lui donner le nom de l'équation comme pour "Fc,90,d_Modele", puis créer vos procédures avec les paramètres.

Je ne programme jamais donc il faut aussi m'expliquer les étapes "basiques" je crois.

Il faut créer un bouton sur résultat?
Il faut créer l'equation ou c'est VB qui s'en charge?

Faut-il renommer des plages de cellules? j'arrive à sélectionner la plage t_valeurs mais pas celle nommée Resultatequation

Voici une autre équation pour l'exemple a créer :

image

Il ne s'agit pas ici de programmation dans un premier temps.

Ouvrez le fichier que je vous ai envoyé et faites apparaître le volet sélection (Accueil-Edition-Rechercher et sélectionner-Volet sélection) comme ci-dessous.

Copiez-collez la forme qui s'appelle Fc,90d_Modele et modifiez son nom avec celui de votre nouvelle équation.

Dans le vidage d'écran, vous voyez que la forme est un groupement de 4 autres formes pour les besoins de l'équation.

Si vous devez ajouter des paramètres supplémentaires, cliquez sur la forme et clic-droit puis Grouper - Dissocier. Le plus simple est de se fier à la présentation avec les valeurs numériques.

Une fois que vous aurez réalisé votre nouvelle forme, mettez-votre fichier en ligne avec vos valeurs numériques positionnées comme elles doivent apparaître.

capture

Bonjour,

j'ai essayé en page 2 de retranscrire la même méthode que vous mais ca ne fonctionne pas. je joins le message d'erreur qui s'affiche (je travaille sur Mac) :

image

D'autre part comment peut-on afficher des parenthèses s'il y a lieu. Dans la division comment faire apparaitre racine 2 (avec le symbole qui va bien)?

Pour les crochets, les barres, les racines, il faut simplement agrandir la formule et faire des captures d'écran de chaque partie et recoller les morceaux.

Les shapes At_Barre, At_CrochetFin At_CrochetDebut sont en fait des images.

capture

Pour créer une nouvelle équation, il vous faut d'abord modéliser l'équation avec les valeurs attendues comme représenté ci-dessus. Vous rebaptisez ensuite votre shapes. Il faut seulement qu'on puisse retrouver ces nom dans la procédure VBA qui crée la forme.

Ensuite dans un module standard comme pour l'autre équation :

Sub CreerShapeAt(ByVal Num1 As Double, ByVal Num2 As Double, ByVal Num3 As Double, ByVal Denum1 As Double, ByVal Denum2 As Double, ByVal Resultat As Double)

Dim ShEquations As Worksheet
Dim ShapeAt As Shape
Dim I As Integer, NbShapes As Integer

   Set ShEquations = Sheets("Equation At")
   With ShEquations

        NbShapes = .Shapes.Count
        .Shapes("At_Modele").Copy
        .Paste

        Set ShapeAt = .Shapes(NbShapes + 1)
        With ShapeAt
           .Name = "At_" & Format(NbShapes + 1, "00")
           .Top = ShEquations.Range("J40").Top
           .Left = ShEquations.Range("J40").Left
           For I = 1 To .GroupItems.Count
               With .GroupItems(I)
                    Select Case .Name
                           Case "At_Numerateur1"
                                .TextFrame2.TextRange = Format(Num1, "#0")
                           Case "At_Numerateur2"
                                .TextFrame2.TextRange = Format(Num2, "#0.00") & " * " & Format(Num3, "#0.00")
                           Case "At_Denominateur1"
                                .TextFrame2.TextRange = Format(Denum1, "#0")
                           Case "At_Denominateur2"
                                .TextFrame2.TextRange = Format(Denum2, "#0")
                           Case "At_Resultat"
                                .TextFrame2.TextRange = Format(Resultat, "#0.00") & " MPa"
                    End Select
                End With
           Next I
        End With

        .Range("ResultatEquation").Offset(0, 1) = ShapeAt.Name

   End With

End Sub

Dans le module d'onglet :

Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)

        If Target.Count > 1 Then Exit Sub

        If Not Intersect(Target, Range("ResultatEquation")) Is Nothing Then
           With Target
                Target.Offset(0, 1) = ""
                CreerShapeAt .Offset(0, -5), .Offset(0, -4), .Offset(0, -3), .Offset(0, -2), .Offset(0, -1), .Value
           End With
        End If
        Cancel = True

End Sub

Le fichier :

ok ok Je crois que je commence à comprendre certaines choses.

pour la partie "graphique", je crée mon équation avec des formes, des zones de texte et des captures d'écran. Je renomme tout ces éléments. Pour que ce soit plus pratique, puis-je renommer ces élément avec un nom plus factuel tel que "fyb" à la place de "At_Numerateur1" ou bien c'est une condition sine qua none à l'écriture de la macro?

Dans les macro je ne retrouve pas le nom des formes je ne comprend pas ce qu'elles deviennent / comment elles sont gérées et intégrées à la macro

Pour finir, les données utiles à l'équations doivent être obligatoirement ordonnées dans un tableau ou bien on peut aller les chercher n'importe où dans la feuille? par exemple en début de feuille où je renseigne toutes les caractéristiques de mon étude?

pour la partie "graphique", je crée mon équation avec des formes, des zones de texte et des captures d'écran. Je renomme tout ces éléments. Pour que ce soit plus pratique, puis-je renommer ces élément avec un nom plus factuel tel que "fyb" à la place de "At_Numerateur1" ou bien c'est une condition sine qua none à l'écriture de la macro?

Vous pouvez renommer chaque forme comme vous le voulez à condition de retrouver son nom dans le code (pour celles qui doivent contenir une valeur) comme ci-dessous :

 Case "At_Numerateur1"
                                .TextFrame2.TextRange = Format(Num1, "#0")

Dans les macro je ne retrouve pas le nom des formes je ne comprend pas ce qu'elles deviennent / comment elles sont gérées et intégrées à la macro

Voir la partie de code ci-dessus.

Case "At_Numerateur1"

At_Niumerateur1 est bien le nom d'une des formes.

Dans

.TextFrame2.TextRange = Format(Num1, "#0")

Dans le code ci-dessus, Num1 et les autres champs sont passés en paramètre par :

Sub CreerShapeAt(ByVal Num1 As Double, ByVal Num2 As Double, ByVal Num3 As Double, ByVal Denum1 As Double, ByVal Denum2 As Double, ByVal Resultat As Double) 

Les valeurs sont passées par l'événement du module de l'onglet :

          With Target
                Target.Offset(0, 1) = ""
                CreerShapeAt .Offset(0, -5), .Offset(0, -4), .Offset(0, -3), .Offset(0, -2), .Offset(0, -1), .Value
           End With

Pour finir, les données utiles à l'équations doivent être obligatoirement ordonnées dans un tableau ou bien on peut aller les chercher n'importe où dans la feuille? par exemple en début de feuille où je renseigne toutes les caractéristiques de mon étude?

Vous pouvez aller chercher vos valeurs où vous voulez. Le plus simple dans ce cas est de nommer vos zones :

Par exemple, on aurait :

           With Target
                Target.Offset(0, 1) = ""
                CreerShapeAt Range("Numerateur1"), Range("Numerateur2"), etc....
           End With

J'ai essayé d'appliquer la macro dans la feuil1 pour l'équation NCRD (lignes 35,36,...,40), la macro ne s'exécute pas...je pense que j'ai omis les formes "en formes de formes" (autres que les valeurs). C'est à ces formes que je faisais allusion dans mon derniers message. Je ne les voit pas dans le script de la macro.

Pouvez-vous dans votre réponse expliciter les erreurs de mon codage?

Par anticipation, peut on attribuer le clic droit qui génèrerait toutes les équations en une seule et même case?

C'est bien vous avez compris.

Les zones nommées doivent être notées entre guillemets

Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)

        If Target.Count > 1 Then Exit Sub

        If Not Intersect(Target, Range("B33")) Is Nothing Then
           With Target
                Target.Offset(0, 1) = ""
                CreerShapeNCRD Range("A"), Range("fyb"), Range("gammam0"), Range("NCRDresult")
           End With
        End If
        Cancel = True

End Sub

Il vaut peut-être mieux placer le nom de la forme dans la cellule C33

       
        .Range("B33").Offset(0, 1) = ShapeNCRD.Name

En ce qui concerne les autres formes, elles sont copiées avec le groupement du modèle, on n'a donc pas besoin de les redéfinir.

Sinon :

Par anticipation, peut on attribuer le clic droit qui génèrerait toutes les équations en une seule et même case?

Oui, mais il faudrait préciser ce qu'il faudrait faire car avec toutes les données dans l'onglet, il y a de quoi s'y perdre.

J'ai ajouté les guillemets aux zones nommées, j'ai modifié le clic droit en C33

j'ai tenté le coup, rien ne se passe mis a part un clic droit "normal"

j'ai après ajouté des guillemets dans le module comme suit :

Select Case .Name
Case "NCRD_Numerateur1"
.TextFrame2.TextRange = Format("A", "#0") & " x " & Format("fyb", "#0")
Case "NCRD_Denominateur1"
.TextFrame2.TextRange = Format("gammam0", "#0")
Case "NCRD_Resultat"
.TextFrame2.TextRange = Format("NCRDresult", "#0.00") & " MPa"
End Select

et résultat idem que pour l'essai précédent...helpppplease

Rechercher des sujets similaires à "mise page equation"