IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Tableau de String en tableau d'Integer [XL-2003]


Sujet :

Macros et VBA Excel

  1. #1
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    85
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2012
    Messages : 85
    Points : 96
    Points
    96
    Par défaut Tableau de String en tableau d'Integer
    Bonjour à tous,

    Je suis actuellement en projet et je dois gérer des fichiers textes bruts.

    Pour se faire je récupère toutes les données d'un fichier texte dans un tableau, ce tableau étant obligatoirement en string car pour récupérer ces valeurs j'utilise la fonction "split".

    Cependant il m'est demandé d'effectuer des opérations à partir des valeurs récupérées sur le fichier texte ( une moyenne en l'occurence).

    Pour se faire il me faudrait convertir mes strings en integers car il y a une incompatibilité de type quand j'additionne mes strings...

    Si qqun a une idée, je suis preneur !

    Cordialement

  2. #2
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 642
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 642
    Points : 34 349
    Points
    34 349
    Par défaut
    salut,

    peux-tu nous donner ton code VBA actuellement utilisé, qu'on puisse s'en servir de base et te donner des pistes les plus adéquates avec ton code existant ?

    Pour "forcer" la lecture en nombre, tu auras deux choses à faire
    - vérifier que la chaîne de caractères correspondrait à une valeur numérique (IsNumeric())
    - caster la chaîne de caractères en valeur numérique (CDbl())

  3. #3
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    85
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2012
    Messages : 85
    Points : 96
    Points
    96
    Par défaut
    Je vais essayé d'intégrer tout ça, merci beaucoup.
    Je t'envoie une petite partie de mon code qui en l'occurence me gène.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    Dim Tab_fin() As String
        Dim Tab_moy() As Variant
        'insérer les moyennes
            'mode read
     
        Set oTs = fso.OpenTextFile(sFichierTxt, ForReading)
     
        While Not oTs.AtEndOfStream
            sContenu1 = oTs.ReadAll
        Wend
        oTs.Close
     
        ' création de différents tableaux
        Tab_fin = Split(sContenu1, Chr(9))
        Tab_moy = Split(sContenu1, Chr(9))
     
        'calcul de la moyenne glissante
        x = nb_mod * nb_param + 1
        For i = (nb_param + 2) To UBound(Tab_moy)
            Tab_moy(i) = (Tab_moy(i) + Tab_moy(x + i) + Tab_moy(2 * x + i) + Tab_moy(3 * x + i) + Tab_moy(4 * x + i) + Tab_moy(5 * x + i) + Tab_moy(6 * x + i) + Tab_moy(7 * x + i) + Tab_moy(8 * x + i) + Tab_moy(9 * x + i)) / 10
        Next i
    Du coup si je fais ce que tu m'as recommandé, je peux remettre les valeurs numériques dans un autre fichier texte directement ou je dois faire une manipulation inverse ?

    Cordialement

    PS : gg les 10 000 points

  4. #4
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 642
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 642
    Points : 34 349
    Points
    34 349
    Par défaut
    Merci

    un changement simple du code avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Tab_moy(i) = (Cdbl(Tab_moy(i)) + Cdbl(Tab_moy(x + i)) + Cdbl(Tab_moy(2 * x + i)) + Cdbl(Tab_moy(3 * x + i)) + Cdbl(Tab_moy(4 * x + i)) + Cdbl(Tab_moy(5 * x + i)) + Cdbl(Tab_moy(6 * x + i)) + Cdbl(Tab_moy(7 * x + i)) + Cdbl(Tab_moy(8 * x + i)) + Cdbl(Tab_moy(9 * x + i))) / 10
    à voir qu'on pouvait faire un peu plus direct avec une boucle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    For j = 0 to 9
    Tab_moy(i) = Tab_Moy(i) + Cdbl(Tab_moy(j*x+i))
    Next j
    Tab_moy(i) = Tab_moy(i)/10

  5. #5
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    85
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2012
    Messages : 85
    Points : 96
    Points
    96
    Par défaut
    J'ai toujours une incompatibilité de types.
    J'ai essayé de décomposer au maximum mon code pour voir ou ça aurait pu buguer mais je ne trouve toujours pas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
        ' création de différents tableaux
        Tab_fin = Split(sContenu1, Chr(9))
        Tab_moy = Split(sContenu1, Chr(9))
     
        'calcul de la moyenne glissante
        x = nb_mod * nb_param + 1
        y = 0
        For i = (nb_param + 2) To UBound(Tab_moy)
            Tab_num(y) = (CDbl(Tab_moy(i)) + CDbl(Tab_moy(x + i)) + CDbl(Tab_moy(2 * x + i)) + CDbl(Tab_moy(3 * x + i)) + CDbl(Tab_moy(4 * x + i)) + CDbl(Tab_moy(5 * x + i)) + CDbl(Tab_moy(6 * x + i)) + CDbl(Tab_moy(7 * x + i)) + CDbl(Tab_moy(8 * x + i)) + CDbl(Tab_moy(9 * x + i))) / 10
            y = y + 1
        Next i
    Incompatibilité toujours au niveau de "l'indice de Tab_num" avec:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim Tab_num() as Double
    pour coincider avec tes CDbl.

    Tu aurais une idée du pourquoi et du comment changer ça ?

    Cordialement

    Ca commence à devenir du grand n'importe quoi.

    Tu es sur qu'il n'y a pas une autre commande pour covnertir ma chaine en valeur ?

    En effet, au bout d'u nmoment je me suis mis à vérifier que c'était bien des nombres avec la fonction IsNumeric, et bah en fait ça me renvoie faux...

    En déboguant je regarde dans mon tableau Tab_moy et pourtant ce sont bien des nombres ... !

    Incroyable, je ne comprends pas ce qu'il faut que je fasse pour avancer.

    Tab_moy :
    "blabla"
    "blabla"
    "nbre1"
    "nbre2"
    "nbre3"
    Etc...

    blabla ==> chaine de caractère (lettre)

    Cependant je saute les deux premiers blabla avec ma boucle donc normalement, vu que tous les autres paramètres de ce tableau sont des nombres, le CDbl(Tab_moy(i)) devrait marché.

    En plaçant la souris sur CDbl(Tab_moy(i)) en déboguant, il y a encore marqué incompatibilité de types...

    Donc la je rame, je coule même.

    Si tu as une astuce quelconque pour m'aider, je suis preneur ou alors n'importe qui pouvant m'apporter une aide quelconque n'hésitez pas même s'il me faut recommencer mon code !

    Cordialement

  6. #6
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 642
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 642
    Points : 34 349
    Points
    34 349
    Par défaut


    tu as un exemple de valeur stp ?

    on peut avoir le coup du "," vs "." comme virgule, avec des paramètres régionaux qui font des misères

    exemple sur mon poste :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ?isnumeric("5.5")
    Faux
    ?isnumeric("5,5")
    Vrai

  7. #7
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    85
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2012
    Messages : 85
    Points : 96
    Points
    96
    Par défaut
    En effet ce sont des '.' pas des ',' dans les cellules !

    Je vais essayer de modifier ça et je te tiens au courant.

    Sinon pour les valeurs je vais de :

    "0.xxxxxxxxxxxxxxx" (15 x !)
    La valeur avec le plus de décimales possibles

    "100"
    La valeur la plus grande ateignable dans mon tableau sans décimales

    Sachant que ces valeurs peuvent parfois être négative mais je ne pense pas que ça soit ça qui change; enfin maintenant plus rien ne m'étonne !

    Merci de ton aide en tout cas, je reviens rapidement !

  8. #8
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 642
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 642
    Points : 34 349
    Points
    34 349
    Par défaut
    il faut faire un replace du "." par le "," dans ton code, ca roulera tout seul

  9. #9
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    85
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2012
    Messages : 85
    Points : 96
    Points
    96
    Par défaut
    En effet, tu avais bien raison !
    Les "." et les "," créaient des soucis.

    J'ai donc modifié mon code pour changer ces points en virgules.

    J'ai (encore) une erreur toujours à la même ligne, en me disant que "l'indice n'appartient pas à la sélection"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    sContenu2 = Replace(sContenu1, Chr(9) & Chr(9), Chr(9))
        sContenu2 = Replace(sContenu2, ".", ",")
        sContenu2 = Replace(sContenu2, vbCrLf, "")
        ' création de différents tableaux
        Tab_fin = Split(sContenu1, Chr(9))
        Tab_moy = Split(sContenu2, Chr(9))
     
        'calcul de la moyenne glissante
        x = nb_mod * nb_param + 1
        y = 0
        For i = (nb_param + 1) To UBound(Tab_moy) 'UBound(Tab_moy) - 1
                Tab_num(y) = CStr((CDbl(Tab_moy(i)) + CDbl(Tab_moy(x + i)) + CDbl(Tab_moy(2 * x + i)) + CDbl(Tab_moy(3 * x + i)) + CDbl(Tab_moy(4 * x + i)) + CDbl(Tab_moy(5 * x + i)) + CDbl(Tab_moy(6 * x + i)) + CDbl(Tab_moy(7 * x + i)) + CDbl(Tab_moy(8 * x + i)) + CDbl(Tab_moy(9 * x + i))) / 10)
            y = y + 1 'erreur sur ce y
        Next i
    Je n'ai pas définit le "y" pensant que ça n'importe pas dans le code vu qu'il est définit par le For.

    En tout cas tu m'as fait avancer d'un bon pas car ces points me rendaient fou !

    Cordialement

  10. #10
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 642
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 642
    Points : 34 349
    Points
    34 349
    Par défaut
    il faut dimensionner ton tableau tab_num pour cela
    mots clé
    Redim et Preserve

  11. #11
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    85
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2012
    Messages : 85
    Points : 96
    Points
    96
    Par défaut
    Tu as du génie !

    Le tableau reçoit les bonnes valeurs en paramètre avec le redim preserve, cependant l'erreur "l'indice n'appartient pas à la sélection apparait toujours et me fais arréter mon exécution, saurais-tu pourquoi ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
        y = 0
        For i = (nb_param + 1) To UBound(Tab_moy) 'UBound(Tab_moy) - 1
            ReDim Preserve Tab_num(y)
            Tab_num(y) = CStr((CDbl(Tab_moy(i)) + CDbl(Tab_moy(x + i)) + CDbl(Tab_moy(2 * x + i)) + CDbl(Tab_moy(3 * x + i)) + CDbl(Tab_moy(4 * x + i)) + CDbl(Tab_moy(5 * x + i)) + CDbl(Tab_moy(6 * x + i)) + CDbl(Tab_moy(7 * x + i)) + CDbl(Tab_moy(8 * x + i)) + CDbl(Tab_moy(9 * x + i))) / 10)
            y = y + 1
        Next i
    (En déboguant le tableau à les bonnes valeurs à la bonne place donc presque gagné !!)

    Cordialement

  12. #12
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 642
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 642
    Points : 34 349
    Points
    34 349
    Par défaut
    Il suffit de comparer Ubound(tab_moy) et 9 * x + i

    Tu ne peux demander une valeur tab_moy(aa) si aa est > Ubound(tab_moy)-1, donc il y a astuce à trouver

  13. #13
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    85
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2012
    Messages : 85
    Points : 96
    Points
    96
    Par défaut
    Encore une ou deux erreurs dans mon code mais qui ne dépendent plus de ça.
    Merci beaucoup pour ton aide JPcheck

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Tableau de String en tableau d'entiers
    Par keyser9 dans le forum Collection et Stream
    Réponses: 1
    Dernier message: 28/04/2013, 17h52
  2. Tableau de String en tableau d'entiers
    Par keyser9 dans le forum C#
    Réponses: 1
    Dernier message: 26/04/2013, 09h42
  3. Remplissage d'un tableau à partir d'un tableau de String
    Par aljessy dans le forum Composants
    Réponses: 4
    Dernier message: 18/08/2012, 13h27
  4. Ajouter un tableau de string à un tableau de string
    Par nodules dans le forum Collection et Stream
    Réponses: 3
    Dernier message: 22/07/2010, 17h04
  5. conversion d'un tableau de string en tableau de file
    Par sroux dans le forum Collection et Stream
    Réponses: 4
    Dernier message: 01/12/2006, 11h19

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo