Erreur programme VBA
GuiGuitte33
Messages postés
1
Date d'inscription
Statut
Membre
Dernière intervention
-
GuiGuitte33 -
GuiGuitte33 -
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!
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!
A voir également:
- Erreur programme VBA
- Programme demarrage windows - Guide
- Mettre en veille un programme - Guide
- Message programmé iphone - Guide
- Cette action ne peut pas être réalisée car le fichier est ouvert dans un autre programme - Guide
- Forcer la fermeture d'un programme - Guide
2 réponses
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
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
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
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