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 :

[VBA-E] test sur une chaine de charactère


Sujet :

Macros et VBA Excel

  1. #1
    Membre habitué
    Inscrit en
    Juillet 2005
    Messages
    141
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 141
    Points : 148
    Points
    148
    Par défaut [VBA-E] test sur une chaine de charactère
    bonjour
    voila mon pb je copie une formule de régression de courbe dans une cellule et je voudrais récupérer les coefficient devant les x indépendemment cad voici ce que contient ma cellule:
    y = 2E-09x4 - 2E-05x3 + 0,052x2 - 42,153x + 346771
    et je voudrais récupérer dans des cellules spécifiques
    2E-09
    2E-05
    0,052
    42,153
    346771
    comment puis-je faire?
    j'avais pensé à faire des test sur les charactères mais je ne sais pas comment définir ma formule comme une chaine de caractère ni incrémenter dessus
    si qq un a une idée
    merci davance
    rémi

  2. #2
    Membre expérimenté Avatar de Megaxel
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    1 187
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 1 187
    Points : 1 405
    Points
    1 405
    Par défaut
    Bon, pour convertir "quelquechose" en String, tu as la fonction "CStr( )".
    Après, ce que tu veux faire est assez horrible à faire, à moins d'être vraiment certain de ce que tu vas récupérer... Enfin, je pense.
    Il n'y a pas moyen pour toi de récupérer ces coefficients en amont, plus tôt dans ton appli?

  3. #3
    Membre habitué
    Inscrit en
    Juillet 2005
    Messages
    141
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 141
    Points : 148
    Points
    148
    Par défaut
    je suis d'accord que c'est affreux
    en fait pour obtenir cette formule je crée un graph à partir de valeurs puis je crée la courbe de tendance polynomiale et j'affiche la fonction associé que je copie et colle dans une cellule.
    J'aimerais bien recupérer les coefficients sans avoir à faire tout ca le pb c que pour une regression polynomiale j'ai pas trouvé la fonction qui fait ca (si seulement elle existe)
    si ca peux vous aider
    merci pour Cstr() je vais qd mm essayer
    rémi

  4. #4
    Membre expérimenté Avatar de Megaxel
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    1 187
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 1 187
    Points : 1 405
    Points
    1 405
    Par défaut
    Et comment est-ce que tu crées la "courbe de tendance polynômiale"? Ou plus simplement, comment trouves-tu l'équation de la fonction?

  5. #5
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    Hello,

    Déjà, je remarque que dans "y = 2E-09x4 - 2E-05x3 + 0,052x2 - 42,153x + 346771" les signes + et - sont précédés et suivis d'un espace.
    Je commencerais par remplacer les trois caractères " + " ou " - " par un simple espace et ensuite, tu devrais pouvoir utiliser Split pour avoir un tableau de dimension 5. Restera plus qu'à remplir tes cellules.

    Juste pour l'idée, en VBA 97, j'ai pas split.

    A+

  6. #6
    Membre habitué
    Inscrit en
    Juillet 2005
    Messages
    141
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 141
    Points : 148
    Points
    148
    Par défaut
    l'équation c'est excel qui la calcule pour moi voici le code

    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    Sub Graphpm()
    '
    ' graph2 Macro
    ' Macro enregistrée le 20/03/2006 par rémi
    '
     
    Dim marange As Range
    Dim sh As Worksheet
     
    Set sh = ThisWorkbook.Sheets("j=1mm")
        sh.Select
     
      For i = 7 To 403 Step 6
     
     
        Set marange = Union(sh.Range(sh.Cells(i, 20), sh.Cells(i + 5, 20)), sh.Range(sh.Cells(i, 25), sh.Cells(i + 5, 25)))
        marange.Select
        Charts.Add
        ActiveChart.ChartType = xlXYScatterSmooth
        ActiveChart.SetSourceData Source:=marange, PlotBy:=xlColumns
     
        ActiveChart.Location Where:=xlLocationAsObject, name:="j=1mm"
        With ActiveChart
            .HasTitle = False
            .Axes(xlCategory, xlPrimary).HasTitle = True
            .Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text = "qf en l/h"
            .Axes(xlValue, xlPrimary).HasTitle = True
            .Axes(xlValue, xlPrimary).AxisTitle.Characters.Text = "Pm en Pa"
        End With
        ActiveChart.SeriesCollection(1).Select
    C EST LA QUIL CREE LA COURBE ET AFFICHE L EQUATION
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ActiveChart.SeriesCollection(1).Trendlines.Add(Type:=xlPolynomial, Order:=4 _
            , Forward:=0, Backward:=0, DisplayEquation:=True, DisplayRSquared:= _
            False).Select
    LA JE COPIE ET COLLE L EQUATION DANS UNE CELLULE"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    sh.Cells(i, 26).Value = ActiveChart.SeriesCollection(1).Trendlines(1).DataLabel.Text  
     ActiveChart.ChartArea.Select
        ActiveWindow.Visible = False
        Selection.Delete
      Next i
    End Sub
    voili voila
    sinon ouskelnor mon pb c justement de remplir les cellules comment est-ce que je peux lui dire de ne selectionner qu'un partie de ma chaine de caractère
    rémi

  7. #7
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    Hello,

    J'ai retrouvé ça que j'avais mis de côté en prévision de mon passage à office 2003...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
            Temp = Replace(Temp, vbCrLf, "") 'on vire le vbCrlf de fin
            tabletemp = Split(Temp, vbTab)
     
            For j = 0 To UBound(tabletemp)
                Sheets(SheetName).Cells(i, j + 1).Value = tabletemp(j)
            Next j
    on modifie pour que ça réponde à ta demande :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    TaFormule = "y = 2E-09x4 - 2E-05x3 + 0,052x2 - 42,153x + 346771" 
    TaFormule = Replace(TaFormule, "y = ", "") ' => "2E-09x4 - 2E-05x3 + 0,052x2 - 42,153x + 346771"
    TaFormule = Replace(TaFormule, " + ", " ") ' => "2E-09x4 - 2E-05x3 0,052x2 - 42,153x 346771"
    TaFormule = Replace(TaFormule , " - ", " ") '  => "2E-09x4 2E-05x3 0,052x2 42,153x 346771"
    TableauDeTaFormule = Split(TaFormule, " ")
    'Et enfin
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
            NoColonne = 1 ' ou 2 ou 3... ( ! )
            For j = 0 To UBound(TableauDeTaFormule)
                Worksheets(NomFeuille).Cells(j+1, NoColonne).Value = TableauDeTaFormule(j)
            Next j
    Tu peux essayer pour moi, je n'ai ni replace ni split comme je te l'ai dit

    A+

    Edit
    Le tableau commençant à zéro, j'ai corrigé le code le faisant commencer par 1

  8. #8
    Membre habitué
    Inscrit en
    Juillet 2005
    Messages
    141
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 141
    Points : 148
    Points
    148
    Par défaut
    ca y est tout marche impeccablement
    merci ouskel'nor et dsl pour la lenteur de la réponse mais javais un autre projet en cours
    voici le code que j'ai utitlisé finalement:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    TaFormule = sh.Cells(i, 26).Value
    TaFormule = Replace(TaFormule, "y = ", "") ' => "2E-09x4 - 2E-05x3 + 0,052x2 - 42,153x + 346771"
    TaFormule = Replace(TaFormule, " + ", " ") ' => "2E-09x4 - 2E-05x3 0,052x2 - 42,153x 346771"
    TaFormule = Replace(TaFormule, " - ", " ")  '  => "2E-09x4 2E-05x3 0,052x2 42,153x 346771"
    TaFormule = Replace(TaFormule, "x4", "")
    TaFormule = Replace(TaFormule, "x3", "")
    TaFormule = Replace(TaFormule, "x2", "")
    TaFormule = Replace(TaFormule, "x", "")
    TableauDeTaFormule = Split(TaFormule, " ")
    k = UBound(TableauDeTaFormule)
            For j = 0 To k
                Worksheets("j=1mm").Cells(i + j + 1, 26).Value = TableauDeTaFormule(j)
            Next j
    il y d'autres indices du au prog général
    merci
    rémi

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

Discussions similaires

  1. Test sur une chaine de caracteres
    Par patmar83 dans le forum VBA Access
    Réponses: 7
    Dernier message: 27/06/2013, 21h42
  2. Réponses: 2
    Dernier message: 11/06/2008, 17h20
  3. test sur une chaine alphanumérique
    Par paolo2002 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 20/04/2008, 16h57
  4. [Tableaux] Test sur une chaine de caractères et affichage
    Par ferjani.kais dans le forum Langage
    Réponses: 2
    Dernier message: 04/01/2008, 17h59
  5. Test sur une chaine de caractéres
    Par Je-cherche-pfe dans le forum C#
    Réponses: 3
    Dernier message: 04/09/2007, 23h44

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