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

Signaler
Messages postés
50
Date d'inscription
mercredi 20 juillet 2005
Statut
Membre
Dernière intervention
4 septembre 2007
-
 ma3lama -
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

Messages postés
131
Date d'inscription
vendredi 18 août 2006
Statut
Membre
Dernière intervention
17 mars 2010

Essaye de dimensionner ta variable en Double au lieu de Long ça peut venir de là
Messages postés
4822
Date d'inscription
lundi 11 novembre 2002
Statut
Membre
Dernière intervention
15 novembre 2016
12
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

 
Messages postés
50
Date d'inscription
mercredi 20 juillet 2005
Statut
Membre
Dernière intervention
4 septembre 2007

Non rien y fait... (mme type d'erreur) en plus Long est plus approprié pour des valeurs d'itération? Non?

Niikko
Messages postés
131
Date d'inscription
vendredi 18 août 2006
Statut
Membre
Dernière intervention
17 mars 2010

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

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+
Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
18
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>
Messages postés
50
Date d'inscription
mercredi 20 juillet 2005
Statut
Membre
Dernière intervention
4 septembre 2007

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
Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
18
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>
Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
18
heu pas CDlb mais CDbl 
(j'ai inversé les lettres)

@++

<hr width="100%" size="2" />( Nouveau forum : Exclusivement Office & VBA/STRONG>
Messages postés
50
Date d'inscription
mercredi 20 juillet 2005
Statut
Membre
Dernière intervention
4 septembre 2007

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
Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
18
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
Messages postés
50
Date d'inscription
mercredi 20 juillet 2005
Statut
Membre
Dernière intervention
4 septembre 2007

Niikko
Messages postés
50
Date d'inscription
mercredi 20 juillet 2005
Statut
Membre
Dernière intervention
4 septembre 2007

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
Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
18
^^ 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
Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
18
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
Messages postés
50
Date d'inscription
mercredi 20 juillet 2005
Statut
Membre
Dernière intervention
4 septembre 2007

Malheureusement on retombe sur une erreur de type 13 !
c'est à n'y rien comprendre!
Niikko
Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
18
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
Messages postés
50
Date d'inscription
mercredi 20 juillet 2005
Statut
Membre
Dernière intervention
4 septembre 2007

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
Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
18
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
Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
18
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