begin process at 2012 02 15 23:50:36
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Control

 > TIMER POUR VBA

TIMER POUR VBA


 Information sur la source

Note :
7,86 / 10 - par 7 personnes
7,86 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Control Classé sous :timer, vba, contrôles OCX, enregistrement registre Niveau :Débutant Date de création :28/08/2006 Date de mise à jour :16/03/2009 18:53:20 Vu / téléchargé :32 850 / 2 403

Auteur : mimiZanzan

Ecrire un message privé
Commentaire sur cette source (58)
Ajouter un commentaire et/ou une note

 Description

Le VBA ne possède pas de contrôle timer, souvent bien pratique (ou alors, je ne l'ai pas trouvé!).
Ce code présente un contrôle activeX Timer créé sous VB et utilisable sous Excel par exemple, à condition de l'enregistrer dans le registre, puis de l'ajouter à la boite à outils contrôles du VBA, ou directement sur une feuille Excel.
Le code comprend le projet activeX du contrôle pour la lecture et la modif éventuelle des propriétés du timer, et qui permet
aussi l'enregistrement du contrôle Timer.ocx dans le registre, ce qui est indispensable pour l'utiliser.
Si on n'a pas VB (!), j'envoie séparemment un autre code VBA Excel qui permet l'enregistrement du contrôle Timer.ocx qui est joint au zip. Il permet aussi l'enregistrement des dll et ocx que l'on peut trouver un peu partout.


 Conclusion

Merci de vos remarques

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !
  •   TimerVBA_2
    • InstalleTimerVBA.xlsTélécharger ce fichier [Réservé aux membres club]28 672 octets
    • MSSCCPRJ.SCCTélécharger ce fichier [Réservé aux membres club]193 octets
    • TimerOCX.vbpTélécharger ce fichier [Réservé aux membres club]Voir ce fichier696 octets
    • TimerOCX.vbwTélécharger ce fichier [Réservé aux membres club]Voir ce fichier52 octets
    • TimerVBA.ctlTélécharger ce fichier [Réservé aux membres club]Voir ce fichier1 906 octets
    • TimerVBA.ctxTélécharger ce fichier [Réservé aux membres club]500 octets
    • TimerVBA.expTélécharger ce fichier [Réservé aux membres club]1 026 octets
    • TimerVBA.libTélécharger ce fichier [Réservé aux membres club]2 616 octets
    • TimerVBA.ocxTélécharger ce fichier [Réservé aux membres club]24 576 octets

Télécharger le zip


 Historique

09 avril 2008 01:09:43 :
Changement du nom du projet auquel se réfèrait le contrôle TimerVBA. Le nom "Timer" rentrait en conflit avec la fonction Timer VBA...
16 mars 2009 18:53:20 :
Ajout d'un programme Excel VBA pour enregistrer automatiquement le contrôle TimerVBA.ocx, suite à de nombreuses questions des membres VB France à ce sujet.

 Sources du même auteur

Source avec Zip SUIVI SCORES ET CLASSEMENTS SCRABBLE
Source avec Zip FEU D'ARTIFICE SOUS EXCEL VBA
Source avec Zip ACCÈS PAR MOT DE PASSE À FEUILLE EXCEL
Source avec Zip MANIPULATIONS FORMES SUR GRAPHES EXCEL AVEC VBA
Source avec Zip AJUSTEMENT USERFORM VBA À CELLULE FEUILLE EXCEL

 Sources de la même categorie

Source avec Zip COMMUNICATION MODBUS MASTER par sergelapointe
Source avec Zip Source avec une capture DÉPLACEMENT AVEC FLÈCHES DANS UN PAVÉ DE TEXTBOX 9X9 DYNAMIQ... par EhJoe
Source avec Zip Source avec une capture Source .NET (Dotnet) CONTROLSTARS EN RÉPONSE À JAKNIGHT007 par bigboss9
Source avec Zip Source avec une capture Source .NET (Dotnet) CALENDRIER ANNUEL NORME ISO par Prog1001
Source avec Zip Source avec une capture Source .NET (Dotnet) CONTROLE STARS par jaknight007

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture Source .NET (Dotnet) JEU DE MÉMOIRE CLASSIQUE par raffika
Source avec Zip Source avec une capture CALENDRIER EN VBA POUR EXCEL 2010 par nounou94
Source avec Zip Source avec une capture JEU DU SERPENT/TRON par dada9109
Source avec Zip Source avec une capture PLANCHE CONTACT SOUS WORD par Le Pivert
Source avec Zip FERMER UN PROGRAMME OU UN PROCESSUS par 123collargol

Commentaires et avis

Commentaire de mortalino le 28/08/2006 17:00:00

Salut,

voici une autre méthode :

' *** A placer dans un Module :

Option Explicit

Public Declare Function SetTimer Lib "user32" _
    (ByVal hwnd As Long, ByVal nIDEvent As Long, ByVal uElapse As Long, ByVal lpTimerFunc As Long) As Long

Public Declare Function KillTimer Lib "user32" _
    (ByVal hwnd As Long, ByVal nIDEvent As Long) As Long

Public TimerID  As Long
Public hwnd     As Long
Public i        As Integer

Sub StartTimer()
    SetTimer hwnd, TimerID, 2000, AddressOf MonTimer
End Sub

Public Sub MonTimer(ByVal hwnd As Long, ByVal nIDEvent As Long, _
                    ByVal uElapse As Long, ByVal lpTimerFunc As Long)

' *** ici les actions à faire
End Sub

'=======================================================================

' *** A placer dans le UserForm :

Private Declare Function FindWindowA Lib "user32" _
    (ByVal lpClassName As String, ByVal lpWindowName As String) As Long

Private Sub UserForm_Initialize()
  hwnd = FindWindowA("Thunder" & IIf(Application.Version Like "8*", _
    "X", "D") & "Frame", Me.Caption)

    Call Module1.StartTimer
End Sub

Private Sub UserForm_Terminate()
    Call Module1.KillTimer(hwnd, TimerID)
End Sub

++

Commentaire de mimiZanzan le 29/08/2006 18:34:57

Merci pour ton commentaire.
En fait, ce que je propose, c'est d'avoir un vrai contrôle Timer en VBA que l'on peut utiliser en plusieurs exemplaires à la fois avec des intervalles différents, et même sans utiliser d'userform en le ou les plaçant directement sur une feuille Excel, en les gardant invisibles.
Par contre au sujet de ton code, peux-tu m'expliquer le rôle de la variable publique i et la valeur 2000 dans la fonction SetTime, ainsi que l'obtention de la variable TimerID? Comment règle-t-on le délai du timer? De +, les actions pendant le timer doivent forcémment être placées dans la procédure MonTimer, alors qu'avec un contrôle activeX on fait ce que l'on veut où on veut pendant le déroulement du délai.

Merci d'avance.

Commentaire de mortalino le 30/08/2006 18:18:35

Salut,

pour la valeur i, c'est une erreur. En fait quand j'ai vu ta source, c'est à ce moment que j'ai créé ce bout de code. i était là pour mes essai dans une boucle.

La valeur TimerID sert à détecter le bon timer désigné (ici 0 car pas désigné) mais tu peux en attribuer plusieurs. Pour le 2000, c'est l'interval en ms.

"De +, les actions pendant le timer doivent forcémment être placées dans la procédure MonTimer"
>> je l'ai fait à la vb6. Dans vb6, il faut rendre un timer enable, puis les actions sont lancées, dans la procédure Sub Timer1_Timer()

Je ne remet pas ton code en question car il est effectivement pratique de l'avoir en ocx, je te propose une autre soluce, avec les API Set et KillTimer, puis le FindWindowA, afin de déterminer le handle d'une fenêtre pour appliquer le timer.

Pour information l'API timer est un peu plus précise que le timer de vb6 (et l'interval est supérieur)

++

Commentaire de cipango le 26/09/2006 11:35:53

Bonjour,
Je cherche depuis un bon moment à utiliser un timer dans VBA ( Excel ) exactement comme dans VB. La fonction Sleep par exemple est très insuffisante.
C'est pourquoi j'aimerais un peu plus de détails sur l'installation de ce Timer pour qu'il soit utilisable dans VBA Excel. J'ai déziper tous les fichiers ( il y en a 9 en tout, des ocx, des ctl, des ctx... ). Par quoi faut-il commencer ? Par exemple comment enregistrer l' ocx dans le registre ? Et ensuite...
Merci.

Commentaire de mimiZanzan le 26/09/2006 17:13:18

Salut, et merci de t'intéresser à mon code!

3 solutions:
  a/Avec VB: -ouvrir un projet Contrôle ActiveX
             -y ajouter le contrôle TimerVBA.ctl par le menu Projet, et mettre sa propriété public à true si c'est demandé.
             -supprimer le contrôle par défaut UserControl1.
             -faire créer projet activeX par le menu fichier (projet1.ocx), et donner un nom significatif au fichier, VBATimer par exemple, en choisissant une destination pour le fichier du contrôle).
Le contrôle ocx est compilé et enregistré dans le registre automatiquement.
  b/Avec Windows: menu démarrer,exécuter,écrire dans la fenêtre ouvrir: Regsvr32 "pathContrôle.ocx", où pathContrôle est le chemin complet et le nom du contrôle. Pour enlever le contrôle du registre, faire de même avec Regsvr32 /u "pathContrôle.ocx".
  c/ Avec Excel VBA: j'ai développé un petit programme pour enregistrer/supprimer les dll et les ocx (code source "ENREGISTREMENT FICHIERS ACTIVEX .OCX ET .DLL")

Ensuite, il suffit d'ouvrir Excel par ex, ajouter un userform dans VBA, puis menu Outils, contrôles supplémentaires, et cocher le nom du contrôle dans la liste. il devient alors disponible comme tout bon contrôle des familles!
Je lui ai même fait une tête de timer...

En tout cas, c'est vraiment en effet très pratique d'avoir un contrôle timer dans VBA (on peut en mettre autant qu'on veut, et même directement sur une feuille de calcul, et ils sont invisibles à l'exécution!)

Commentaire de john_pet le 14/10/2006 14:48:47

Merci pour ce code , car pour le moment j'utilisais OnTime avec beaucoup de problèmes d'arret en cas d'erreur
par contre chaque fois que j'ouvre la feuille il me dit de me méfier de l'OCX, comment passer outre à cette requette

merci

Commentaire de hugollin le 15/10/2006 12:48:24

Bonjour
J'ai essayé ceci :b/Avec Windows: menu démarrer,exécuter,écrire dans la fenêtre ouvrir: Regsvr32 "pathContrôle.ocx", Mais module introuvable ! avec : REGSVR32 Timer.ocx ca marche mais quand je place le controle dans l'userform j'ai un bug avec rapport d'erreur etc... à l'aide !!!

Commentaire de UNGDA le 28/02/2007 18:01:03

Bonjour,

ton timer sur userform me plaisait bien, je n'ai eu aucun problème d'installation, par contre après avoir mis pour tester dans une macro :
Cells(2, 13).Value = Time
TimerVBA1.Active = True
TimerVBA1.Intervalle = 65000 '(entre autres)je suppose que celà fait 65 sec
Cells(2, 14).Value = Time
j'obtiens  :  5:56:25 PM 5:56:25 PM et ce quelque soit la valeur de l'ntervalle...
je n'ai donc pas de temporisation....apparement ou peut être n'ais-je pas bien compris le fonctionnement ? L'intervalle est en ms ?
Merci d'une réponse si possible....

JP

Commentaire de mariuskeith le 17/05/2007 16:44:31

bonjour,j'ai un projet de stage ki me demande de faire une application pour extraire les données d'une machine ,les convertir (parce ke se sont des fichiers text) en pdf(parce ke c sécurisé),puis les archiver afin de les exploiter par aprés,
svp aidez-moi à réaliser ce projet
en fait,l'extraction des fichiers(données) doit étre sous réseau,non pa par port série ou paralléle!!!!!!

Commentaire de ahmed ch le 19/07/2007 10:15:19

merci mimiZanzan pour votre controle timer
il est vraiment efficace mais il n'est pas fonctionnel dans tous les ordinateurs: dans certaines postes(win xp ,excel 2003) et quand je dessine le controle activex dans la feuille excel le programme se plante et ne répond plus. merci de me donner une solution s'il existe: c'est extrement urgent!!! merci d'avance  

Commentaire de devinet le 11/09/2007 18:08:25

Bonjour,

Je ne sais pas si ton problème et le même que le mien car tu n'as pas donné
beaucoup de précisions dans ton commentaire.

Mais j'ai rencontré le problème suivant, et je me suis dépanné comme indiqué
plus bas.

un code VBA développé sur une machine A et qui s'exécutait parfaitement sur cette machine, est copié sur une machine B, mais se plante sur l'instruction timer.active=true.

Après contrôle :
- l'ocx est bien dans system32
- le regsvr32 se déroule correctement
- le timer est bien visible dans la boîte à outils.

Si on regarde (sur le code qui ne marche pas) les propriétés du timer.
on ne trouve pas les propriétés active et intervalle.... ce qui provoque un message d'erreur à l'exécution.

Sur la machine B, j'ai créé un fichier excel, insérer un userform, insérer un timer. les propriétés active et intervalle sont présentes. Un peu de code dans l'auto_open du fichier pour afficher la userform et lancer le timer : tout marche.

Je me suis dépanné comme ceci :
- ouvrir le fichier excel qui ne marche pas (celui développé sur la machine A)
- supprimer le timer dans la userform du code qui ne marche pas
- ouvrir le fichier de test (ci-dessus) qui marche,
  en laissant ouvert l'autre fichier.
- sélectionner le timer dans la userform du code qui marche, faire Ctrl C
- et copier le timer dans la userform du code qui ne marchait pas.
- renommer le timer en conformité avec le nom utilisé dans le code qui ne
  marchait pas.
- vérifier que le timer a bien ses propriétés intervalle et active présentes.
- enregistrer le fichier

et le code marche.

Je ne comprend pas pourquoi ces propriétés sont perdues en copiant le fichier xls de la machine A vers B, ni pourquoi un nouveau code écrit sur B est correct. mais je me suis dépanné comme cela.
Espérant que cela t'aide.


Mimizanzan, merci pour ton code qui m'a bien été utile.
As tu une idée sur le problème que j'ai pû rencontrer.

CBa

Commentaire de mimiZanzan le 10/10/2007 01:53:29

Salut Devinet,

Je crois que le pb est que le timer ocx, s'il est bien présent dans system32 de la machine B, n'est néanmoins pas enregistré dans le registre de la machine, ce qui est indispensable à son fonctionnement. Il faut donc le faire...
Je pense que tu sais le faire.

Commentaire de mimiZanzan le 18/10/2007 19:10:41

Salut Devinet,

En complément de mon commentaire précédent, je précise que pour que le timerVBA d'un programme fonctionne sur plusieurs machines, il faut AVANT de l'enregistrer dans le registre, que le fichier Timer.ocx soit dans le même CHEMIN D'ACCÈS sur les différentes machine, par ex "C:\MesControles\".
C'est pourquoi la plupart des dll et des activeX de Windows sont tous dans le chemin C:\WINDOWS\System32 ou
C:\WINDOWS\System.
Ne pas oublier que l'enregistrement dans le registre tient compte de la position du fichier sur le disque de la machine.
Si çà intéresse quelqu'un, j'ai fait un petit code VBA pour l'installation et l'enregistrement du timer à une position créée à partir de C:\
Merci de me faire savoir si ce commentaire t'as aidé.

Commentaire de devinet le 20/10/2007 08:17:30

Salut Mimizanzan,

Le code avait bien son ocx dans system32 sur la machine de développement, et sur celle de prod.
L'enregistrement s'était bien passé sur les 2 systèmes.

J'ai dû changer d'option et recoder différement (tâches planifiées de windows) car la date de recette arrivait.

Je ne lâche pas le morceau car ton code est intéressant et j'aimerai le réutiliser pour d'autre développements. Je te fais un mail si je trouve qq chose.
Merci,
CBa

Commentaire de typiquement le 02/01/2008 17:17:42

Bonjour et bonne année à tous,

Pour ma part, je ne parviens pas à utiliser le controle...
L'enregistrement dans le registre fonctionne normalement. J'arrive à récupérer le controle que je place dans une form vba mais il ne s'exècute pas à ma guise et rien n'apparait meme si j'ai mis le controle en "active".

Pouvez vous m'expliquer le paramétrage et l'utilisation du controle ou alors ai je simplement un autre bug?

Merci d'avance

Commentaire de mimiZanzan le 03/01/2008 01:36:24

Bonne année aux VB Members!

Pour TYPIQUEMENT, il faut aussi définir la propriété "intervalle" pour le timer en millisecondes, par ex 1000 pour une seconde, car elle est fixée à 0 par défaut.
Ensuite, mettre une action dans l'évènement "Private Sub TimerVBA1_Timer()", et çà devrait marcher!

Commentaire de Jurgi le 19/02/2008 17:56:48

Salut mimiZanzan,

Peux tu me dire quel est la plus petite valeur que mettre comme Interval??

Il me faudrait un timer avec une capacité de l'ordre de 32 ms et bien sûr j'en trouve pas!!

Merci

Jurgi

Commentaire de Jurgi le 19/02/2008 17:57:49

Avec juste moins de fautes :-)

Salut mimiZanzan,

Peux tu me dire quelle est la plus petite valeur que l'on peutr mettre comme Interval??

Il me faudrait un timer avec une capacité de l'ordre de 32 ms et bien sûr j'en trouve pas!!

Merci

Jurgi

Commentaire de mimiZanzan le 19/02/2008 18:17:38

La plus petite valeur est 1 ms, car le timer est étalonné en ms comme je l'ai indiqué dans mon message ci-dessus du 03/01.
Donc mets 32 pour ton besoin.

Commentaire de Jurgi le 19/02/2008 18:29:59

Merci mimiZanzan,

Je ne l'ai vu qu'après avoir posté mon message... Dsl

A++

Commentaire de Jurgi le 20/02/2008 19:39:21

Salut mimiZanzan,

je me demandais s'il y avait un autre moyen poour relancer le timer que par

Private Sub TimerVBA1_Timer()

Timer1.Active = false
Timer1.Active = true

End Sub

Commentaire de mimiZanzan le 20/02/2008 20:06:44

Non, c'est le seul moyen (comme sur VB6 d'ailleurs).
Mais il faut le lancer à partir d'une sub AUTRE que
Private Sub TimerVBA1_Timer() qui ne se déclenche que si le timer est activé.
Par contre cette procédure peut servir pour l'arrêter.

Commentaire de Jurgi le 20/02/2008 20:29:03 10/10

Oui oui je le lance depuis un autre sub la 1ère fois!!

je l'utilise comme... comme un truc qui me dis toutes les 32 ms que 32ms se sont écoulées!! (pour checker des valeurs sur une autre bécanne (en l'occurence une commande numérique!)

...Et ça fonctionne super!!

Merci

Commentaire de Ludoff le 12/03/2008 16:24:31 8/10

SALUT MIMIZANZAN

J'ai testé ton TIMER et ça marche très bien, beaucoup mieux que ma boucle infini sur TIMER VBA qui avec DOEVENTS pendant que l'on attent ralenti considérablement le PC.
Je vais l'installer dans ma macro.

MERCI

Commentaire de carrivin le 08/04/2008 13:09:33

Attention Il y a un conflit entre le nom Timer_VBA l'instruction Timer VBA, il faudrait changer le nom de l'objet.

Commentaire de mimiZanzan le 08/04/2008 15:04:53

Carrivin,

Je ne comprends pas ton pb de conflit.
Tout marche très bien chez moi, et bien d'autres utilisent ce timer sans "conflit"...
Tu dois avoir un autre pb.

Cordialement

Commentaire de carrivin le 08/04/2008 16:26:46

J'utilise ton timer dans une Form sous Word 2000 + l'instruction Timer dans une autre:

Private Sub UserForm_Activate()
    Dim TempInfos As Single, Start As Single
    
    If Trim(Label1.Caption) = "" Then Label1.Caption = "Initialization"
    
    RCFeuilleInfos.Repaint
    
    Select Case Label1.Tag
        Case 1
            RCDeplacementsDivers.PagePrecedente
            TempInfos = 0.5
        Case 2
            RCDeplacementsDivers.PageSuivante
            TempInfos = 0.5
        Case 3
            RCDiversTechTemplate.Visualise
            TempInfos = 0.5
        Case 4
            RCDiversTechTemplate.Cache
            TempInfos = 0.5
        Case 5
            RCDiversTechTemplate.ActionProtection
            TempInfos = 0.5
    End Select
    
    Start = Timer   ' Définit l'heure de début.
    
    Do While Timer < Start + TempInfos
    Loop
    
    Unload RCFeuilleInfos
End Sub

Lorsque j'exécute la macro j'ia une erreur sur l'instruction Timer.
Quand je vais voir la définition de l'instruction Timer ceci pointe vers l'objet Timer VBA et non plus l'instruction Timer.
Je pense que sait le fait que dans le projet Timer project Name est Timer.

Cordialement,

René.

Commentaire de mimiZanzan le 09/04/2008 00:21:05

Carrivin,

TRES JUSTE! Je viens de constater le conflit avec la fonction Timer de VBA (Excel ou Word, peu importe).
Je n'avais jamais utilisé la fonction Timer en même temps que mon timer...
C'est une erreur de ma part d'avoir nommé le projet auquel se refère mon timer bêtement "Timer".
Il faut renommer le projet autrement et ré-enregistrer le contôle OCX dans le registre avec le nouveau nom.

Je viens le faire, et tout est rentré dans l'ordre.
Je vais actualiser mon code sur le site Codes Source en ce sens.

Merci beaucoup pour ta clairvoyance.

Cordialement

Commentaire de Le Pivert le 16/04/2008 12:16:45 8/10

Très bon code qui marche parfaitement si l'on suit les indications de MimiZanzan. Le seul problème que je trouve c'est ce message à chaque ouverture du fichier: "Cette application est sur le point d'initialiser les contrôles ActiveX potentiellement non sûrs. Si la source de ce fichier est fiable, cliquez sur OK pour que les contrôles soient initialisés à l'aide des paramètres d'espace de travail en cours."
Il y aurait-il une solution pour le supprimer? Merci d'avance

Commentaire de mimiZanzan le 16/04/2008 15:32:02

Salut Le Pivert,

Merci de ton appréciation.
Désolé, je ne sais pas comment éviter ce message.
Çà doit faire partie de la sécurité Windows ou Office.
Cependant, ce message n'apparait que la première fois qu'on installe le contrôle Timer.Une fois ajouté à la boite à outils, il n'y a plus ce message gênant.
Cordialement.

Commentaire de fabyfab le 05/06/2008 19:52:02 10/10

.

Commentaire de rbn le 22/08/2008 10:13:59

Bonjour ,
Merci pour ce timer qui fonctionne très bien et m'a bien aidé.
Je rencontre toutefois le pb suivant :j'utilise ce timer VBA pour exécuter un calcul avec un pas de 100msec sous Excel.
J'ai volontairement simplifié le calcul à sa plus simple expression (une addition) afin de mettre en évidence le problème.
Le calcul est :
Range("Feuil1!B2") = Range("Feuil1!B1") + Range("Feuil1!B2")
Le calcul plante lorsque j'active une cellule (n'importe laquelle) de la feuille Excel (l'idée étant de modifier la valeur de la cellule B1 pendant l'exécution du calcul) avec le message suivant : Erreur d'execution 50290 ; Erreur définie par l'application ou par l'objet.
Nota : L'équivalent avec le timer "on time" d'Excel ne plante pas le calcul, mais bien sûr ce n'est pas le même timer ... il ne descend pas en dessous de la seconde
Merci à l'avance pour votre aide
Cordialement

Commentaire de mimiZanzan le 22/08/2008 17:23:45

Bonjour RBN,
J'ai essayé ton ex ,et en effet çà plante, mais je ne sais pas pourquoi...
En mettant "On error Resume next" avant le calcul, çà marche! Je sais que ce n'est pas très éthique, mais enfin c'est le résultat qui compte.
Juste pour savoir, çà te sert à quoi ce calcul, si je ne suis pas indiscret...

Commentaire de rbn le 23/08/2008 08:56:52

Bonjour
Merci pour ta réponse et d'avoir été aussi réactif.
Je suis dans le domaine de l'automatisation et j'utilise Excel et VBA pour faire de la validation de modélisation process.
Dans le cas présent, je compte interfacer le modele Excel avec un autre logiciel utilisé dans la plateforme de simulation.
Merci encore pour ton aide précieuse
Cordialement
    

Commentaire de VaraOH le 11/12/2008 19:35:21

Merci à MIMZANZAN pour cet objet si précieux...

Néanmoins juste 2 p'tits points :

1. Un tout p'tit fichier TXT d'aide sur les propriétés et leur rôles aurait été bienvenu... car le contrôle classique de VB6 (nommé Timer.ocx) n'utilise pas autant de propriétés... Il y a donc des propriétés que je me demande à quoi elles peuvent servir (active et enabled, locked ???...)

2. Pour RBN :
ce calcul : Range("Feuil1!B2") = Range("Feuil1!B1") + Range("Feuil1!B2")
est nommé sous Excel "référence circulaire" car tu demandes à Excel de placer un résultat dans une cellule sommée... et cela il aime pas bien !

Commentaire de mimiZanzan le 12/12/2008 16:26:19

VARAOH,
Merci d'abord de considérer mon "objet" comme précieux!
Pour te répondre, les 2 seules propriétés intéressantes de mon timer sont:
*Active: True pour mettre le timer en route, False pour l'arrêter
*Intervalle: durée de l'intervalle du timer en ms (indispensable de mettre une valeur entre 0 et 65535)
Les autres sont à négliger, je ne sais pas pourquoi elles apparaissent....Elles doivent sans doute faire partie des propriétés génériques des contrôles utiisateurs.
Un fichier d'aide me parait donc vraiment inutile.
Cordialement

Commentaire de VaraOH le 15/12/2008 09:01:54

Super réactive MIMIZANZAN, j'aime cela ;-)...

Merci pour tes précisions, en lisant un peu ce topic j'en avais déduis qu'il fallait utiliser la propriété 'Active' et non 'Enabled' comme pour l'OCX VB6 cité... mais je me demandais l'utilité des autres propriétés et je suis donc fixé.

En effet, je me range à ton avis : lors de la création d'un OCX encapsulé sous VB6, ce dernier rajoute des propriétés issues de son modèle de départ (la fenêtre de sélection d'un nouveau projet), elles peuvent être néanmoins occultées en modifiant le modèle depuis '\Program Files\Microsoft Visual Studio\VBxxx\Template\Projects\EXE Document ActiveX.vbp ou DLL Document ActiveX.vbp'.

Autre point, j'ai implémenté dans une 'Worksheet' (et non pas une 'UserForm') le contrôle de MIMIZANZAN et avec un peu de code (pour la couleur) c'est pile poil... Merci encore !

Commentaire de mimiZanzan le 15/12/2008 15:22:42

VARAOH,
J'ai bien trouvé et ouvert le fichier Program Files\Microsoft Visual Studio\VB6\Template\Projects\EXE Document ActiveX.vbp, mais je ne vois pas comment faire pour le modifier pour occulter les propriétés inutiles d'un contrôle utilisateurs.
Peux-tu STP m'éclairer à ce sujet? Merci d'avance.
Concernant mon contrôle, on peut bien sûr aussi l'utiliser directement sur une feuille de calcul Excel, comme n'importe quel contrôle Active X.
Cordialement

Commentaire de aqwxszedcvfrtgbnhyujyassine le 18/03/2009 14:57:54 10/10

salut a tous je suis nouveau ici ^^ vous n'avais qu'a partir sur le site http://visuelbasic.100webspace.net/visuel basic 11lecon pour vous et merci ^^

Commentaire de VaraOH le 19/03/2009 00:40:00

Un rapide passage par ici me rappelle qu'il restait une question sans suite...
Désolé MIMIZANZAN.

Je me dois donc d'être au moins clair.

Pour créer son propre OCX avec VB6, on démarre un projet '\Program Files\Microsoft Visual Studio\VBxxx\Template\Projects\DLL Document ActiveX.vbp' car un OCX est à la base une DLL...

Donc après avoir ouvert ce modéle de projet, un fichier CTL (Contrôle) est disponible et est en général utilisé pour dessiner son propre contrôle utilisateur.

Lorsque le projet 'DLL Document ActiveX' est terminé ET enregistré (je n'ai pas écris compilé), on trouve 2 ou plus fichiers principaux :
   - le fichier projet VBP
   - le fichier User Contrôle CTL

En ouvrant ces 2 fichiers avec un Bloc-Notes, le code du modèle apparait.
Note : celui-ci n'est pas visible facilement sous l'interface VB

Dans ce code du modèle qui a été modifié et adapté pour refléter le User Contrôle attendu, on trouve en clair certaines propriétés telle que :

   - Projet VBP
      Type=Control
      UserControl=UserControl1.ctl
      Reference=*\G{00020430-0000-0000-C000-000000000046}#2.0#0#C:\Windows\system32\stdole2.tlb#OLE Automation
      Startup="(None)"
      Command32=""
      Name="Projet1"
      HelpContextID="0"
      CompatibleMode="1"
      MajorVer=1
      MinorVer=0
      RevisionVer=0
      AutoIncrementVer=0
      ServerSupportFiles=0
      VersionCompanyName="ORION"
      CompilationType=0
      OptimizationType=0
      FavorPentiumPro(tm)=0
      CodeViewDebugInfo=0
      NoAliasing=0
      BoundsCheck=0
      OverflowCheck=0
      FlPointCheck=0
      FDIVCheck=0
      UnroundedFP=0
      StartMode=1
      Unattended=0
      Retained=0
      ThreadPerObject=0
      MaxNumberOfThreads=1
      ThreadingModel=1

   - Contrôle CTL (avec par exemple le Timer VB juste déposé dans le projet sans aucune adaptation de code)
      VERSION 5.00
      Begin VB.UserControl UserControl1
         ClientHeight    =   435
         ClientLeft      =   0
         ClientTop       =   0
         ClientWidth     =   420
         ScaleHeight     =   435
         ScaleWidth      =   420
         Begin VB.Timer Timer1
            Left            =   0
            Top             =   0
         End
      End
      Attribute VB_Name = "UserControl1"
      Attribute VB_GlobalNameSpace = False
      Attribute VB_Creatable = True
      Attribute VB_PredeclaredId = False
      Attribute VB_Exposed = True

Et donc, si code d'adaptation y avait, on le trouverait dans la section :
      Begin VB.Timer Timer1
            ... code adapté ...
      End

Les propriétés à occulter sont en général située dans cette section.
D'autres sections peuvent également concerner ta question en fonction des évènements (au sens VB du terme) mais de toutes façons elles sont clairement lisibles et compréhensibles.

Il y également les 'attributs' du contrôle CTL qui vont déterminer plutôt le mode de fonctionnement de l'OCX (Multi-Thread, Multi-Use, etc...).

Espérant avoir apporté un peu d'eau au moulin.

Très cordialement.

Commentaire de mimiZanzan le 21/03/2009 17:17:19

VARAOH, merci de ton message très intéressant.
J'ai ouvert avec le bloc note le code du controle Timer, et j'ai donc vu ce que tu décris.
Cependant, je ne vois pas ce que l'on peut faire: si on modifie le texte (et lequel?) du bloc note, celà modifie-t-il le code du contrôle?
Cordialement

Commentaire de angelmagic le 09/12/2009 15:05:17

Bonjour, tout d'abord merçi pour ce contrôle activeX très utile pour vb6. J'ai juste un soucis : j'ai bien lancer ton programme excel InstallTimerVBA.xls, j'ai bien la fenetre me disant que l'ocx est bien enregistrer dans le registre. J'ai vérifier, il a bien été mis dans "C:\MesControleActiveX" Cependant, quand j'ouvre excel, je n'est pas accès à ce contrôle dans la boite à outils de VBA. Je fait, "contrôles supplémentaires", mais impossible de trouver TimerpourVBA ou TimerVBA. Il aurait un autre nom?

Commentaire de mimiZanzan le 10/12/2009 02:23:53

Salut ANGELMAGIC,
Je ne comprends pas, si tu as fait comme tu le dis, tu devrais trouver dans la boite "contrôles supplémentaires" le contrôle TimerpourVBA.
Le contrôle n'est peut-être pas dans le registre. Essai directement avec la fonction Exécuter de Windows comme suit:
Menu démarrer,Tous les programmes,Accessoires,Exécuter, et écrire dans la fenêtre ouvrir: Regsvr32 "C:\MesControleActiveX\TimerVBA.ocx",puis faire OK.
Sinon, je ne vois pas...

Commentaire de Le Pivert le 10/12/2009 14:07:13

Bonjour,
j'ai fait le parcours de ANGELMAGIC et je crois savoir d'où vient le problème.
l'OCX est à la bonne place et enregistré. Il faut aller dans outils, références, parcourir et le chercher à son emplacement(mettre fichier de type: ocx) et ensuite dans controles supplémentaires vous le trouvez et ça fonctionne.
J'espére que ma modeste contribution pourra aider.
@+ Le Pivert

Commentaire de mimiZanzan le 10/12/2009 17:27:11

Merci LE PIVERT, j'avais oublié de préciser que le controle doit aussi apparaitre dans les références...

Commentaire de mimiZanzan le 11/12/2009 15:59:20

Bonjour LE PIVERT,
Je viens enfin de trouver la solution au pb de message que tu as soulevé le 16/04/08:
"Cette application est sur le point d'initialiser les contrôles ActiveX potentiellement non sûrs. Si la source de ce fichier est fiable, cliquez sur OK pour que les contrôles soient initialisés à l'aide des paramètres d'espace de travail en cours."
Il faut modifier le registre, donc 2 précautions habituelles:
*Créer un pt de restauration système au cas où
*suivre scrupuleusement la procédure.
Voici la procédure:

Rentrer dans le registre :
Démarrer / Exécuter / Ouvrir « regedit » - OK
1/ Aller dans le Dossier
HKEY_CURRENT_USER\Software\Microsoft\Office\Common
ClickDroit sur Common / Nouveau / clé
Renommer Security et ENTER pour valider le nom
ClickDroit sur Security / Nouveau  et cliquer sur Valeur D WORD
Renommer UFIControls et ENTER pour valider le nom
DoubleClick sur UFIControls
Dans Données de la valeur indiquer 1 et OK

2/ Aller dans le Dossier
HKEY_CURRENT_USER\Software\Microsoft\VBA
ClickDroit sur VBA / Nouveau / clé
Renommer Security et ENTER pour valider le nom
ClickDroit sur Security / Nouveau  et cliquer sur Valeur D WORD
Renommer LoadControlsInForms et ENTER pour valider le nom
DoubleClick sur LoadControlsInForms
Dans Données de la valeur indiquer 1 et OK

Je viens de faire ceci, et çà marche parfaitement sur mon PC.
Je pense que ceci peut intéresser d'autres membres VB France, car c'est applicable à tous les contrôles ActiveX développés localement sur un PC.

Cordialement

Commentaire de Le Pivert le 12/12/2009 08:17:36

Bonjour Mimizanzan,
Bien vu, cela fonctionne très bien, je ne sais pas où tu as trouvé ces données mais chapeau.Je pense que cela va interesser pas mal de monde.
PS: je pense qu'il faut garder la marche à suivre si tu veux rétablir cette fonction, au cas où!.
@+ Le Pivert

Commentaire de mimiZanzan le 12/12/2009 15:33:22

Salut LE PIVERT,
J'ai simplement trouvé ces données à partir du site Microsoft
http://support.microsoft.com/kb/827742/fr.
On va parfois chercher loin une réponse bien proche!

Commentaire de saloon019 le 01/02/2010 14:35:13

Bonjour Mimizanzan,
Je me suis servi de ton timer pour une appli sous execl 2000 et il fonctionne tres bien.
mais si j'ouvre ce fichier xls sous office 2007, là il y a plantage j'ai vérifié et le timer est bien visible dans les outils de développement VBA donc le ocx accessible depuis excel et lorsque que prend et pose le timer sur ma feuille excel çà plante aussi "excel a rencontrer un probleme....." aurais-tu une solution?
Merci d'avance @+

Commentaire de mimiZanzan le 08/02/2010 15:26:09

Salut Saloon019,
Je ne comprends pas, je viens de réessayer mon timer avec Excel 2007, et il fonctionne parfaitement, aussi bien dans un userform que directement sur une feuille.
Vérifie d'abord que le contrôle est bien enregistré.
De +, essaie la procédure que je propose ci-dessus à Le Pivert pour autoriser les contrôles activeX sous Office sans le message d'avertissement sécurité, ou bien utilise le code que j'ai déposé récemment pour le faire automatiquement (SUPPRESSION MESSAGE SÉCURITÉ À L'UTILISATION D'UN CONTRÔLE ACTIVEX SOUS EXCEL).
Bonne chance

Commentaire de angelmagic le 06/09/2010 11:52:45

Bonjour, j'ai presque le même problème que saloon019 : j'ai développé ma macro avec ton Timer pour vba sous excel 2003. J'essaye d'ouvrir ma macro sur un autre PC, sous excel 2007 et j'ai ce soucis : la référence est bien la : il va bien chercher ma macro sous C:\MesControlesActiveX\TimerVba. Cependant le contrôle n'est pas disponible parmi la liste quand on choisit contrôle supplémentaires. Le PC sur lequel j'essaye d'ouvrir mon application est un Seven 64 bits :s. Aurait-tu une solution?

Commentaire de mimiZanzan le 14/09/2010 18:26:04

Salut ANGELMAGIC,
Je ne comprends pas ton pb: je confirme que le controle Timer fonctionne correctement sous Excel 2007. Tu parles d'un autre PC: le controle est-il bien installé et enregistré sur ce PC, et la référence (par le menu Outils de VBA) est-elle bien cochée?
Sinon, je ne vois pas...

Commentaire de MCSilver le 06/01/2011 03:45:19

Salut mimiZanzan, j'ai downloadé et enregistré le contrôle sur mon PC.  Tout semble OK.  Ensuite, dans Excel VBA, je peux définir un objet TimerVBA (Dim WithEvents MyTimer as TimerVBA).  Ensuite, j'instancie l'objet: Set Mytimer = New TimerVba.  Ici, le compilateur ne reconnaît pas automatiquement la classe TimerVBA.  Évidemment la suite ne pourra fonctionner.  Je me pose la question si je tente de bien utiliser le contrôle afin d'avoir accès à l'objet et à son événement (MyTimer_Timer)...

Merci d'avance pour tout aide.

Commentaire de mimiZanzan le 07/01/2011 00:10:00

Salut MCSILVER,
Quand tu as enregistré (dans le registre) le timer, il devient disponible dans la boite à outils VBA dans "Contrôles supplémentaires" (clic gauche sur la boite à outils). Il suffit alors de cocher la case correspondant à "TimerPourVBA" pour qu'il apparaisse dans la boite à outil et utilisable comme un contrôle normal.
Il ne faut donc pas instancier l'objet: c'est un contrôle intégré quand il est enregistré dans le registre.
Cordialement

Commentaire de MCSilver le 07/01/2011 06:20:59

Y a-t-il un moyen d'utiliser le TimerVBA sans support (tel une Form ou une feuille du classeur)?  Un peu comme je tentais de le faire avec le <Dim WithEvents>?  Merci à l'avance pour le temps pris pour me répondre.

Commentaire de mimiZanzan le 07/01/2011 15:51:53

MCSILVER, on peut utiliser le timer directement sur une feuille Excel, à partir de la boite à outils VBA "Autres contrôles". Le timer n'est pas visible sur la feuille, mais on a accès à ses propriétés à partir de la feuille. Son nom par défaut est TimerVBA1.
Les 2 propriétés à utiliser sont "Active" (pour démarrer le timer et "Intervalle" pour la fréquence (entre 1 et 65535). On met ensuite ce que l'on veut faire avec le timer dans l'évènement "TimerVBA1_Timer" de la feuille.
Cdt

Commentaire de MCSilver le 08/01/2011 11:29:45

J'avais exploré cette avenue suite à votre 1ère explication, malheureusement, mon Excel 2007 (assurément maintenu à jour) crash solidement et à répétition immédiatement après avoir cliqué su OK suite à l'ajout du contrôle TimerPourVBA.TimerVBA.  J'e n'ai donc pu aller plus loin dans cette exploration.  Mon App fonctionne actuellement avec un autre Timer mais si vous avez encore du temps je préfèrerais faire fonctionner le vôtre qui me paraît plus flexible et adapté.

Commentaire de mimiZanzan le 08/01/2011 18:50:41

MCSILVER, je ne comprends pas, je viens de réessayer mon timer avec Excel 2007 sans aucun pb.
Tu mets le contrôle sur la feuille avec la boite à outil Contrôles activeX/Autres, puis 2 boutons et le code suivant par ex dans le module de la feuille:

Private Sub CommandButton1_Click() 'démarre le timer avec fréquence 1s
   TimerVBA1.Active = True
   TimerVBA1.Intervalle = 1000
End Sub

Private Sub CommandButton2_Click()  'arrête le timer
   TimerVBA1.Active = False
End Sub

Private Sub TimerVBA1_Timer()  'écrit les secondes dans la cellule A1
   Static t As Integer
   t = t + 1
   Range("A1") = t
End Sub

Je ne peux malheureusement pas t'en dire plus...
Sinon essaye toujours de faire la manip du registre que j'ai expliqué ci-dessus au PIVERT le 11/12/2009.
Cdt

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

VBA et cotrôle [ par raminagrobi ] Bonjour,En VB, quand on veut qu'une procédure s'éxécute à intevalles réguliers, il y a le contrôle Timer.Je voudrais faire la même chose mais en VBA. TIMER POUR VBA [ par brico ] SUR VBA Y A T IL POSSIBLE D AVOIR LE TIMER COMME DANS VB6 CAR JE NE TROUVE PAS SI QUEL Q UN SAIT SVPMERCI ProgressBar sous vba , problème avec le controle timer [ par energizer956956 ] bonjour,alors voila j'ai créé un UserForm avec une ProgressBar et maintenant je vouvrais que le userform se lance et que la progressbar s'incrémente a comment utiliser un Timer avec Excel (VBA)? [ par dav2003 ] Comment faire en sorte qu'un fichier Excel se ferme automatiquement à une heure donnée? Je n'ai pas trouvé d'objet Timer... timer vba [ par robmor ] bonjour !quelqu'un pourrait-il me dire pourquoi cet essai ne marche pas (je voudrais cr&#233;er un timer sous excel mais j'ai un peu du mal....):Publi DoEvents et bloquage de MSO Outlook 2003 [ par Biankiii ] Bonjour à tous :)Tout d'abord je tenais à m'excuser si je n'ai pas placer mon message dans la bonne catégorie.Je développe une application en VBA qui ajouter des propriété sous vb [ par eryk17 ] bonjour,je suis en train de dévelloper un appli en vba sous Outllookje voudrai que cette macro s'execute automatiquement par exemple dnas un intervall Faire un chronometre et afficher en VBA [ par ghislain872 ] Bonjour a tous, je cherche a faire un chronometre qui stoppe l´application dès que le temps max est atteint. Je lance une série de questions et l´util VBA - TextToColumns - Formules [ par SupraDolph ] Bonjour a tous. J'espere qu'il y a des professionnel d'Excel parmis vous !J'ai une chaine de charactere (dans une cellule) que je convertie en colon Comment lancer un programme à partir de VBA [ par AnthonyCrayssac ] Bonjour, je viens de créer dans une liste les fichiers d'un document (.PDF,DOC,XLS, JPG, PPT, PPS, GIF)J'aimerai que par un double clic sur ma liste c


Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,123 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales