Difficultés pour coder une macro et la lancer [Résolu]

ErnstP 11 Messages postés mardi 13 juin 2017Date d'inscription 15 juin 2017 Dernière intervention - 15 juin 2017 à 14:04 - Dernière réponse : ErnstP 11 Messages postés mardi 13 juin 2017Date d'inscription 15 juin 2017 Dernière intervention
- 15 juin 2017 à 15:45
Bonjour,

J'essaye de faire une macro qui a partir de deux colonnes contenant n valeurs (colonne des X1 jusqu'a Xn et colonne des F1 jusqu'a Fn) me permettra de calculer une somme qui combine toute ces valeurs.

Ce nombre est nommé Ay.

Ay= F1*(X2+X3+X4+...+Xn)+F2*(X3+X4+...+Xn)+...+Fn-1*Xn


mon code est le suivant:

Option Explicit


Const celn As String = "B1"
Const celAx As String = "B2"
Const coXi As String = "D"
Const coFi As String = "E"
Const coYi As String = "F"
Const listart As Byte = 6


Sub FAY()

Dim TX() As Double, TF() As Double, Dim AY() As Double
Dim AYN As Double
Dim i As Byte, k1 As Byte, k As Byte, n As Byte
Dim SX1 As Double, SX As Double


n = Range(celn).Value

ReDim AY(1 To n) ' Les AY(i) correspondent aux différents termes de la somme
ReDim TX(1 To n)
ReDim TF(1 To n)

'définir les valeurs des deux colonnes de Xk et Fk

For i = 1 To n
TX(i) = Range(colXi & listart + i - 1).Value
TF(i) = Range(colFi & listart + i - 1).Value
Next i

'construire le premier terme de ma somme

AY(1) = TF(1)
SX1 = TX(2)

For i = 2 To n
SX1 = SX1 + TX(i + 1)
Next i

AY(1) = TF(1) * SX1

' construire les termes suivants

For k = 1 To n
TX(k) = Range(coXi & listart + k - 1).Value
TF(k) = Range(coFi & listart + k - 1).Value
Next k

For k = 2 To n - 1

AY(k) = AY(k - 1)
SX = TX(k + 1)

For k1 = k + 1 To n
SX = SX + TX(k1 + 1)
Next k1

AY(k) = AY(k) + TF(k) * SX
AYN = AY(k)
Next k
Range("A6").Value = AYN

End Sub


Voila je débute tout juste sur VBA et je me suis basé sur un code que quelqu'un m'a donné sur ce forum pour une autre macro pour réaliser celle ci alors j'ai surement du faire plusieurs erreurs mais pour le moment qd j'essaye de lancer la macro j'obtiens le message :"L'indice n'appartient pas à la sélection". J'ai regarder qu'est ce qui pouvait provoquer ca mais je 'a pas trouver le lien avec mon code.
Si vous avez une idée merci.



Afficher la suite 

6 réponses

Répondre au sujet
ccm81 8204 Messages postés lundi 18 octobre 2010Date d'inscription 12 décembre 2017 Dernière intervention - Modifié par ccm81 le 15/06/2017 à 14:27
0
Utile
1
Bonjour

Pas tout relu mais
1. ici tu as colXi, alors que la variable est coXi
For i = 1 To n
TX(i) = Range(colXi & listart + i - 1).Value
TF(i) = Range(colFi & listart + i - 1).Value
Next i
2. pas compris cette ligne placée après Next k
Range("A6").Value = AYN

Tu affiches une (seule) valeur AYN = la dernière valeur du tableau AY, dans la cellule A6
Si tu veux afficher tous les AY(k) à partir de la cellule A6 et en descendant, il te faut un truc du genre (placé après Next k)
Range("A6").Resize(n,1) = Application.Transpose(AY)

3. Il y en a peut être d'autres

Cdlmnt
ErnstP 11 Messages postés mardi 13 juin 2017Date d'inscription 15 juin 2017 Dernière intervention - 15 juin 2017 à 14:32
Bonjour,

1)La première erreur est une erreur de ma part dans le code que j'utilise c'est bien écrit coXi et co Fi partout. Donc l'erreur ne vient pas de la.

2) Pour la deuxième erreur, je n'ai effectivement besoin que de la dernière valeur que j'appelle AYN et qui est enfaite égal à AY(n). J'ai créer tous les Ay(i) pour pouvoir calculer la valeur finale c'est pour ca que je ne les affiche nul part. Je ne sais pas si c'est comme ca qu'il faut faire.

3)Je pense que l'erreur est effectivement due a autre chose.

Merci pour la réponse.

Cordialement
Commenter la réponse de ccm81
ccm81 8204 Messages postés lundi 18 octobre 2010Date d'inscription 12 décembre 2017 Dernière intervention - Modifié par ccm81 le 15/06/2017 à 14:49
0
Utile
1
4. qd j'essaye de lancer la macro j'obtiens le message :"L'indice n'appartient pas à la sélection".
Sur quelle ligne l'erreur se produit elle ?
Quand excel t'envoie dans l'editeur vba il te faut passer la souris sur les variables de la ligne "fautive" et contrôler leur valeur
5. tu as déclaré i, k, k1, n de type byte, si ça dépasse 255, il y aura une erreur
6. ici k1 va dépasser n (quand k1=n)
For k1 = k + 1 To n
SX = SX + TX(k1 + 1)
Next k1


RQ. Lorsque tu envoies du code, utilises la coloration syntaxique - option basic (la 5° icone dans la barre des outil de l'editeur situé au dessus de cette fenêtre)
ErnstP 11 Messages postés mardi 13 juin 2017Date d'inscription 15 juin 2017 Dernière intervention - 15 juin 2017 à 15:04
Ok merci pour les conseils et la remarque.

Effectivement les bornes étaient mal définies c'est ce qui posait problème. Le reste pas de soucis puisque n=30 pour le moment. Donc problème résolu malheureusement le résultat n'est pas bon puisque j'obtiens 0 ce qui est étrange pour une somme d'entiers positifs.

Je n'avais pas remarqué que c'est toi qui m'a déjà aidé hier. J'espère que ce n'est pas un problème de réutiliser le code que tu as mis en ligne hier. En tout cas merci bcp pour le coup de main.

Je risque de poster plusieurs messages à l'aide dans les jours à venir, je suis obligé de me mettre a coder un petit peu pour un projet.

Merci
Commenter la réponse de ccm81
ccm81 8204 Messages postés lundi 18 octobre 2010Date d'inscription 12 décembre 2017 Dernière intervention - Modifié par ccm81 le 15/06/2017 à 15:44
0
Utile
1
1. Remplaces, mais je doute ...
Range("A6").Value = AYN
par
Range("A6").Value =AY(n)
ce sera quand même plus propre
2. le résultat n'est pas bon puisque j'obtiens 0 ce qui est étrange pour une somme d'entiers positifs.
Fais une exécution pas a pas de ta macro, comme ça tu pourras suivre l'évolution de AY(k) ... entre autres

Bon courage

Cdlmnt
ErnstP 11 Messages postés mardi 13 juin 2017Date d'inscription 15 juin 2017 Dernière intervention - 15 juin 2017 à 15:45
C'est bon j'ai réussi merci. Prochaine étape combiner les macros entre elle.
Commenter la réponse de ccm81