jijudu
Messages postés211Date d'inscriptionjeudi 15 mai 2008StatutMembreDernière intervention 3 septembre 2009
-
15 mai 2008 à 13:40
mortalino
Messages postés6786Date d'inscriptionvendredi 16 décembre 2005StatutMembreDernière intervention21 décembre 2011
-
24 mai 2008 à 09:51
Voila j'ai une macro qui me trouve une zone par exemple A1-A8
J'aimerai stocker les valeurs dans la colonne B appartenant à la même zone (c'est à dire la zone de la ligne 1 à 8) dans un tableau. Ensuite le but sa serai d'extraire ces valeurs dans le tableau pour en faire une moyenne.
MAis est ce que quelqu'un pourrai me donner le code VB pour stocker les valeurs de la colonne B svp, parce que je ne vois pas comment faire!
Le reste j'essayerai de le faire tout seul en allant à mon rythme.
pile_poil
Messages postés682Date d'inscriptionvendredi 6 avril 2007StatutMembreDernière intervention 4 août 20126 15 mai 2008 à 17:06
une bonne façon de commencer c'est d'aller dans excel , menu outils , macros , nouvelle macro ,
ensuite tu fais manuellement ta manipe et quand elle est finie tu click sur arreter l'enregistrement de la macro
ensuite tu vas dans l'éditeur de macro et tu regardes comment excel a écrit l'opération !
il ne te reste plus qu'à adapter à ton besoin exact pour rendre ça plus universel !
c'est de cette façon que j'ai procédé qsuand j'ai commencé sans rien connaitre à la programmation
[reglement.aspx ]si c'est la solution, penser : REPONSE ACCEPTEE
jijudu
Messages postés211Date d'inscriptionjeudi 15 mai 2008StatutMembreDernière intervention 3 septembre 2009 15 mai 2008 à 21:32
Merci à toi mortolio !!! ^^
Le probléme en faite c'est que je ne prends pas toutes les valeurs de la colonne B.
J'ai une macro qui me délimite une plage. Je connais le début et la fin de cette plage par la variable "n_ligne_debut" et "n_ligne_fin" qui me disent à quelle ligne la plage commence et à quelle ligne la plage finit. Ici dans l'exemple cité ci dessus
la plage commence à A1 et finit a A2.
Je dois prendre les valeurs de la colonne B qui appartiennent à la plage définit.
J'éspere avoir été assez clair.
Je dis cela parce que en faite j'ai l'impression que ta macro prend toutes les valeurs de la colonne B. Si ce n'est pas le cas, m'accordera tu ton pardon?? : )
A toute !
..
Vous n’avez pas trouvé la réponse que vous recherchez ?
jijudu
Messages postés211Date d'inscriptionjeudi 15 mai 2008StatutMembreDernière intervention 3 septembre 2009 17 mai 2008 à 17:50
Slt !!
re c moi ^^,
J'ai essayé ta marco, elle fonctionne mise à part la partie pour le calcul de la moyenne ; )
Alors voilà, je me disai qu'il faudrai initialiser la variable "moyenne" au début de la boucle for
et mettre => moyenne = 0 qu'est ce t'en pense ?
Dim Moyenne as double
For i = lbound(MesValeurs) to ubound(MesValeurs)
Moyenne = Moyenne + MesValeurs(i)
next i
De plus, "Ubound" donne la valeur de l'indice supérieur du tableau, alors pourquoi la somme des valeurs contenue dans le tableau serai donné par =>
ubound(MesValeurs) + 1 ??
mortalino
Messages postés6786Date d'inscriptionvendredi 16 décembre 2005StatutMembreDernière intervention21 décembre 201118 17 mai 2008 à 17:59
salut,
pas besoin d'initialiser la variable, effectivement, elle vaut 0, mais dans
Moyenne = Moyenne + MesValeurs(i)
il faut traduire Moyenne = 0 + Ce que vaut MesValeurs(i)
Pour le Ubound(tata) + 1, c'est simple, sache que les tableaux de variables, par défaut, est en base 0, donc si ton Indice supérieur vaut 10, tu as 11 valeurs (car l'indice 0 en contient une aussi, donc 0 à 10 = 11)
Pour ton problème, là je ne vois pas, dans
Dim Moyenne as double
For i = lbound(MesValeurs) to ubound(MesValeurs)
Moyenne = Moyenne + MesValeurs(i) 'enleve le -1
next i
Sous Moyenne = ..., met un MsgBox Moyenne & vbcrlf & MesValeurs(i)
et dit nous ce que la boite de message te retourne
jijudu
Messages postés211Date d'inscriptionjeudi 15 mai 2008StatutMembreDernière intervention 3 septembre 2009 20 mai 2008 à 14:58
Slt !
Je ne peux pas compiler la macro à cause du code :
for i = n_ligne_debut to n_ligne_fin
MesValeurs(j) = cdbl(cells(i, 2).Value)
j = j + 1
next i
Excel ne veut pas pas compiler à cause de la ligne MesValeurs(j) = cdbl(cells(i, 2).Value)
Erreur 1004 : " l'indice n'appartient pas la sélection"
Je pense qu'il veut faire référence à l'indice "j". Je ne comprends pas pourquoi cette erreur survient alors que "j" est déclaré. Bref normalement tout est conforme pour que sa fonctionne .. Mais non :p
jijudu
Messages postés211Date d'inscriptionjeudi 15 mai 2008StatutMembreDernière intervention 3 septembre 2009 20 mai 2008 à 15:05
Slt !
Je ne peux pas compiler la macro à cause du code :
for i = n_ligne_debut to n_ligne_fin
MesValeurs(j) = cdbl(cells(i, 2).Value)
j = j + 1
next i
Excel ne veut pas pas compiler à cause de la ligne MesValeurs(j) = cdbl(cells(i, 2).Value)
Erreur 1004 : " l'indice n'appartient pas la sélection"
Je pense qu'il veut faire référence à l'indice "j". Je ne comprends pas pourquoi cette erreur survient alors que "j" est déclaré. Bref normalement tout est conforme pour que sa fonctionne .. Mais non :p
jijudu
Messages postés211Date d'inscriptionjeudi 15 mai 2008StatutMembreDernière intervention 3 septembre 2009 20 mai 2008 à 16:35
Yep !!!
Alors j ai mit la msgbox avt la boucle
MsgBox LBound(MesValeurs)
La programme ne se compile pas et J 'ai tjrs le mm rapport d'erreur
Erreur 1004 : " l'indice n'appartient pas la sélection" Sauf que la ligne qui bugg est la nouvelle ligne ajouté c a d
MsgBox LBound(MesValeurs)
mortalino
Messages postés6786Date d'inscriptionvendredi 16 décembre 2005StatutMembreDernière intervention21 décembre 201118 20 mai 2008 à 16:41
c'est que MesValeurs ne contient rien.
Le mieux serait de tester en mode pas à pas (F8) afin de vérifier toutes les valeurs de chaaque variables (en pointant le curseur de la souris dessus, une fois l'instruction exécutée
jijudu
Messages postés211Date d'inscriptionjeudi 15 mai 2008StatutMembreDernière intervention 3 septembre 2009 20 mai 2008 à 17:05
Sub deuxieme()
Dim n_ligne_fin As Integer
Dim n_ligne_debut As Integer
Dim contenu As Date
n_ligne_debut = 6
n_ligne_fin= 149
Dim TableValeur() As Double
ReDim valeur((n_ligne_fin- n_ligne_debut) + 1)
Dim i As Integer, j As Integer
For i = n_ligne_debut To n_ligne_fin Step 1
TableValeur(j) = Cells(i, 2).Value
j = j + 1
Next i
MsgBox TableValeur(2)
End Sub
Ci dessus ma macro. J'ai effectuer le mode pas à pas, Mais chaque fois que je passe par la ligne "TableValeur(j) = Cells(i, 2).Value" la macro bugg alors que cette cellule n'est pas vide !
jeanjeandada
Messages postés152Date d'inscriptionlundi 21 avril 2008StatutMembreDernière intervention20 novembre 2011 21 mai 2008 à 18:02
SALUTT les copains ^^ xD
Explication :
lorsque j 'ai
n_ligne_debut = 6
n_ligne_fin = 9
'Il y a donc 4 valeurs
DimTableValeur()
ReDim TableValeur(n_ligne_fin - n_ligne_debut+1) '+1 pour avoir les 4 valeurs!!
For boucle = LBound(tableau) To UBound(tableau)
Comme on est en base 0, on a +1 valeur. Donc Comme j'ai 4 valeurs vaut mieux écrire
ReDim TableValeur(n_ligne_fin - n_ligne_debut) 'pas besoin de mettre +1 à cause de la base 0
Ai-je bien comprit la lecon
et ai-je bien été explicite ?? ^^
PS: j'ai essayé sans le +1 et sa marche parfaitement alors qu'avec le +1 lors d'une boucle FOR on passe une fois de trop.
allez++
jeanjeandada
Messages postés152Date d'inscriptionlundi 21 avril 2008StatutMembreDernière intervention20 novembre 2011 22 mai 2008 à 16:08
Yep , Donc j'ai mi des msgbox pour visualiser le probléme que j'avais le 17/05/2008 17:50:27
qui était que la moyenne ne marche pas
For j = LBound(TableVentMoyen) To UBound(TableVentMoyen)
Moyenne = Moyenne + TableVentMoyen(j)
MsgBox Moyenne & vbCrLf & TableVentMoyen(j) 'on remarque que tout est correct ici
Next j
J'ai remarqué avec le mode pas à pas que lorsque arrivé à la ligne :
moyennefin = Moyenne / UBound(TableVentMoyen) + 1
moyenne fin ne prend pas la bon résultat Parce que Moyenne=31,7 et UBound(TableVentMoyen)=4+1= 5
et 31,5/5=6,34
et MOyenneFin=8,9
elle est pas mal celle là hein ...