edouard_berth
Messages postés17Date d'inscriptionlundi 4 juillet 2005StatutMembreDernière intervention 8 août 2005
-
6 août 2005 à 19:44
cs_etniqs
Messages postés201Date d'inscriptionmardi 7 octobre 2003StatutMembreDernière intervention10 mai 2016
-
8 août 2005 à 10:27
Bonjour,
J'ai une macro qui me renvoie des valeurs en string qui correspondent à des variables que j'ai déclaré précedemment, et je n'arrive pas à faire reconnaître mes chaînes comme telles.
Dans l'exemple suivant, je voudrais obtenir 98 dans ma msgbox à partir de "ki"...
Sub Conversion()
k1 = 98
I = 1
MsgBox ("k" & i) 'Renvoie bien sûr "ki"
End Sub
J'ai essayé tout un tas de combinaisons avec Cint, Cstr ... comme me l'avait conseillé Daniel,
mais je n'arrive à rien.
cs_etniqs
Messages postés201Date d'inscriptionmardi 7 octobre 2003StatutMembreDernière intervention10 mai 2016 8 août 2005 à 09:22
forcement, y'a une erreur puisque ce devrait être :
dim nm as integer
mais bon, c'est pas possible de le faire comme ça, il faudrait récupérer l'adresse mémoire de ta variable... sinon,
pourquoi ne fais-tu pas un tableau de type variant avec des string qui sont "k1 = 98"
dim tableau as variant 'variant pour avoir les propriétés de supp, ajout,...
exemple : tableau(56)="k1=98"
tu as donc
function conversion(byval truc1 as string, byval truc2 as string) as integer
truc = truc1+truc2
for i = 0 to ubound(tableau)
if truc = left(k1,instr(0,tableau(i),"=") then 'tu cherches ton k1
conversion= cint(mid(tableau(i),instrrev(tableau(i),"="),len(tableau(i))
exit function
end if
next i
msgbox "a pas trouvé le truc"
end function
edouard_berth
Messages postés17Date d'inscriptionlundi 4 juillet 2005StatutMembreDernière intervention 8 août 2005 7 août 2005 à 11:48
Désolé d'insiter, mais je n'y arrive toujours pas. La solution de etniks me renvoie une incompatibilité de type...
Ce que je ne comprends pas c'est pourquoi à partir du moment ou j'obtiens la chaîne de caractère correspondant à ma variable "k1" correspondant à k1, la fonction Cint ne suffit pas m'ôter les "" pour reconnaître la variable...
Je vais tenter de passer par un tableau, mais le problème, c'est que ma chaîne en string es déjà renvoyée par un tableau genre tblo(5)="k1"...
cs_DARKSIDIOUS
Messages postés15814Date d'inscriptionjeudi 8 août 2002StatutMembreDernière intervention 4 mars 2013130 7 août 2005 à 13:08
Ben tu es en VB, tu n'est pas en LISP, tes variables sont typés. La
fonction CInt convertit une chaîne en nombre, ca d'accord, mais elle
n'interprête pas la chaîne. Par exemple, Cint("8 + 3") te renvoie pas
11 mais provoque une erreur de type incompatible, normal !
C'est pour cà, tu n'a guère le choix, à part passer par un tableau, je ne vois pas !
DarK Sidious
Un API Viewer (pour le VB, VB.NET, C, C# et Delphi) : www.ProgOtoP.com/popapi/
edouard_berth
Messages postés17Date d'inscriptionlundi 4 juillet 2005StatutMembreDernière intervention 8 août 2005 7 août 2005 à 17:53
J'ai trouvé une solution à mon problème qui, je dois le reconnaître n'est pas bien élégante...
Je vuolais initialement convertir les nombres en chiffres romains d'une chaîne en chiffres arabes, et ma question visait à m'éviter la lourdeur des "if" successifs pour t et t-1...
Je ne doute pas qu'il y ai plus simple, mais le plaisir de réussir tout seul...
Merci quand même
Sub Romains()
Dim VF As Integer
For k = 3 To 24
Dim Tableau()
Compteur = 1
For I = 0 To Len(Cells(k, 1)) - 1
clef = Mid(Cells(k, 1), I + 1, 1)
ReDim Preserve Tableau(1 To Compteur)
Tableau(Compteur) = clef
Compteur = Compteur + 1
Next
t = 2
If Len(Cells(k, 1)) > 1 Then
While t <= Len(Cells(k, 1))
If Tableau(t) "I" Then Tableau(t) 1If Tableau(t) "V" Then Tableau(t) 5If Tableau(t) "X" Then Tableau(t) 10If Tableau(t) "L" Then Tableau(t) 50If Tableau(t) "D" Then Tableau(t) 100If Tableau(t) "M" Then Tableau(t) 1000If Tableau(t - 1) "I" Then Tableau(t - 1) 1If Tableau(t - 1) "V" Then Tableau(t - 1) 5If Tableau(t - 1) "X" Then Tableau(t - 1) 10If Tableau(t - 1) "L" Then Tableau(t - 1) 50If Tableau(t - 1) "D" Then Tableau(t - 1) 100If Tableau(t - 1) "M" Then Tableau(t - 1) 1000
If Tableau(t - 1) >= Tableau(t) Then
If t < Len(Cells(k, 1)) Then
VF = VF + Tableau(t - 1)
Else: VF = VF + Tableau(t - 1) + Tableau(t)
End If
t = t + 1
Else: VF = VF + Tableau(t) - Tableau(t - 1)
t = t + 2
End If
Wend
ElseIf Len(Cells(k, 1)) = 1 Then If Tableau(1) "I" Then Tableau(1) 1 If Tableau(1) "V" Then Tableau(1) 5 If Tableau(1) "X" Then Tableau(1) 10 If Tableau(1) "L" Then Tableau(1) 50 If Tableau(1) "D" Then Tableau(1) 100 If Tableau(1) "M" Then Tableau(1) 1000
RicoNuch
Messages postés140Date d'inscriptionmercredi 18 juin 2003StatutMembreDernière intervention16 décembre 2006 7 août 2005 à 19:18
Il y avait aussi une solution, mais un peu lourde à mettre en place (c'est pourquoi je ne l'ai pas donnée), qui consistait à créer une collection "encapsulée" comme décrite dans les tutos msdn, qui te permet d'appeler indifféremment l'élément de la collection par son index numérique ou son index de type « string ».