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 :
Exemple de formule à obtenir en automatisant la partie chiffrée en référence aux cases déjà remplies dans mon classeur
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.
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 :
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.
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) :
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.
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...