Valeurs des cellules, UserForm et boucles

Kirokk

XLDnaute Nouveau
Bonjour bonjour. :)
Etant novice en VBA, je m'en retour ne vers vous our quelques conseils avisés. :p
Voici mon problème :
_ Je souhaite récupérer les valeurs de cellules dans un UserForm
_ J'aimerais que si ces valeurs changent (et ce sera le cas), elles soient modifiées au même moment dans mon UserForm.

Voici le code actuel :
_ Du UserForm :
Code:
Private Sub UserForm_Activate()
    With Me
        .StartUpPosition = 3
        .Width = Application.Width
        .Height = Application.Height
        .Left = 0
        .Top = 0
    End With
End Sub

Private Sub UserForm_Click()
    
End Sub

Private Sub UserForm_Initialize()
    Me.StartUpPosition = 3
End Sub

_ De ma macro de lancement :
Code:
Sub Lancer_UserForm()
Dim nbr As Variant
Dim nombre As Variant

nombre = 0
    UserForm1.Show
    
    Do Until nombre = 25
    
        nombre = nombre + 1
        nbr = nbr + 5
        ' Go = TimeSerial(Hour(Time), Minute(Time), Second(Time) + Range("Feuil2!G1"))
    
        ' Application.OnTime Go, "Lancer_UserForm"
    
        ' Range("Feuil2!G2") = Time

        ' For nombre = 1 To 1000
            Range("Feuil3!A1") = nbr
            UserForm1.TextBox1.Text = nbr
            UserForm1.Repaint
        ' Next nombre
    Loop
End Sub

N'étant vraiment pas habitué au VB, je m'y perd pas mal :( ...
J'espère que vous saurez éclairer ma lanterne, pour le moment je fonce dans les murs :D
 

Dranreb

XLDnaute Barbatruc
Re : Valeurs des cellules, UserForm et boucles

Bonjour.
Qu'entendez vous par "si ces valeurs changent" ?
Pour que leur contenu puisse être changé par l'opérateur, votre Userform doit avoir sa propriété ShowModal à False.
Il est possible d'y déclarer un objet WithEvents As Application. Faire un Set de Application dessus à l'Userform_Initialize
 

Kirokk

XLDnaute Nouveau
Re : Valeurs des cellules, UserForm et boucles

En fait le but de l'appli est de récupérer des données d'un fichier .csv (ce que j'arrive à faire), de les traiter (ce que je n'ai pas encore fait) et ensuite d'afficher les résultats (additions, statistiques, etc.) dans le UserForm.
Le but final est d'avoir un affichage de la production réalisée par des machines sur une ligne de fabrication de moteurs.
 

Dranreb

XLDnaute Barbatruc
Re : Valeurs des cellules, UserForm et boucles

Le mieux c'est de récupérer de la plage source les valeurs en une fois dans un tableau de Variant.
et d'y puiser de quoi calculer et garnir des Label. Je ne puis vous en dire plus faute de classeur joint.
 

Kirokk

XLDnaute Nouveau
Re : Valeurs des cellules, UserForm et boucles

Ok.
Mon problème est surtout : comment récupérer une donnée pour l'afficher dans mon UserForm, et comment faire en sorte de "boucler" pour rafraîchir l'affichage (les données changent toutes les 5 min)?

Merci pour vos réponses ;)
 

Dranreb

XLDnaute Barbatruc
Re : Valeurs des cellules, UserForm et boucles

Donc on suppose qu'il est affiché non modal, ce qui permet des changements.
Une procédures Excel_WorksheetChange est disponibles dans un userform portant un objet déclaré Dim WithEvents Excel As Application. Il est aussi possible d'y mettre une procédure Public
Maintenant allez en mode avancé, bouton Gérer les pièces jointes. La recommandation de ma signature s'appliquera dorénavant pleinement.
 

Dranreb

XLDnaute Barbatruc
Re : Valeurs des cellules, UserForm et boucles

Je vois. C'est vous qui lisez le .csv à périodes fixes.
J'ai plusieurs questions ou suggestions. Un test de FileDateTime du fichier ne permettrait-il pas une fréquence plus grande de consultation pour voir s'il a changé ?
À partir du moment où vous aurez votre userform, restera-t-il nécessaire d'envoyer le contenu du fichier dans des cellules ?
De toute façon je vous conseille de charger le csv d'abord dans un tableau suffisamment grand en nombre de lignes pour couvrir tous les cas. Un appel à Cells pour une seule valeur à chaque fois est extrêmement pénalisant en terme de performance, et mobilise le fichier trop longtemps. Or il peut être réécrit par un autre processus entre temps si j'ai bien compris.
Je pense que le plus simple sera une procédure Public Raffraichir dans votre futur Userform, que vous invoquerez précédée de son nom, et qui exploitera un tableau Public dans un module ordinaire.
Pourrai-je avoir un modèle de .csv ? Si on traite tout en mémoire sans passer par des feuilles et si ce sont toujours les mêmes sortes d'info dans chaque colonne on pourrait avoir intérêt à passer par un tableau à 1 dimension convenablement typé pour chaque colonne.
P.S. L'Userform devra être affiché en mode non modal pour permettre l'exécution de processus indépendants.
À +
 
Dernière édition:

Kirokk

XLDnaute Nouveau
Re : Valeurs des cellules, UserForm et boucles

Pourrai-je avoir un modèle de .csv ?

Regarde la pièce jointe Schenck_matin2.zip
Voila un exemple de .csv, et pour donner plus de précisions les concernant :
_ il sont rafraîchit toutes les 5 minutes
_ ils s'écrivent jusqu'à 501 lignes (500 si on ne compte pas l'intitulé de colonnes)
_ La colonne que je souhaite récupérer principalement est VarValue, mais pas toutes les lignes, seulement celles correspondant à l'incrémentation des pièces produites.


À partir du moment où vous aurez votre userform, restera-t-il nécessaire d'envoyer le contenu du fichier dans des cellules ?

En ce qui concerne la manière de gérer les données (tableau, pas tableau, directement dans le UserForm), je suis prêt à toutes suggestions étant débutant en VB, je ne connais la manière la plus optimale de gérer ce cas.

Aussi en ce qui concerne les fonctions et autres à utiliser, si vous pouviez me donner des exemples ou éventuellement des liens vers les bons tutoriels, ça me serait d'une grande aide ;)

P.S. L'Userform devra être affiché en mode non modal pour permettre l'exécution de processus indépendants.

Je ne sais pas ou changer cela :confused: (je crois bien l'avoir aperçu quelque part dans un tutoriel, mais j'ai légèrement sauté ce passage je crois ... :eek: )
 

Dranreb

XLDnaute Barbatruc
Re : Valeurs des cellules, UserForm et boucles

Bonjour.
Je vais faire des essais de lecture du fichier. Mais en l'ouvrant depuis le zip il me l'a directement ouvert avec Excel, non avec le bloc-notes comme un fichier texte. Je ne sais encore si c'est une façon plus intéressante de l'ouvrir que des Line Input.
Mais pas sûr si vous maintenez que vous n'aurez plus besoin de garder ces infos en cellules pour d'autres raison, à partir du moment où vous aurez votre Userform.
J'en ai déjà parlé: Propriété ShowModal dans le fenêtre de propriétés de l'Userform.
Joignez votre classeur où l'userform est dessiné avec tous les contrôles nécessaires à présenter ce que vous voulez.
 

Kirokk

XLDnaute Nouveau
Re : Valeurs des cellules, UserForm et boucles

en l'ouvrant depuis le zip il me l'a directement ouvert avec Excel
Oui, et c'est normal. Néanmoins je suis obligé de faire une macro pour pouvoir l'ouvrir, excel n'a pas de formule intégrée pour l'ouverture de .csv.
Propriété ShowModal dans le fenêtre de propriétés de l'Userform
Je savais où aller en fin de compte, juste un oubli sur le coup :p
Joignez votre classeur où l'UserForm est dessiné avec tous les contrôles nécessaires à présenter ce que vous voulez
Malheureusement, je me suis rendu compte ce matin que... mon classeur a mal été sauvegardé, et je n'ai PLUS mon UserForm -_-
Aussi, je ne travaillerais pas sur ce projet aujourd'hui mais lundi, donc je m'occuperais de refaire ce que j'avais déjà fait (cela ne devrait pas être très long) et je vous renvoie ça ensuite.

En tout cas un grand merci pour prendre du temps sur mon cas :D
Je vous souhaite un bon WeekEnd et vous redonne tous les éléments lundi ;)
 

Kirokk

XLDnaute Nouveau
Re : Valeurs des cellules, UserForm et boucles

Me revoilà, avec la pièce jointe contenant un UserForm :)
J'ai pour la peine testé autre chose, je n'avais pas encore pensé à utiliser les Label pour afficher mes valeurs, c'est bien mieux que le TextBox. Il me manquerait essentiellement une fonction de temps qui me permettrais de faire une action de manière automatique.
 

Pièces jointes

  • test.xlsm
    48.8 KB · Affichages: 63
  • test.xlsm
    48.8 KB · Affichages: 67
  • test.xlsm
    48.8 KB · Affichages: 69

Dranreb

XLDnaute Barbatruc
Re : Valeurs des cellules, UserForm et boucles

Bonjour
Je vous l'ai dit, c'est idiot de faire des Line Input pour envoyez le résultat dans des cellules.
Soit vous programlmer l'ouverture du .csv qui fait ça tout seul dans un nouveau classeur, soit vous lisez son contenu dans un tableau Public.
Et écrivez une procédure Public dans votre Userform.
J'ai l'impression que le simple renseignement de ces deux labels n'est qu'un exemple. Développez un peu plus ce que vous voulez réellement faire.
 

Kirokk

XLDnaute Nouveau
Re : Valeurs des cellules, UserForm et boucles

Bonjour,
pour le moment j'ai surtout besoin d'un moyen d'automatiser ce que je fais.
C'est à dire une boucle avec un timer permettant à mon UserForm d'afficher les élément d'une colonne les uns à la suite des autres, voire le même élément si celui ci change/
programmer l'ouverture du .csv qui fait ça tout seul dans un nouveau classeur
Alors justement c'est la seule fonction que j'ai trouvé pour ouvrir un csv via macro. Je peux l'ouvrir d'un simple double clique, mais je n'ai rien trouvé pour le faire autrement qu'avec ce que j'utilise dans mon code.
écrivez une procédure Public dans votre Userform
J'imagine que c'est dans cette procédure que vous comptez faire le rafraîchissement du UserForm?

Cordialement.
 

Dranreb

XLDnaute Barbatruc
Re : Valeurs des cellules, UserForm et boucles

Bonjour.
Je ne comprend pas la fin de votre explication de ce que vous voulez faire.
Pour la façon de le lire, d'accord, elle ne me déplait pas tant que ça. Encore qu'il manque de quoi les traiter correctement (enlever les délimiteurs de chaine, récupérer la date et l'heure). Je dis seulement que ce n'est pas une bonne idée d'envoyer le résultat dans des cellules. Et en tout cas sûrement pas directement au coup par coup par des appels à Cells.
J'imagine que c'est dans cette procédure que vous comptez faire le rafraîchissement du UserForm
Oui tout à fait. Elle sera appelée, précédée du nom du Userform suivi d'un point, depuis une petite procédure si le FileDateTime du fichier aura changé, ce qui prouvera que l'autre logiciel l'aura fermé après une certaine période de succession d'enregistrements effectués. Celle si s'autoreplanifiera par Application.OnTime toutes les 5 secondes.
Si vous souhaitiez être averti chaque fois que ce logiciel enregistre une information, il faudrait voir s'il ne serait pas plutôt possible de lui faire envoyer l'information dans le presse-papier, ou, à défaut, paramétrer la production du csv à un rythme plus élevé, avec moins d'enregistrements.
 

Discussions similaires

Statistiques des forums

Discussions
312 381
Messages
2 087 818
Membres
103 666
dernier inscrit
gjoanou