XL 2013 [RESOLU]. VBA: Multi-chrono

Markotxe

XLDnaute Nouveau
Bonjour,
J'ai réalisé un chronomètre (voir fichier joint) qui permet de façon assez instinctive de contrôler des séries de type "Farthley". Le programme fonctionne bien et je le laisse volontiers à disposition des personnes qui seraient intéressées.
Cependant afin de boucler le projet, j'aimerais avoir plusieurs chronos qui fonctionneraient indépendamment et qui conserveraient les mêmes caractéristiques.

Après avoir cherché sur le forum, testé plusieurs scénarios, force est de constater que je reste bloqué. C'est pourquoi, je sollicite vos compétences. Pistes, solutions, suggestions , astuces sont toutes les bienvenues.



Merci de votre attention.
 

Pièces jointes

  • SAM CRONO.xls
    1.2 MB · Affichages: 55
Dernière édition:

eriiic

XLDnaute Barbatruc
Bonjour,

avec :
VB:
    Dim c As Range
    Set c = ActiveSheet.Shapes(Application.Caller).OLEFormat.Object.TopLeftCell
tu récupèreras la cellule supérieure gauche (attention à ne pas déborder) de l'image cliquée.
Plus qu'à te caler dessus.
Seulement actuellement elles portent toutes le même nom, il ramène le premier qui correspond. Il faut toutes les renommer.

Ou bien tu peux mettre des noms contenant les caractéristiques du bouton et te baser sur le nom de l'objet : Application.Caller
Par exemple "Chrono 1 Start". Avec un Split tu récupères les infos séparées : n° du chrono et fonction. Par contre moins souple si tu déplaces
eric
 
Dernière édition:

Markotxe

XLDnaute Nouveau
Bonsoir Éric, Dranret,
Merci Danret, j'ai consulté le classeur que vous avez eu l'amabilité de partager. Malheureusement, je ne peux difficilement l'adapter à ce projet. Les chronos ne répondent pas entièrement à la fonctionnalité recherchée. D'autre part mes connaissances en VBA étant très pauvres, je ne comprends pas et ne voit vraiment comment l'apprivoiser.
Mais merci tout de même...
 

Dranreb

XLDnaute Barbatruc
Après glisser/déplacer vers votre projet VBA de l'UFmChrono, du module MRythmeur et du module de classe Rythmeur, cette procédure dans un module standard installe les 7 exemplaires de mon chronomètre, mis à 0 :
VB:
Sub Test()
Dim N&
For N = 1 To 7
   With New UFmChrono: .Lancer: .Stopper
      .Left = 100: .Top = N * .Height + 100: End With
   Next N
End Sub
 

Dranreb

XLDnaute Barbatruc
On dirait que je ne l'ai jamais affiché sans le lancer.
Quand on l'affiche simplement le bouton est dans un état incohérent, il manque une instruction ImgBtnVert.ZOrder dans la Sub UserForm_Initialize :
VB:
Private Sub UserForm_Initialize()
   Set RythRaff = New Rythmeur
   QueryPerformanceFrequency Fréq
   ImgBtnVert.ZOrder
   Me.Show
   End Sub
Après l'ajout de cette instruction, plus besoin d'invoquer successivement les méthodes Lancer et Stopper si on ne veut pas le lancer au départ.
 

Dranreb

XLDnaute Barbatruc
Toujours en supposant que cette modif a été faite, voici un autre exemple un tout petit peut plus complet dans un objet Worksheet d'une feuille qui inscrit les temps des chronos, qu'ils tournent ou non, dans des cellules quand on les sélectionne :
Code:
Option Explicit
Private TUFmChrono(1 To 7) As UFmChrono
Private Sub Worksheet_Activate()
   Dim N As Long
   For N = 1 To 7
      Set TUFmChrono(N) = New UFmChrono
      With TUFmChrono(N): .Left = 100: .Top = N * .Height + 100: End With
      Next N
   End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
   Dim N As Long
   N = Target.Row \ 5
   If N >= 1 And N <= 7 Then Target.Value = TUFmChrono(N).Value
   End Sub
Private Sub Worksheet_Deactivate()
   Dim N As Long
   For N = 1 To 7
      Unload TUFmChrono(N)
      Next N
   End Sub
 

Markotxe

XLDnaute Nouveau
Bonsoir Dranreb
"Après glisser/déplacer (?) vers votre projet VBA de l'UFmChrono, du module MRythmeur et du module de classe Rythmeur (?), cette procédure dans un module standard installe les 7 exemplaires de mon chronomètre, mis à 0 :"

Je sens bien que vous faites tout votre possible pour m'aider et je vous en suis extrêmement reconnaissant. Pourtant, je dois bien admettre que je ne comprends pas.
Vraiment, désolé d'être aussi bête et aussi lent.
 

Dranreb

XLDnaute Barbatruc
C'est simple, vous n'allez pas tout recréer quand même ? Dans l'explorateur de projets, mettez le curseur de la souris sur le nom d'un élément qu'il vous faut du projet VBA de mon classeur, appuyez sur le bouton gauche, puis, le maintenant enfoncé, trainez le curseur jusqu'à une région de votre projet destinataire, relâchez le bouton, et hop ! vous en avez une copie dedans ! C'est ça qu'on appelle glisser/déplacer quelque chose. C'est le moyen le plus simple, le plus rapide et le plus sûr d'implanter une copie de quelque chose venant d'un autre projet.
 
Dernière édition:

Markotxe

XLDnaute Nouveau
Bonjour Dranred,
J'ai suivi vos instructions à la lettre, sept chronos s'affichent. ils sont bien indépendants les-uns des autres.
Suite au dernier rajout Vba apparait un message error 91.

La ligne impliquée est la suivante (en caractère gras, surlignée):
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim N As Long
N = Target.Row \ 5
If N >= 1 And N <= 7 Then Target.Value = TUFmChrono(N).Value
End Sub

Merci de votre attention et encore merci pour votre patience Dranred.
 

Markotxe

XLDnaute Nouveau
Bonsoir Dranred,
J'ai tenté plusieurs manips sans succés…
Ou le même message d'erreur apparait ou il ne se passe rien (alors que si j'ai bien compris, on devrait recueillir les temps, c'est bien ça?).
Comme vous me l'avez suggéré, je vous joint le classeur.
(De mon côté, je vais essayer d'adapter l'Userform aux besoins recherchés).
MERCI, encore MERCI
 

Pièces jointes

  • SAM Chronometre.xls
    119 KB · Affichages: 28

Dranreb

XLDnaute Barbatruc
Pour que la Worksheet_Change puisse marcher il faut que les chronomètres aient été enregistrés dans le tableau TUFmChrono au moment de leur création, et non créés par une autre voie sans y avoir été enregistrés.
Si ça ne convient pas de les créer à l'activation de la feuille, vous pouvez le faire plutôt par un bouton ActiveX
Si vous voulez les lancer par un bouton de formulaire if faut déclarer Public ce tableau dans un module standard, de préférence celui qui contient cette macro, réécrite en conséquence.
 
Dernière édition:

Statistiques des forums

Discussions
312 104
Messages
2 085 349
Membres
102 869
dernier inscrit
radyreth