Mettre en indice dans un Msgbox

Résolu
MEUCORACAO - 30 avril 2013 à 09:50
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 - 10 mai 2013 à 17:42
Bonjour à tous,

Je reviens pour un sujet assez flou sur le net car je ne trouve pas la réponse à mon sujet. En effet, je souhaite afficher une formule chimique dans un Msgbox en mettant les chiffres stœchiométriques en indice. Ma formule chimique est stocké dans une variable :

For j = 1 To Len(Molecule)
      If IsNumeric(Mid(Molecule, j, 1)) Then
            With Molecule.Characters(Start:=j, Length:=1).Font
                    .Subscript = True
            End With
      End If
Next j
 
        Reponse = MsgBox("Êtes-vous sûr de vouloir travailler avec " & Molecule & " comme réactif " & Inc + 1 & " ?", vbYesNo, "Voulez-vous poursuivre ?")


Je sais que cela ne peut pas marcher car on s'en sert pour les cellules de cette méthode mais n'y aurait-il pas une méthode comparable ?

Je vous remercie par avance pour votre réponse.
Bien cordialement,

Anthony
A voir également:

31 réponses

ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
3 mai 2013 à 11:55
Je t'attendais, MERUCORACAO...
J'ai un peu fait travailler mes méninges === Regarde donc ce que fait ceci, que je viens de bâcler :
Sur un userform, deux labels label1 et label2 (que tu places n'importe où) un bouton de commande CommandButton1 (de préférence au bas du userform pour y voir clair)
et ce code :
Private Sub UserForm_Initialize()
  Me.Move 0, 0, 500, 1000
  With Label1
    .Font.Name = "Courier"
    .Font.Size = 10
    .Move 10, 20, 600, 20
    .BackStyle = 0
    .Caption = ""
    
  End With
  With Label2
    .Font.Name = "Courier"
    .Font.Size = 10
    .Move Label1.Left, Label1.Top + 5, Label1.Width, Label1.Height
    .BackStyle = 0
    .Caption = ""
  End With
End Sub

Private Sub CommandButton1_Click()
Dim toto As String, c1 As String, c2 As String, i As Integer, ouille As Boolean, ahlala As String
  toto "2(SO4)3Fe2 + 12K(SCN) 2K3Fe(SCN)6 + 3K2SO4"
  c1 = toto
  c2 = toto
  ahlala = " (+="
  For i = 1 To Len(toto)
    'quoi = Mid(toto, i, 1)
    If i > 1 Then
      If IsNumeric(Mid(toto, i, 1)) Then
        If Not IsNumeric(Mid(toto, i - 1, 1)) And InStr(ahlala, Mid(toto, i - 1, 1)) = 0 Then
          ouille = True
        End If
      End If
    End If
    If ouille Then
      Mid(c1, i, 1) = " "
    Else
      Mid(c2, i, 1) = " "
    End If
    ouille = False
  Next
  Label1.Caption = c1
  Label2.Caption = c2
End Sub

Comme tu le vois, je n'y utilise que DEUX labels pour traiter toute une chaîne.
Cela devrait te donner des idées.
Observe que j'ai choisi une police à espacement fixe. Indispensable !
Comme tu le vois, les chiffres en sous-exposition sont de la même taille que ceux en exposition normale.
On, peut toutefois aller plus loin, mais en calculant alors la largeur graphique tout au long du traitement.
Comment calculer les largeurs graphiques ? ===>> tu trouveras une source que j'ai déposée à ce propos (il va te falloir bûcher pour la comprendre).
A toi, maintenant, de prendre le relais et de perfectionner comme tu l'entends. L'intéressé (le seul, jusqu'à présent), c'est toi.
Bon week-end.


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
3
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
30 avril 2013 à 09:54
Bonjour,
Utilise alors un userform (construit selon ton choix et ta volonté) en lieu et place d'une messagebox.


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
0
Bonjour ucfoutu,

J'ai envisageai cette option, le problème est que ce qu'il faut écrire dans le Msgbox est loin d'être figé. En effet, il s'agit de rentrer un réactif chimique par exemple BiCl3. La Msgbox lui demande confirmation en écrivant BiCl3 avec le 3 en indice. Mais il peut très bien écrire C4H10N2B. Donc il n'y aurait pas du tout le même nombre de textbox dans l'userform. Faire quelque chose de variable est dur dans un userform, non? A part si vous connaissez une façon simple pour y arriver. Comprenez la subtilité du truc?

Merci encore de votre aide
Cordialement
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
30 avril 2013 à 11:53
Comprenez la subtilité du truc?

Je ne comprends que ce qui est précisé sans la moindre ambiguïté.
Je crois comprendre qu'il s'agit d'insérer un nombre variable de textboxes ?
La méthode Add est alors à utiliser

PS : je ne comprends alors pas comment une messagebox aurait pu faire l'affaire, sans même tenir compte des caractères !

________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Ok pour la méthode, je vais essayer cela.

Je faisais une concaténation de variable dans une seule et j'affiche alors la variable concaténée. Si une variable est NULL alors elle n'affiche rien. Cela marche très bien mais je n'ai pas les chiffres en indices, d'où mon problème.

Y-a-il moyen de mettre les textbox tout en les masquant (le cadre blanc autour). Faire comme-ci il n'y avait que du texte et pas de textbox?

Merci beaucoup pour votre aide.
0
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
30 avril 2013 à 17:19
Bonjour,

Regarde le lien suivant
LIEN

Ce n'est pas très simple, mais ça fonctionne...

MPi²
Pour ceux qui programment sous Office, n'oubliez pas qu'il existe un forum dédié à ces applications VBA....... ICI
0
Bonjour MPi,

Merci de t'occuper de mon problème. J'ai lu le lien mais le programme est très complexe, je ne comprends pas tout. En plus, c'est dommage que je n'arrive pas à télécharger un fichier test car Savefile.com ne fonctionne pas, il me demande sans arrêt de télécharger 7zip. Pensez-vous qu'il y a un truc plus simple. Je lis dans certains forums étrangers qu'il faut utiliser des Richtextbox mais celles-ci ne sont plus disponibles sur Excel 2010.
Je bloque énormément et je vois que c'est un sujet qui reste d'actualité car peu de personnes ont la réponse.

Si vous avez des idées, merci de me les communiquer. Si je trouve, je posterai la réponse,
Bien cordialement,

Anthony
0
Utilisateur anonyme
2 mai 2013 à 14:48
Bonjour,
le problème est que ce qu'il faut écrire dans le Msgbox est loin d'être figé.

Ce ne devrait pas être un MsgBox mais un InputBox alors?

Cordialement


CF2i - Guadeloupe
Ingénierie Informatique
0
Ben non pourquoi une inputbox? La msgbox est juste là pour demander confirmation à l'interlocuteur s'il est d'accord avec la formule chimique qu'il à rentrer précédemment. Donc j'affiche juste des variables précédentes. Le problème est que je souhaite avoir les chiffres de la formule chimique en indice et j'arrive juste à les afficher normalement mais pas en indice.

Cordialement
0
Utilisateur anonyme
2 mai 2013 à 15:52
Pas très clair... moi j'avais vu ça:
le problème est que ce qu'il faut écrire dans le Msgbox

Maintenant si c'est un MsgBox c'est un Msgbox.

Qu'appelles-tu un indice? entre parenthèses?
donne un exemple de comme voudrai-tu l'afficher avec différentes formules...

Cordialement


CF2i - Guadeloupe
Ingénierie Informatique
0
Oui quand j'ai dit qu'il fallait écrire dans le message il fallait rentrer le message et afficher une variable concaténée des paramètres rentrés par l'utilisateur.

Un indice c'est un subscript (contraire de l'exposant). Par contre, je ne vois ce que tu entends par parenthèses car je n'en ai pas parlé...

Si tu veux, ce qui va s'afficher est une formule chimique par exemple H2O ou CO2 ou CuCl2 par exemple. Et donc je voudrais que le chiffre dans les formules chimiques soit afficher en indice. Je ne peux te montrer, car il n'y a pas la fonction dans l'éditeur de texte de ce site.

Comprends-tu le problème?
Merci de ton aide,

Cordialement
0
Utilisateur anonyme
2 mai 2013 à 17:43
Ok,
Je ne sais pas si ça va t'aider...
Essaye ça:
 Dim Formule As String
   Formule = "C78O"
   Dim Chiffre As String
   For i = 1 To Len(Formule)
      If IsNumeric(Mid(Formule, i, 1)) Then Chiffre = Chiffre & Mid(Formule, i, 1)
   Next
   MsgBox "La Formule " & Formule & " contient le chiffre " & Chiffre


Cordialement


CF2i - Guadeloupe
Ingénierie Informatique
0
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
2 mai 2013 à 21:02
Acive, le subscript est l'inverse de ce que tu vois pour ces chiffres, qui, eux, sont des superscripts (exposants)

H²O
N³O²H (je ne sais pas c'est quoi par contre, ce produit...)

Les contrôles Excel ne supportent pas ce genre de police, à ce que je sache.
Peut-être y aurait-il moyen en écrivant la formule dans une cellule qui, elle, est capable de l'afficher. Puis faire une image (copie-caméra) de cette cellule et l'afficher dans un contrôle Image sur un UserForm... (?!)


MPi²
Pour ceux qui programment sous Office, n'oubliez pas qu'il existe un forum dédié à ces applications VBA....... ICI
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
2 mai 2013 à 21:58
Pas besoin de passer par un contrôle image.
Sous VB6, on écrirait par Print dans une picturebox en faisant varier Currentx et CurrentY ainsi qu'en utilisant une taille de police différente selon que numérique ou non et selon position du numérique
Sous VBA (pas de pictureboxes) , on peut afficher des labels, accolés les uns au autres horizontalement et décalés selon les besoins verticalement (tant pour ce qui est de l'alignement que pour ce qui est de la taille). On peut même le faire avec des labels transparents.
Restera bien évidemment à :
Concaténer les contenus des textboxes contenant une saisie, déterminer ce qui doit ou non être mis en label "inférieur", etc ...
Cela nécessitera un algo capable de déterminer si un chiffre (en fonction de sa position dans un "mot" chimique. Le 2, dans deux molécules d'eau (2 H2O), ne doit par exemple à ma connaissance pas figurer comme le 2 qui suit le H dans "H2O") doit ou non être mis dans un label "inférieur". Et ce problème est déjà, à lui seul, une autre paire de manches, bien que relativement facile à résoudre, pour peu que l'on soit d'abord chimiste (avant d'être développeur).

________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
2 mai 2013 à 22:05
Et si l'on ne veut pas se fendre d'un algo : on laisse l'utilisateur (donc le chimiste) décider du déplacement vers le bas de chaque label (et de sa taille) lors de la saisie de chaque textbox. On le lui permet par le moyen (évènement, double-click, etc ...) de notre choix. On "traduit" ce choix par une valeur dans la propriété tag de la textbox et on s'en sert lors de l'affichage des labels correspondants.
On peut inventer d'autre manières, mais elles seront toutes, sans aucune exception, le fruit d'esprits créatifs (rien à voir avec le développement en soi, hein ...).


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
2 mai 2013 à 22:15
Ou encore (et ce sera toujours autre chose que de l'esprit de développeur... plutôt celui de "créativité débrouillarde") :
Un seul contrôle de saisie : une richtextbox au lieu de plusieurs textboxes. L'utilisateur y saisit sa formule en noir et en rouge, tous les caractères rouges devant être passés aux labels accolés en décalage vers le bas.
Il suffit alors d'une boucle sur les caractères de la rtb pour décider des décalages ou non.
Allez ... A vous d'en inventer d'autres ... Plein d'autres, s'il vous plait...


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
0
Utilisateur anonyme
3 mai 2013 à 02:31
Bonjour MPI²,
"Acive, le subscript est l'inverse de ce que tu vois pour ces chiffres, qui, eux, sont des superscripts (exposants) "
Ah ok !... c'st un peu comme "Carte à puce" dans Asterix alors, "tu me vois, tu ne me vois plus"

Par contre H²O, d'après mes souvenirs (hé oui ça remonte ) ce qui représente deux molécules de oxygène, ça s'écrit H2O.
Tout comme Le TriNitroToluène (produit très méchant!!!) qui s'écrit C7H5N3O6 par exemple, (sans puissances).

Par contre si on commence à parler configurations électroniques (par exemple) comme Le CU (Le Cuivre) qui est un métal de transition et qui a comme configuration électronique "1s² 2s²" etc...
La oui, mais nous (les développeurs) on a quand même la possibilité de connaitre le caractère à cette position (en occurrence un "²" c'est en ascii le code 253.

Voilà les gars, comme d'habitude j'ai pas compris grand chose de la demande et j'en suis presque sur que j'ai dit des bêtises concernant la chimie, mais bon, vous avez l'habitude de ma pardonner, non?

Cordialement


CF2i - Guadeloupe
Ingénierie Informatique
0
Utilisateur anonyme
3 mai 2013 à 02:34
Je viens de me relire:
Par contre H²O, d'après mes souvenirs (hé oui ça remonte ) ce qui représente deux molécules de oxygène, ça s'écrit H2O.

J'ai oublié une molécule d’hydrogène...


Cordialement


CF2i - Guadeloupe
Ingénierie Informatique
0
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
3 mai 2013 à 03:03
Tu me fais bien rire Acive
Moi et la chimie, c'est aux antipodes...
mais je me rappelle qu'on peut avoir des chiffres en indices et aussi des chiffres en "multiples", du genre
2HO²
sans savoir quel produit ça peut bien être...

MPi²
Pour ceux qui programment sous Office, n'oubliez pas qu'il existe un forum dédié à ces applications VBA....... ICI
0
Utilisateur anonyme
3 mai 2013 à 03:45
Hé bien, mpi² tu rejoints tout à fait mon raisonnement.
Nous on s'occupe de traiter les données, c'est tout.

D'ailleurs je me posais la question, MPI², ton psoudo, ce ne serait pas MPI2?

Cordialement


CF2i - Guadeloupe
Ingénierie Informatique
0
Rejoignez-nous