Recup valeurs [Résolu]

Signaler
Messages postés
211
Date d'inscription
jeudi 15 mai 2008
Statut
Membre
Dernière intervention
3 septembre 2009
-
Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
-
Bonjour tout le monde

A1 04:50:00 | B1 3
A2 04:40:00 | B2 3.6
A3 04:30:00 | B3 3.9
A4 04:20:00 | B4 4.2
A5 04:10:00 | B5 4.3
A6 04:00:00 | B6 4.3
A7 03:50:00 | B7 4.1
A8 03:40:00 | B8 3.9

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.

MErci pour l'aide !
A voir également:

25 réponses

Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
18
normal que ça ne fonctionne pas, t'as fait une erreur toute bête (t'inquiète, ça arrive à tout le monde ) :

ReDim <strike>valeur</strike>((n_ligne_fin- n_ligne_debut) + 1)
ReDim TableValeur((n_ligne_fin- n_ligne_debut) + 1)
@++

le mystérieux chevalier,"Provençal, le gaulois"
Forum Office & VBA
Messages postés
682
Date d'inscription
vendredi 6 avril 2007
Statut
Membre
Dernière intervention
4 août 2012
6
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
Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
18
salut,

déjà, il faut créer une variable de type tableau (pour stocker les valeurs)

dim MesValeurs() As Double

Ensuite, déterminer le nombre de valeurs :

Dim NbValeurs as integer
NbValeurs = range("b1").End(xlDown).Row

On redimensionne le tableau :
REdim MesValeurs(NbValeurs)

Puis on boucle pour récupérer les valeurs :
Dim i as integer

for i = 1 to NbValeurs
    MesValeurs(i - 1) = cdbl(cells(i, 2).Value)
next i

Puis, la moyenne :
Dim Moyenne as double

For i = 1 to NbValeurs
    Moyenne = Moyenne + MesValeurs(i - 1)
next i
Moyenne = Moyenne / NbValeurs

Tu peux éviter le stockage dans la variable Tableau si tu le souhaites

@++

le mystérieux chevalier,"Provençal, le gaulois"
Forum Office & VBA
Messages postés
211
Date d'inscription
jeudi 15 mai 2008
Statut
Membre
Dernière intervention
3 septembre 2009

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 !
..
Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
18
effectivement, mon code lisait depuis la première ligne, voici une petite modif :

dim MesValeurs() As Double

REdim MesValeurs(n_ligne_fin - n_ligne_debut + 1)

Dim i as integer, j as integer

for i = n_ligne_debut to n_ligne_fin
    MesValeurs(j) = cdbl(cells(i, 2).Value)
    j = j + 1
next i

Dim Moyenne as double

For i = lbound(MesValeurs) to ubound(MesValeurs)
    Moyenne = Moyenne + MesValeurs(i - 1)
next i
Moyenne = Moyenne / ubound(MesValeurs) + 1
~
<small>[code.aspx?ID=39466 Mortalino] ~
Colorisation automatique</small>

@++

le mystérieux chevalier,"Provençal, le gaulois"
Forum Office & VBA
Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
18
Oups :

Dim Moyenne as double

For i = lbound(MesValeurs) to ubound(MesValeurs)
    Moyenne = Moyenne + MesValeurs(i) 'enleve le -1
next i

@++

le mystérieux chevalier,"Provençal, le gaulois"
Forum Office & VBA
Messages postés
211
Date d'inscription
jeudi 15 mai 2008
Statut
Membre
Dernière intervention
3 septembre 2009

D'ac au d'ac je testerai Ta macro Demain

Bonne nuit !!
+
A tt!
Messages postés
211
Date d'inscription
jeudi 15 mai 2008
Statut
Membre
Dernière intervention
3 septembre 2009

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   ??

ubound
(MesValeurs) + 
1

Merci les gars !!
++
Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
18
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

@++

le mystérieux chevalier,"Provençal, le gaulois"
Forum Office & VBA
Messages postés
211
Date d'inscription
jeudi 15 mai 2008
Statut
Membre
Dernière intervention
3 septembre 2009

Merci pour ta rapidité surprenante : ).

J'ai noté ton mesage. Je continuerai cela lundi car je n'ai pas en ce moment les moyens nécessaire pour réaliser la mainip. ^^

A suivre ......
A lundi
toute!
Messages postés
211
Date d'inscription
jeudi 15 mai 2008
Statut
Membre
Dernière intervention
3 septembre 2009

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

Merci
+
Messages postés
211
Date d'inscription
jeudi 15 mai 2008
Statut
Membre
Dernière intervention
3 septembre 2009

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

Merci
+
Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
18
salut,

ok, alors avant cette boucle, place :

MsgBox LBound(MesValeurs)

et dis moi ce que le message te retourne

@++

le mystérieux chevalier,"Provençal, le gaulois"
Forum Office & VBA
Messages postés
211
Date d'inscription
jeudi 15 mai 2008
Statut
Membre
Dernière intervention
3 septembre 2009

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)

:(
Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
18
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

@++

le mystérieux chevalier,"Provençal, le gaulois"
Forum Office & VBA
Messages postés
211
Date d'inscription
jeudi 15 mai 2008
Statut
Membre
Dernière intervention
3 septembre 2009

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 !
Messages postés
211
Date d'inscription
jeudi 15 mai 2008
Statut
Membre
Dernière intervention
3 septembre 2009

TSsssssssssssssssssssssssssssss mais quel boulet

Bon désolé de t'avoir mobilisé pour ce type d'erreur.
En espérant que ca n'y arrivera plus ^^

Merci encore MoRtalInO
^^

allez ++
Messages postés
152
Date d'inscription
lundi 21 avril 2008
Statut
Membre
Dernière intervention
20 novembre 2011

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++
Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
18
c'est ça.

dans ReDim TableValeur(n_ligne_fin - n_ligne_debut)

il faut traduireReDim TableValeur(9 - 6)
donc ReDim TableValeur(3)

Bref, vu que c'est en base 0, c'est aussi à traduitr par
ReDim TableValeur(0 To 3)

0 = 1ere valeur
1 = 2nde valeur
2 = 3eme valeur
3 = 4eme valeur
@++

le mystérieux chevalier,"Provençal, le gaulois"
Forum Office & VBA
Messages postés
152
Date d'inscription
lundi 21 avril 2008
Statut
Membre
Dernière intervention
20 novembre 2011

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


moyennefin = Moyenne / UBound(TableVentMoyen) + 1
MsgBox moyennefin & vbCrLf & Moyenne
Range("O11").Value = moyennefin

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 ...

Si qq1 saurait pq..:)

MErci bien