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 :

Fonction PolyA d'excel sur vba


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Inscrit en
    Décembre 2007
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 40
    Par défaut Fonction PolyA d'excel sur vba
    Bonjour,

    Je suis débutant sur vba et j'ai un petit soucis avec une fonction d'excel que je souhaiterais intégrer dans une macro vba.
    En gros j'ai une feuille de calcul remplie de données (des mesures concernant des véhicules), en sachant que pour un seul véhicule, qui est repéré par un numéro, j'ai plusieurs dizaines de lignes de données (quantité qui varie selon les véhicules).
    Donc je souhaiterais appliquer la fonction polyA avec une boucle, me permettant ainsi d'avoir le coef recherché pour chacun des véhicules.
    La fonction polyA permet de calculer les coefficients d'une courbe par la méthode des moindres carrés. Dans mon cas je veux une droite horizontale donc un polynome de degré 0.
    4 parametre doivent etre entrés pour cette fonction :
    Mat x : la colonne des abcisses
    Mat y : la colonne des ordonnées
    N : le degré du polynome (ici 0)
    I : un coefficient qui vaut 1 par defaut
    C'est facile d'utiliser ceci directement sur excel mais je ne sais pas comment rentrer ces parametres dans vba.

    Voici mon 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
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    Sub PolyA()
     
    Dim index As Long
    Dim nb As Integer
    Dim start As Long (ligne de début pour un vehicule)
    Dim fin As Long (ligne de fin pour le meme vehicule)
    Dim Val As Integer
     
        index = 2
        nb = 0
        start = 2
        fin = 2
        Val = 0
     
        Dim nbligne As Long
     
        nbligne = 66000
     
        Do
     
            Val = Cells(index, 2).Value
     
            Do
     
                 index = index + 1
                 nb = nb + 1
     
            Loop While Cells(index, 2).Value = Val
     
            If Cells(index, 2).Value = "" Then
                nb = nb - 1
            End If
     
            fin = start + nb - 1
     
            Dim coef As Long
            coef = polya((start,7);(fin,7):(start,11);(fin,11);0;1)
    Next
     
            Cells(start, 12).Value = coef
     
            start = index
            nb = 0
     
            If IsEmpty(Cells(index, 2)) Then
                 index = nbligne + 1
            End If
     
        Loop While index < nbligne
     
    End Sub
    DOnc voilà si quelqu'un pouvait eclairer ma lanterne sur cette fonction ca m'aiderait grandement.
    J'espere avoir été clair, merci d'avance

  2. #2
    Inactif  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 054
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 054
    Par défaut
    Bonjour,
    J'ai pas encore bien regardé ta fonction, mais 1ère constatation, tu emploi des mots réservés de VBA pour déclarer tes variables telle que Start et Val.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Dim index As Long
    Dim nb As Integer
    Dim start As Long  '(ligne de début pour un vehicule)
    Dim fin As Long  '(ligne de fin pour le meme vehicule)
    Dim Val As Integer
    Ensuite, tu doit mettre le code présenté entre les balises CODE
    Pour cela...
    Sélectionner tout le code et cliquer sur # dans le haut de l'éditeur.
    A+

  3. #3
    Inactif  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 054
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 054
    Par défaut
    Bon, 2ém passe...

    Next et pas de For ?
    assigné le nom de la sub à une variable ?????
    Et c'est quoi entre les ; ; ; il fautdrait mettre des opérateurs tel que +-*/
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Dim coef As Long
    coef = polya((start,7);(fin,7)start,11);(fin,11);0;1)
    Next
    Si tu veux avoir des paramètres à l'entrée tu doit employé une fonction et pas une Sub.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Function PoliA(Param1 as Type,Param2 as Type etc... )
    Constatation générale... Ton code n'est pas Indenté, donc très difficile à suivre.
    Regarde déjà tout ça..
    A+

  4. #4
    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
    Par défaut
    Bonjour husker, bienvenue sur le forum.
    J'ai indenté ton code et ai ajouté les balises [ CODE ]et[ /CODE ]
    En rouge, le Next sans for évoqué par LeForestier.
    Pour le reste, regarde ce qu'il t'a dit

  5. #5
    Inactif  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 054
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 054
    Par défaut
    3ém passage...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
            If IsEmpty(Cells(index, 2)) Then
                 index = nbligne + 1
            End If
    La fonction IsEmpty n'est valable que sur des objets ou des variables Variant.
    Tu devrais remplacer par..
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
            If  Cells(index, 2).value = "" Then
                 index = nbligne + 1
            End If

  6. #6
    Membre averti
    Inscrit en
    Décembre 2007
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 40
    Par défaut
    Merci LeForestier pour tes réponses.

    En ce qui concerne le next, j'avais juste oublié de le retirer après avoir supprimé mon for.
    J'ai réussi à faire marcher la fonction en rentrant mes plages de données x et y, mais ça ne resoud pas le probleme pour la boucle.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ActiveCell.Formula = "=PolyA(G2:G38, K2:K38, 0, 1)"
    Je nage completement en fait je ne vois pas du tout comment modifier la plage de données pour appliquer la fonction sur chaque véhicule.

Discussions similaires

  1. Proctection fichier Excel sur VBA
    Par lg5675 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 18/02/2014, 14h09
  2. [XL-2007] Fonction Si d'Excel en VBA
    Par pascal4782 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 04/06/2011, 19h33
  3. [XL-2007] Fonction sort dans Excel avec VBA
    Par vanyk dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 08/07/2009, 15h05
  4. Crée un Fichier Excel sur VBA
    Par faressam dans le forum Macros et VBA Excel
    Réponses: 12
    Dernier message: 07/08/2008, 17h44
  5. utilisation fonctions DLL32 et USER32 sur VBA
    Par jacklem dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 02/07/2007, 13h46

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