Temporisation avec une variable

Bonjour a tous, forum bonjour

Je souhaiterai utiliser une variable (Tpo) si possible avec le code ci-dessous mais ca fonctionne pas

J'ai fait ceci mais c'est pas bon, comment faire svp ???

'*** Mis 8 pour 8 Secondes mais ça pourrait être autre.

Dim Tpo 
Tpo = 8   : Call Temporisation
Public Sub Temporisation()
       Application.Wait (Now + TimeValue("Tpo"))
End Sub

 'Application.Wait (Now + TimeValue("0:00:05"))

Merci a tous pour votre aide et bon dimanche

Cdlt ray

Bonjour,

Sub Temporisation()
    Dim Tpo
    Tpo = Now + TimeValue("00:00:08")
    Application.Wait Tpo
End Sub

Coridalement


Pour une temporisation variable :

Sub Temporisation(s As Integer)
    Dim Tpo
    Tpo = Now + TimeSerial(0, 0, s)
    Application.Wait Tpo
End Sub

Sub Test()
    Temporisation 8
End Sub

Là tu lances Temporisation avec un nombre de secondes choisi par toi...

Salut MFerrand,

Merci pour cette réponse rapide

Bon ca fonctionne bien pour la "temporisation variable" merci, comme ça je peux mettre la tempo voulue.

Mais j'ai deux questions svp

(1) Quand je fais :

Call Temporisation 8

J'ai une erreur (attendu fin d'instruction) je dit ça, car j'ai toujours appeler les sub par un Call

(2) Dim Tpo ça suffit ???

'### TEMPORISATION
Sub Temporisation(s As Integer)
    Dim Tpo
    Tpo = Now + TimeSerial(0, 0, s)
    Application.Wait Tpo
End Sub

Merci a toi et bon dimanche

Cdlt Ray

Bonjour,

Call est une instruction d'appel d'une procédure, peu utile dans la mesure où une procédure peut être appelée simplement par son nom, sans autre fioriture...

Cependant, si on l'utilise, il faut savoir que Call exige que les arguments de la procédure, lorsqu'il y en a, soient mis entre parenthèses [à l'instar d'une procédure Function].

Ainsi :

Temporisation 8 est correct

Call Temporisation(8) est correct

mais Call Temporisation 8 déclenchera une erreur...

Pour Tpo, que veux-tu dire en demandant si Dim Tpo ça suffit ?

Cela suffit bien sûr pour déclarer une variable de type Variant !

Note que tu ne l'avais pas typée, et que je ne l'ai pas fait non plus !!

Il est toujours bien sûr conseillé de typer ses variables (pour un accès plus rapide et une meilleure tenue du code...), cependant il peut être judicieux d'y déroger afin de dérigidifier le code, conserver plus de souplesse et éviter ainsi quelques erreurs... C'est pourquoi ayant eu maille à partir avec quelques cas de l'espèce je type rarement des variables en type Date, surtout s'il s'agit de données temps, ainsi, une affectation de valeur, qui testée avec IsDate renverrait False, et qui déclencherait une incompatibilité de type avec une variable typée Date, passera avec une variable non typée...

Cordialement.

Re MFerrant

Merci pour tes réponses.

Pour Tpo, que veux-tu dire en demandant si Dim Tpo ça suffit ?

Juste pour savoir afin que la variable soit déclarer correctement ne sachant pas trop, donc je n'ai rien mis ce pourquoi cette question.

Pour

 Call 

je ne savais pas, ta réponse enrichit mon savoir.

J'ai oublier, j'ai mis la sub dans module déclarer Public et je ne la vois pas dans l'onglet "Macro" du ruban ???

Je te remercie encore une fois, en te souhaitant un très bonne après midi.

Bien cordialement Raymond

Re,

Sur Tpo, je ne savais pourquoi tu te posais la question, mais j'ai sans le savoir répondu à tes préoccupations... Ce type de données n'ayant pas toujours des effets parfaitement prévisibles, ne pas typer une variable dans ce cas peut éviter de se faire à soi-même un croc en jambe, si je puis dire...

Note aussi dans un coin de mémoire (cela pourra servir) que ce type de valeurs pour lequel Excel affiche généralement une chaîne mais la stocke comme valeur numérique, tu disposes d'une propriété de l'objet Range, Value2 qui permet de la prélever en quelque sorte dépourvue de ses attributs Date, donc sous forme de nombre, ce qui peut éviter des problèmes courants avec les dates... [Value2 est équivalent à Value, mais écarte les caractéristiques de format Date et format Monétaire..., on est donc sûr dans ces cas d'avoir un nombre].

Dès qu'une procédure dispose d'un argument, elle n'apparaît plus dans la boîte de dialogue Macro, donc normal que tu ne la voies plus... C'est d'ailleurs un truc que j'utilise lorsqu'une macro doit être lancée par un bouton et que cela provoquerait une erreur si elle était lancée directement sans utiliser le bouton : une fois affectée au bouton, je la dote d'un argument optionnel dont le seul rôle est de la faire disparaître de façon qu'elle ne puisse plus être lancée que par le bouton...

Par ailleurs, inutile de déclarer une Sub ou Function avec Public, elles sont publiques par défaut, même dans un module privé. Il n'y a donc lieu d'utiliser que Private, si on ne veut pas qu'elles soient accessibles d'un autre module (NB- Pour les procédures d'évènements, toujours déclarées automatiquement avec Private, là le Private n'est pas un choix, elles ne peuvent fonctionner que dans leur module et sont privées par définition, le fait d'enlever le Private ou de mettre Public n'y changerait rien...)

Pour les variables, c'est l'inverse, elles sont privées par défaut, d'où pour qu'elles soient accessibles d'un autre module, il faut les déclarer Public...

Cordialement.

Salut MFerrant

Merci beaucoup

ça c'est de la réponse ou je ne m'y connait pas, en tout cas me voila enrichit de nouvelles informations.

C'est bien gentil a toi de partager ton savoir qui de plus nourrie de discutions bien enrichissantes a lire.

L'essentiel aussi, c'est que cela fonctionne bien et comme je le souhaitai.

Je te remercie encore une fois, en te souhaitant une très bonne fin d'après midi.

Je clos le sujet

Bien cordialement Raymond

Rechercher des sujets similaires à "temporisation variable"