Problème de type de données en vba ecel

niikkoo Messages postés 50 Date d'inscription mercredi 20 juillet 2005 Statut Membre Dernière intervention 4 septembre 2007 - 22 août 2007 à 12:42
 ma3lama - 27 mai 2008 à 19:27
Salut,

voici mon code:

for i=...to
forj=...to

'Calcul de l'incomplet
 
   'Cas ou la quantité est réalisée en plusieurs tours
   If InStr(cells(i,j).Formula, "=") Then
  
     Dim MesValeurs() As String, l As Long
     MesValeurs = Split(beton.Formula, "+")
     MesValeurs(LBound(MesValeurs)) = Replace(MesValeurs(LBound(MesValeurs)), "=", vbNullString)
    
     For l = LBound(MesValeurs) To UBound(MesValeurs)
   
    Select Case MesValeurs(l)
       Case 0
        v = 0
      
       Case Is < 6
        v = 6 - MesValeurs(l)
      
       Case Else
      
        u1 = MesValeurs(l) Mod 6
        u2 = MesValeurs(l) Mod 7
        u3 = MesValeurs(l) Mod 8
      
        mini1 = Min(u1, u2)
        v = Min(mini1, u3)
      
     End Select
        
         totalv = cumulp_v
         cumulv = cumulp_v + v
         cumulp_v = cumulv
next j
next i

quand je renseigne les cellules concernées dans mon tableau excel avec des entiers pas de problème.
Par contre quand je change avec des nombres avec une précision de un chiffre après la virgule...ça déconne (erreur de type 13)
En essayant de forcer un type de données genre u=CDbl(MesValeurs(l)), il me renvoie des valeurs abhérentesex: mesvaleurs(l) 4,5> u=6  !!!!!!
Voyez vous une erreur dans le code?

Niikko

27 réponses

nanardino64 Messages postés 131 Date d'inscription vendredi 18 août 2006 Statut Membre Dernière intervention 17 mars 2010
22 août 2007 à 13:04
Essaye de dimensionner ta variable en Double au lieu de Long ça peut venir de là
0
cs_Exploreur Messages postés 4821 Date d'inscription lundi 11 novembre 2002 Statut Membre Dernière intervention 15 novembre 2016 15
22 août 2007 à 13:33
Salut,

Peut-être aussi à cause du symbole des décimal dans les paramètes régionaux de ton Pc, le point ou la virgule...

A+
Exploreur

 Linux a un noyau, Windows un pépin

 
0
niikkoo Messages postés 50 Date d'inscription mercredi 20 juillet 2005 Statut Membre Dernière intervention 4 septembre 2007
22 août 2007 à 13:35
Non rien y fait... (mme type d'erreur) en plus Long est plus approprié pour des valeurs d'itération? Non?

Niikko
0
nanardino64 Messages postés 131 Date d'inscription vendredi 18 août 2006 Statut Membre Dernière intervention 17 mars 2010
22 août 2007 à 16:19
Pardon, je t'ai dit une bêtise en effet...
Je vais me lancer dans des recherches plus approfondies
0

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

Posez votre question
nanardino64 Messages postés 131 Date d'inscription vendredi 18 août 2006 Statut Membre Dernière intervention 17 mars 2010
22 août 2007 à 16:32
Désolé mais je pense pas que je puisse t'aider je vois rien de déconnant en tout cas. En plus j'ai du mal à rentrer dans le code vu que je vois pas vraiment ce qu'il y a autour ni ce que tu veux faire.
Je laisse la main à exploreur et je lui fais confiance pour te trouver la bonne solution!
a+
0
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
23 août 2007 à 06:38
salut,

pour que les autres suivent...

il s'agit d'extraire des données de style    =1,2+3
Bref, quand tu commences à Ubound(MesValeurs) (pour la première valeur), n'oublie pas que tu n'as pas un nombre, mais le signe égal puis le nombre. Faut penser à le gérer !

@++

<hr width="100%" size="2" />( Nouveau forum : Exclusivement Office & VBA/STRONG>
0
niikkoo Messages postés 50 Date d'inscription mercredi 20 juillet 2005 Statut Membre Dernière intervention 4 septembre 2007
23 août 2007 à 08:54
salut,

le problème n'est visiblement pas dans la gestion du signe égal... qd je fais un simple controle msgbox sur MesValeurs(i) la sub détecte bien le nombre
ex:
= 4,5+2
j'ai bien
MesValeurs(0) = 4,5

c'est sur le traitement que ça plante => MesValeurs(0) mod 3 => "type mismatch"

Niikko
0
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
23 août 2007 à 10:33
c'est normal;, tu as déclaré ton Tableau de données en tant que String.
Il faut convertir :

CDlb(MesValeurs(0)) mod 3

@++

<hr width="100%" size="2" />( Nouveau forum : Exclusivement Office & VBA/STRONG>
0
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
23 août 2007 à 10:33
heu pas CDlb mais CDbl 
(j'ai inversé les lettres)

@++

<hr width="100%" size="2" />( Nouveau forum : Exclusivement Office & VBA/STRONG>
0
niikkoo Messages postés 50 Date d'inscription mercredi 20 juillet 2005 Statut Membre Dernière intervention 4 septembre 2007
23 août 2007 à 11:42
Nope
j'avais déjà essayé avant de poster et j'ai le même type d'erreur
Par ailleurs si je me recrée une variable de type
u = CDbl (MesValeurs(i))
avant de faire le traitement j'obtiens des valeurs déconnantes (cf premier post , ex: u(4,5) = 6 !!!!)

Niikko
0
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
23 août 2007 à 14:52
et t'as essayé en combinant la conversion Double & la conversion de valeur (Val) ?
Car ce doit aussi être un problème de séparateur :

CDbl (Val(MesValeurs(i)))

@++

<hr size="2" width="100%" />( Nouveau forum : Exclusivement Office & VBA
0
niikkoo Messages postés 50 Date d'inscription mercredi 20 juillet 2005 Statut Membre Dernière intervention 4 septembre 2007
23 août 2007 à 15:25
Niikko
0
niikkoo Messages postés 50 Date d'inscription mercredi 20 juillet 2005 Statut Membre Dernière intervention 4 septembre 2007
23 août 2007 à 15:27
Encore une fois très bien vu Mortalino!
il n'y a plus de pb de type de données...
... sauf qu'il me fait un maudit arrondi!

Niikko
0
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
23 août 2007 à 15:28
^^ toujours faire un copier coller avant de poster 
Je te rassure, ça me gave aussi quand ça m'arrive

@++

<hr size="2" width="100%" />( Nouveau forum : Exclusivement Office & VBA
0
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
23 août 2007 à 15:32
eh eh là c'est normal, autant pour moi, val prend la valeur entière.
Là il faut faire un Replace :

CDbl(Replace(MesValeurs(i), ",", "."))

@++

<hr size="2" width="100%" />( Nouveau forum : Exclusivement Office & VBA
0
niikkoo Messages postés 50 Date d'inscription mercredi 20 juillet 2005 Statut Membre Dernière intervention 4 septembre 2007
23 août 2007 à 16:32
Malheureusement on retombe sur une erreur de type 13 !
c'est à n'y rien comprendre!
Niikko
0
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
23 août 2007 à 16:44
bizarre,
CDbl(Replace("4,5", ",", "."))
me retourne bien 4.5

avant cette manip, inscrit
Debug.Print MesValeurs(i)
et mets nous ce qu'il y a dans la fenêtre d'exécution (Ctrl G)
@++

<hr size="2" width="100%" />( Nouveau forum : Exclusivement Office & VBA
0
niikkoo Messages postés 50 Date d'inscription mercredi 20 juillet 2005 Statut Membre Dernière intervention 4 septembre 2007
23 août 2007 à 18:32
pour un test avec = 4+ 3+5+7,5
j'ai bien dans la fenêtre d'éxé
4
3
5
7.5

....mais ça plante quand même
Niikko
0
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
23 août 2007 à 20:24
ok, t'es mis2 ou 3 commentaires dans moon code :

Sub nbjhbhjv()

'Calcul de l'incomplet
 
   'Cas
ou la quantité est réalisée en plusieurs
tours
   
   
   
   ' *** If
InStr(Cells(i, j).Formula, "=") Then
   ' ***
manque le End If en bas.
  
     Dim MesValeurs() As String, l As Long
     MesValeurs = Split("=4+3+5+7,5", "+")
     MesValeurs(LBound(MesValeurs)) = Replace(MesValeurs(LBound(MesValeurs)), "=", vbNullString)
    
     For l = LBound(MesValeurs) To UBound(MesValeurs)
   
    Select Case MesValeurs(l)
       Case 0
        v = 0
      
       Case Is < 6
        v = 6 - MesValeurs(l)
      
       Case Else
'
***********************************************************
'       ------>     Bah chez moi ça passe nickel !!!      
'*
        u1 = CDbl(Replace(MesValeurs(l), ",", ".")) Mod 6  '*
        u2 = CDbl(Replace(MesValeurs(l), ",", ".")) Mod 7  '*
        u3 = CDbl(Replace(MesValeurs(l), ",", ".")) Mod 8  '*
'
***********************************************************
      
        mini1 = Min(u1, u2)
        v = Min(mini1, u3)
      
     End Select
        
    ' ***
cumulp_v est il dans une autre Sub ou Function ? Si oui, faut nous le
préciser _
            car ça peut avoir son
importance  ;)
            
         totalv = cumulp_v
         cumulv = cumulp_v + v
         cumulp_v = cumulv
    Next l
End Sub

~
<small>[code.aspx?ID=39466 Mortalino] ~
Colorisation automatique</small>

@++

<hr size="2" width="100%" />( Nouveau forum : Exclusivement Office & VBA
0
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
23 août 2007 à 20:25
Chez toi, dans Excel, quand tu tapes sur le symbole décimal, c'est la virgule ou le point

@++

<hr size="2" width="100%" />( Nouveau forum : Exclusivement Office & VBA
0
Rejoignez-nous