Erreur programme VBA

Fermé
GuiGuitte33 Messages postés 1 Date d'inscription lundi 28 juillet 2008 Statut Membre Dernière intervention 28 juillet 2008 - 28 juil. 2008 à 11:35
 GuiGuitte33 - 31 juil. 2008 à 14:04
Bonjour,
je viens d'écrire un programme en Vba qui permet de sommer tous mes poids d'une matrice tris croisées.
rappel matrice tris croisé: à l'intersection de la colonne FP1 et de la ligne FC1 , on trouve FP1 (poids 3) car la fonction FP1 a été jugée beaucoup plus importante que FC1. voir un exemple sur le site ftp://ftp2.adeli.org/adeli/lalettre/l38p27.pdf?cf0A21F204=17DED8B5!VDAwOTgwMjY6bGRhcDrCZBk0gDjtfpeQ0PPP38+X

Voici mon programme:

Sub Fonction()

FirstRow = 11
LastRow = 90
FirstCol = 3
LastCol = 162
compteur = 1
L = LastRow - FirstRow + 1
Dim vecteur As Variant
vecteur = Array("FP1", "FC1", "FC2", "FC3", "FC4", "FA1", "FA2", "FA14", "FP2", "FP3", "FP4", "FA5", "FA13", "FC53", "FA11", "FA12", "FC5", "FP5", "FP6", "FA10", "FP7", "FP8", "FC8", "FC9", "FC10", "FC11", "FA9", "FA7", "FA8", "FT4", "FT5", "FT6", "FT7", "FC23", "FC12", "FC13", "FC18", "FC6", "FC7", "FA6", "FC14", "FC15", "FC16", "FC17", "FC19", "FC20", "FC21", "FC22", "FC28", "FC29", "FC30", "FC31", "FC32", "FC33", "FC34", "FC35", "FC36", "FC37", "FC38", "FC39", "FC40", "FC41", "FC42", "FC43", "FC44", "FC45", "FC46", "FC47", "FC48", "FT8", "FA3", "FA4", "FC49", "FC50", "FC51", "FC52", "FC24", "FC25", "FC26", "FC27")

For compteur = 1 To 100
Result = 0

For MyRow = FirstRow To compteur

For MyCol = FirstCol To LastCol Step 2
If Cells(MyRow, MyCol).Value = vecteur Then
Result = Result + Cells(MyRow, MyCol + 1).Value
End If

Next MyCol
Next MyRow
Cells(MyRow, 164).Value = Result
Next compteur

End Sub

Le but du programme : Par exemple dans une ligne je juge de l'importance d'un poids d'une fonctions (voir la définition de mon vecteur) il suffit d'additionner les poids de chaque ligne et d'obtenir la somme de chacun pour au final les trier.

Le problème: mauvais calcul de la somme des poids et arrêt du calcul à la ligne 80 au lieu de 90 puis signalisation d'un problème (voir en gras dans mon programme).

Merci de votre aide, en espérant que vous comprendrez mon problème et bonne chance!

2 réponses

f894009 Messages postés 17189 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 6 mai 2024 1 705
31 juil. 2008 à 11:08
Bonjour,
Si j'ai bien compris votre problème,vecteur est un tableau, donc pour faire une comparaison il faut écrire vecteur(x)
ou x est un élément du tableau.

Bonne suite
0
c'est bon j'ai trouvé mon erreur voivi le programme pour qui ça pourrait intérésser de faire une matrice tris croisée. Merci à f894009 d'avoir répondu.
Cdlt

FirstRow = 11
LastRow = 90
FirstCol = 3
LastCol = 162
compteur = 0
L = LastRow - FirstRow + 1
Dim vecteur As Variant
vecteur = Array("FP1", "FC1", "FC2", "FC3", "FC4", "FA1", "FA2", "FA14", "FP2", "FP3", "FP4", "FA5", "FA13", "FC53", "FA11", "FA12", "FC5", "FP5", "FP6", "FA10", "FP7", "FP8", "FC8", "FC9", "FC10", "FC11", "FA9", "FA7", "FA8", "FT4", "FT5", "FT6", "FT7", "FC23", "FC12", FC13, "FC18", "FC6", "FC7", "FA6", "FC14", "FC15", "FC16", "FC17", "FC19", "FC20", "FC21", "FC22", "FC28", "FC29", "FC30", "FC31", "FC32", "FC33", "FC34", "FC35", "FC36", "FC37", "FC38", "FC39", "FC40", "FC41", "FC42", "FC43", "FC44", "FC45", "FC46", "FC47", "FC48", "FT8", "FA3", "FA4", "FC49", "FC50", "FC51", "FC52", "FC24", "FC25", "FC26", "FC27")

Range("FH11", "FH90").Select
Selection.Clear

'Debug.Print UBound(vecteur)

For compte = compteur To (L - 1)
MyCpt = 0

For MyRow = FirstRow To compte + 11

For MyCol = FirstCol To LastCol Step 2
If Cells(MyRow, MyCol).Value = vecteur(compte) Then
MyCpt = MyCpt + Cells(MyRow, MyCol + 1).Value
End If
Next MyCol

Next MyRow
Cells(MyRow - 1, 164).Value = MyCpt
Next compte
0