Affichage des 5 dernières mesures dans un label?

Résolu
cs_choupinoob Messages postés 27 Date d'inscription dimanche 25 janvier 2009 Statut Membre Dernière intervention 27 juin 2011 - 24 juin 2011 à 11:15
cs_choupinoob Messages postés 27 Date d'inscription dimanche 25 janvier 2009 Statut Membre Dernière intervention 27 juin 2011 - 27 juin 2011 à 12:36
Bonjour à tous!

J'expose mon problème. Je remplit par rapport à la réception de valeurs par le port série un tableau Excel composé de 2 colonnes. (Le reste se faisant via les formules dispo sans VB).

J'aimerais si cela est possible afficher dans mon UserForm un label, qui au fur et à mesure du remplissage du tableau informerai l'utilisateur des 5 dernières mesures effectués (Pour voir si la nouvelle mesure est en concordance). je précise que ce label doit agir de façon dynamique :)

Concrètement par exemple, si on est rendu à la mesure 20, le label devrait afficher la mesure 20, 19, 18, 17, 16. En passant à la mesure 21, il devrait afficher les 21, 20, 19, 18, 17, et ainsi de suite.

J'ai tenté de réaliser un code mais celui-ci ne marche pas. Je m'adresse donc à vous afin de pouvoir avoir, si possible quelques pistes de recherches ou un peu d'aide.


Je vous remercie(encore une fois) pour tout et je reste à votre disposition pour plus de questions.


E.

18 réponses

ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
27 juin 2011 à 12:00
1) Et alors ?
C'est ce que tu demandais !
2) corrige le 5 en 4 ici :
if dercel.row > 4 then toto 4 else toto dercel.row
3) si tu veux un ordre inverse, inverse donc la concaténation (et ça, c'est très simple !)


____________________
Vous aimez Codes-Sources ? Il vous aide ? Cliquez ici pour l'aider à continuer
Cliquer sur "Réponse acceptée" en bas d'une solution adéquate est
3
cs_choupinoob Messages postés 27 Date d'inscription dimanche 25 janvier 2009 Statut Membre Dernière intervention 27 juin 2011
24 juin 2011 à 11:16
(Avant que ça râle ^^ : L'affichage doit se faire sur les 5 dernière mesure sur une seule colonne.)
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
24 juin 2011 à 11:40
Bonjour,

Il me semble (non?) que tu as déja appris comment connaitre la dernière cellule non vide d'une colonne.
Que te reste-t-il à faire ?
Je préfère te l'indiquer et te voir t'y mettre toi-même.

une boucle For i = 0 to 4 pour relever les valeurs de chaque cellule en démarrant par la dernière et en remontant vers le haut (step -1) pour relever, en décalant de i par Offset la valeur de chaque cellule.
à chaque lecture ainsi faite :
toto = toto & " " & lecture_faite

Une fois la boucle terminée ===>>
ton_label.caption = toto

Reviens avec ton essai si difficulté, en nous l'exposant.

____________________
Vous aimez Codes-Sources ? Il vous aide ? Cliquez ici pour l'aider à continuer
Cliquer sur "Réponse acceptée" en bas d'une solution adéquate est
0
cs_choupinoob Messages postés 27 Date d'inscription dimanche 25 janvier 2009 Statut Membre Dernière intervention 27 juin 2011
24 juin 2011 à 11:47
Hm, dans ce genre la?

Dim lapremieredisponible As String
Dim lasecondedisponible As String
Dim latroisiemedisponible As String
Dim laquatriemedisponible As String
Dim lacinquiemedisponible As String

lapremieredisponible = Range("B65536").End(xlUp).Offset(1, 0)
ladeuxiemedisponible = Range("B65536").End(xlUp).Offset(-1, 0)
latroisiemedisponible = Range("B65536").End(xlUp).Offset(-2, 0)
laquatriemedisponible = Range("B65536").End(xlUp).Offset(-3, 0)
lacinquiemedisponible = Range("B65536").End(xlUp).Offset(-4, 0)

Label10.Caption = lapremieredisponible & vbLf & lapdeuxiemedisponible & vbLf & latroisiemedisponible & vbLf & laquatriemedisponible & vbLf & lacinquiemedisponible

0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
24 juin 2011 à 11:51
Si tu veux !
Mais ... et si tu utilisais une boucle for to au lieu d'alourdir ainsi ton code ?
Essaye, au moins

____________________
Vous aimez Codes-Sources ? Il vous aide ? Cliquez ici pour l'aider à continuer
Cliquer sur "Réponse acceptée" en bas d'une solution adéquate est
0
cs_choupinoob Messages postés 27 Date d'inscription dimanche 25 janvier 2009 Statut Membre Dernière intervention 27 juin 2011
24 juin 2011 à 11:57
Je vais tenter après la pause midi :). Mais dans l'absolu, celui la marche?
(Tout le monde s'en fout mais ça fait plaisir de réussir à comprendre des choses :°))


Merci encore!
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
24 juin 2011 à 13:04
Mais dans l'absolu, celui la marche?

Tu ne crois pas que tu aurais ta réponse en l'essayant, plutôt que de poser cette question ?


____________________
Vous aimez Codes-Sources ? Il vous aide ? Cliquez ici pour l'aider à continuer
Cliquer sur "Réponse acceptée" en bas d'une solution adéquate est
0
cs_choupinoob Messages postés 27 Date d'inscription dimanche 25 janvier 2009 Statut Membre Dernière intervention 27 juin 2011
24 juin 2011 à 13:26
Tu ne crois pas que tu aurais ta réponse en l'essayant, plutôt que de poser cette question ? 


J'avoue que c'est une question très simplette quand sortie de propos. Je ne suis pas à l'entreprise aujourd'hui(déplacement^^). Donc j'ai pas mon programme, la balance etc.

je me suis juste posée cette question dans la voiture :)
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
24 juin 2011 à 13:37
Ah!
et bien tu attendras d'être sur ta machine !
Ou tout simplement une machine avec VB, puisque la balance et tout le reste ne sont pas nécessaires pour tester ce code


____________________
Vous aimez Codes-Sources ? Il vous aide ? Cliquez ici pour l'aider à continuer
Cliquer sur "Réponse acceptée" en bas d'une solution adéquate est
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
24 juin 2011 à 13:53
Bon ...
je n'ai pas ta balance, ni ton appli !
J'ai pourtant testé ceci (tout bête)
Dim dercel As Range
Set dercel = Range("B" & Rows.Count).End(xlUp)
 dercel.Select
 For i = 0 To -4 Step -1
   toto = toto & " " & dercel.Offset(i, 0).Value
 Next
 Label1.Caption = Trim(toto)
 Set dercel = Nothing

Fastoche, non ?
Si tu veux maintenant que je t'aide dans le futur, tu vas me faire le plaisir d'analyser ce code ultra simple, puis d'en commenter chacune des lignes (pour me montrer ta volonté de comprendre)
c'est "donnant-donnant"


____________________
Vous aimez Codes-Sources ? Il vous aide ? Cliquez ici pour l'aider à continuer
Cliquer sur "Réponse acceptée" en bas d'une solution adéquate est
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
24 juin 2011 à 13:55
et enlève le dercel.Select qui ne sert rigoureusement à rien (mis dans mon test pour "vérifier", c'est tout.

____________________
Vous aimez Codes-Sources ? Il vous aide ? Cliquez ici pour l'aider à continuer
Cliquer sur "Réponse acceptée" en bas d'une solution adéquate est
0
cs_choupinoob Messages postés 27 Date d'inscription dimanche 25 janvier 2009 Statut Membre Dernière intervention 27 juin 2011
27 juin 2011 à 09:24
Dim dercel As Range
Set dercel = Range("B" & Rows.Count).End(xlUp)
 dercel.Select
 For i = 0 To -4 Step -1
   toto = toto & " " & dercel.Offset(i, 0).Value
 Next
 Label1.Caption = Trim(toto)
 Set dercel = Nothing


Fastoche, non ?
Si tu veux maintenant que je t'aide dans le futur, tu vas me faire le plaisir d'analyser ce code ultra simple, puis d'en commenter chacune des lignes (pour me montrer ta volonté de comprendre)
c'est "donnant-donnant"



Donc, en commentant :

Dim dercel As Range 'définit "dercel" comme une plage de cellule
Set dercel = Range("B" & Rows.Count).End(xlUp)''récupérer la zone de cellule de la colonne B
 For i = 0 To -4 Step -1 'pour les cellules de 0 à -4 sélectionnées en partant de la dernière active à une marche de -1
   toto toto & " " & dercel.Offset(i, 0).Value 'variable "toto" les cellules précédemment sélectionnés.
 Next
 Label1.Caption = Trim(toto)'Affichage de "toto" en supprimant les espaces inutiles.
 Set dercel = Nothing ' La j'avoue que je pèche et que je ne comprend pas trop l'utilité de ce texte



J'espère que c'est ça. Je vais tenter d'adapter.

Merci beaucoup!
0
cs_choupinoob Messages postés 27 Date d'inscription dimanche 25 janvier 2009 Statut Membre Dernière intervention 27 juin 2011
27 juin 2011 à 09:40
Et la ligne
toto = toto & " " & dercel.Offset(i, 0).Value


Me renvoie à l'erreur d’exécution 1004, "Erreur définie par l'application où par l'objet" :/
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
27 juin 2011 à 11:24
Me renvoie à l'erreur d’exécution 1004, "Erreur définie par l'application où par l'objet" :/

et cela ne te dit rien ?
Tu auras ce type d'erreur si dercel < 5 (évident)
A toi (et c'est simple) d'ajouter une expression conditionnelle (ou encore d'utiliser - mais moins beau - On Error Resume Next)

Pour le reste : lorsque l'on crée un objet (et une plage en est un) on lui attribue la valeur Nothing pour libérer la mémoire.

____________________
Vous aimez Codes-Sources ? Il vous aide ? Cliquez ici pour l'aider à continuer
Cliquer sur "Réponse acceptée" en bas d'une solution adéquate est
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
27 juin 2011 à 11:33
allez !
Correction sans tester pour éviter cette erreur
Dim dercel As Range, toto as long
Set dercel = Range("B" & Rows.Count).End(xlUp)
if dercel.row > 4 then toto 5 else toto dercel.row
toto = dercel.row

For i = 0 To -toto Step -1
   toto = toto & " " & dercel.Offset(i, 0).Value
 Next
 Label1.Caption = Trim(toto)
 Set dercel = Nothing


____________________
Vous aimez Codes-Sources ? Il vous aide ? Cliquez ici pour l'aider à continuer
Cliquer sur "Réponse acceptée" en bas d'une solution adéquate est
0
cs_choupinoob Messages postés 27 Date d'inscription dimanche 25 janvier 2009 Statut Membre Dernière intervention 27 juin 2011
27 juin 2011 à 11:50
Pour le reste : lorsque l'on crée un objet (et une plage en est un) on lui attribue la valeur Nothing pour libérer la mémoire.


D'accord, je ne savait pas.

Sinon, ton code marche, mais uniquement lorsque mes cellules sont remplies préalablement. Sinon rien (Sauf que mon classeur excel se remet à zéro au démarrage. *Tristesse*).
0
cs_choupinoob Messages postés 27 Date d'inscription dimanche 25 janvier 2009 Statut Membre Dernière intervention 27 juin 2011
27 juin 2011 à 11:57
J'ai rien dit, j'ai posté entre les deux ><

Ca marche mais l'afficheur n'est pas logique.

Par exemple, j'ai dans mon tableau dans l’ordre.

B
1
2
100
567


Et mon afficheur indique :
556710021

:/
0
cs_choupinoob Messages postés 27 Date d'inscription dimanche 25 janvier 2009 Statut Membre Dernière intervention 27 juin 2011
27 juin 2011 à 12:36
Ok, merci beaucoup encore une fois! :)
0
Rejoignez-nous