Je suis débutant en vba, et j'ai un problème pour automatiser une formule d'excel sur vba. Cette formule s'appelle polyA et elle 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
Mes abcisses se trouvent dans la colonne G et mes ordonnées dans la colonne K.
J'arrive a appliquer la formule en entrant une plage de données précises (ex : Formula = "=PolyA(G2:G38, K2:K38, 0, 1)" ), mais ce que je voudrais c'est que ca s'enchaine sur les plages de données qui suivent. En gros sur une feuille de calcul j'ai 500 blocs de ligne allant de start a fin, soit autant de fois polyA à appliquer.
Voici mon code :
Code :
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
'start et fin correspondent aux indices de 1ère et dernière ligne d'une série de données, donc une fois que la formule est appliquée a la série de start à fin, le start devient le fin+1 et le nouveau fin est déterminé avec la boucle du dessus'
Quand je lance la macro je n'ai pas d'erreur ce qui est déjà une bonne chose; mais par contre j'ai un problème en ce qui concerne le résultat de ma formule, il me met 0 pour chaque série de données, comme si ca ne calculait pas.
QUand je fais le pas a pas, j'ai bien les bonnes valeurs de mes parametres dans ma formule polyA, mais après je sais pas. Est ce qu'il faut que je modifie coef pour mettre quelque chose de type .Formula?
Donc voilà si quelqu'un pouvait eclairer ma lanterne sur cette fonction ca m'aiderait grandement.
J'espere avoir été clair, merci d'avance
Pas de réponse, donc je vais eclaircir un peu tout ça.
Mon problème est de définir correctement mes plages de données (plage 1 et plage2)
Actuellement j'en suis là :
Code :
Dim plage1 As Range
Dim plage2 As Range
Set plage1 = Range(Cells(start, 7).Address, Cells(fin, 7).Address)
Set plage2 = Range(Cells(start, 11).Address, Cells(fin, 11).Address)
Tu peux aussi te servir de la fenêtre d'exécution (cherche-là à titre d'exo ). Pour écrire dedans :
Code :
Debug.Print "Coucou. L'adresse de la plage n°1 est : " & plage1.Address
Tu peux aussi te servir de la fenêtre espion (pareil, cherche-là) Mais elle est plutôt à réserver aux objets. Qu'importe. Ajoutes-y l'espion "=PolyA(" & plage1 & ";" & plage2 & ";0;1)".
Mets un point d'arrêt [F9] sur la ligne 7 ou écris Stop sur la ligne 6 et exécute. La macro va s'y arrêter. Tu as alors tout loisir de consulter exécution et espion. Dans la fenêtre d'exécution, tape directement
J'ai fais les modif que tu as dites, mais avec la 1°, ca ne marche pas, par contre juste la 2° ça fonctionne. J'ai pas le temps de vérifier plus, car il est l'heure de débaucher, mais il semblerait que ce soit bon.
En revanche j'avoue que j'ai pas tout saisi sur le reste, quand je met MsgBox =...., j'ai un message d'erreur, donc j'ai supprimé. En ce qui concerne la fenetre d'exécution, je l'ai trouvé sans trop de probleme, mais je n'ai pas pris le temps de tout faire, je voulais te remercier avant. Je m'y plongerais demain.
EN tout cas je vais passer une meilleure soirée, hihi.
Merci encore et si des fois j'ai encore des soucis je saurais a qui m'adresser.
Bonne soirée...