Affichage des 5 dernières mesures dans un label? [Résolu]

Signaler
Messages postés
27
Date d'inscription
dimanche 25 janvier 2009
Statut
Membre
Dernière intervention
27 juin 2011
-
cs_choupinoob
Messages postés
27
Date d'inscription
dimanche 25 janvier 2009
Statut
Membre
Dernière intervention
27 juin 2011
-
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

Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
217
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
Messages postés
27
Date d'inscription
dimanche 25 janvier 2009
Statut
Membre
Dernière intervention
27 juin 2011

(Avant que ça râle ^^ : L'affichage doit se faire sur les 5 dernière mesure sur une seule colonne.)
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
217
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
Messages postés
27
Date d'inscription
dimanche 25 janvier 2009
Statut
Membre
Dernière intervention
27 juin 2011

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

Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
217
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
Messages postés
27
Date d'inscription
dimanche 25 janvier 2009
Statut
Membre
Dernière intervention
27 juin 2011

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!
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
217
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
Messages postés
27
Date d'inscription
dimanche 25 janvier 2009
Statut
Membre
Dernière intervention
27 juin 2011

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 :)
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
217
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
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
217
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
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
217
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
Messages postés
27
Date d'inscription
dimanche 25 janvier 2009
Statut
Membre
Dernière intervention
27 juin 2011

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!
Messages postés
27
Date d'inscription
dimanche 25 janvier 2009
Statut
Membre
Dernière intervention
27 juin 2011

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" :/
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
217
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
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
217
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
Messages postés
27
Date d'inscription
dimanche 25 janvier 2009
Statut
Membre
Dernière intervention
27 juin 2011

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*).
Messages postés
27
Date d'inscription
dimanche 25 janvier 2009
Statut
Membre
Dernière intervention
27 juin 2011

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

:/
Messages postés
27
Date d'inscription
dimanche 25 janvier 2009
Statut
Membre
Dernière intervention
27 juin 2011

Ok, merci beaucoup encore une fois! :)