Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Tester une valeur numérique sous VBA

12 réponses
Avatar
Calou
Bonjour les amis,

Un petit probl=E8me =E0 vous soumettre :
Sous VBA, j'ai une boucle qui me calcule des dur=E9es en fonction
d'heure de d=E9part et de fin (saisie au format hh:mm). Par contre des
fois dans la saisie, je retrouve des choses du genre 12h34.

Comment additionner que les valeurs num=E9riques et indiquer en anomalie
les valeurs non num=E9riques.

Un grand merci de votre aide.

Bonne fin de journ=E9e.

Philippe

2 réponses

1 2
Avatar
michdenis
Dans ta boucle pour tester si la valeur saisie représente une heure,
insère dans ta boucle, un truc comme ceci en prenant soin de
définir le type de la variable X

Attention, le code qui suit s'assure que la saisie en Range("A1")
correspond à une heure comme par exemple : 9:51 mais ne
vérifie pas le format de la cellule qui lui pourrait être en "Texte"
Pour vérifier si le format de la cellule est "Texte", tu pourrais ajouter
ces lignes si nécessaire :

If Range("A1").NumberFormat = "@" Then
MsgBox "Format Texte"
End If

'-----------------------------
Sub test1()

Dim X As Date
On Error Resume Next

X = TimeValue(Range("A1").Text)
If Err <> 0 Then
Err = 0
MsgBox "la valeur n'est pas reconnu comme une heure."
End If
'Si pas de message, c'est une heure et le contenu est dans la variable X

End Sub
'-----------------------------

--
MichD
--------------------------------------------


"Calou" a écrit dans le message de groupe de discussion :

On 30 août, 14:10, "michdenis" wrote:
Si tu t'expliquais sur ce que tu veux dire par :

"quand les heures saisies ne sont pas numériques"

Qu'est-ce qu'il y a dans la cellule? Son format ?

--
MichD
--------------------------------------------

"Calou" a écrit dans le message de groupe de discussion :

On 29 août, 23:08, "michdenis" wrote:





> Bonjour,

> En supposant que tu as 05:45 comme heure dans une cellule.
> pour récupérer cette heure en vba, tu peux utiliser ceci :

> Dim X As Date
> X = TimeValue(Range("B1").Text)

> X va indiquer : 05:45:00

> --
> MichD
> --------------------------------------------

> "Calou" a écrit dans le message de groupe de discussion :
>
> On 27 juil, 09:37, Calou wrote:

> > On 26 juil, 21:34, isabelle wrote:

> > > bonjour Philippe,

> > > copie cette macro sur la page code de la feuille,
> > > je l'ai adapté pour une saisie des heures en colonne A il faudra modifier au besoin.

> > > Private Sub Worksheet_Change(ByVal Target As Range)
> > > Application.EnableEvents = False
> > > Set ici = Application.Intersect(Target, Range("A:A")) ' à adapter
> > > If Not ici Is Nothing Then
> > > If Not IsNumeric(Target) Then
> > > MsgBox "vous devez saisir l'heure sous la forme hh:mm"
> > > Target.Clear
> > > Application.EnableEvents = True
> > > Exit Sub
> > > End If
> > > End If
> > > End Sub

> > > isabelle

> > > Le 2010-07-26 14:31,Caloua écrit :

> > > > On 26 juil, 17:09, isabelle wrote:
> > > >> et pour modifier cette donnée texte en donnée heure minute,

> > > >> x = Split(Range("A1"), "h")
> > > >> h = TimeSerial(x(0), x(1), 0)

> > > >> isabelle

> > > >> Le 2010-07-26 10:58, isabelle a écrit :

> > > >>> bonjour Philippe,

> > > >>> pour vérifier si la valeur est numérique,

> > > >>> If IsNumeric(Range("A1")) Then

> > > >>> isabelle

> > > >>> Le 2010-07-26 09:24,Caloua écrit :
> > > >>>> Bonjour les amis,

> > > >>>> Un petit problème à vous soumettre :
> > > >>>> Sous VBA, j'ai une boucle qui me calcule des durées en fonction
> > > >>>> d'heure de départ et de fin (saisie au format hh:mm). Par contre des
> > > >>>> fois dans la saisie, je retrouve des choses du genre 12h34.

> > > >>>> Comment additionner que les valeurs numériques et indiquer en anomalie
> > > >>>> les valeurs non numériques.

> > > >>>> Un grand merci de votre aide.

> > > >>>> Bonne fin de journée.

> > > >>>> Philippe

> > > > Bonjour !

> > > > Un grand merci pour cette information !
> > > > Il y a t il un moyen de controler que la saisie est bien sous la forme
> > > > xx:xx ?
> > > > Un grand merci par avance !
> > > > Philippe- Masquer le texte des messages précédents -

> > > - Afficher le texte des messages précédents -

> > Bonjour Isabelle !
> > Un grand merci à toi pour cette solution.
> > Je teste tout ca !
> > Bonne journée
> > Philippe

> Bonjour !
> je me tourne vers vous parce que je n'arrive pas a tester la
> numericité de l'heure de début et de fin
> vioci mon code :

> Ligne = 11
> Phrase = ""
> CompteurHeures = 0
> While Cells(Ligne, 1)
> HeureDébut = Cells(Ligne, 3)
> HeureFin = Cells(Ligne, 4)
> If HeureFin = 0 Then HeureFin = 1
> If IsNumeric(HeureDébut) Then
> Phrase = Phrase & Cells(Ligne, 1) & " : L'Heure de Début n'est pas
> numérique ! " & Chr(13)
> End If
> If IsNumeric(HeureFin) Then
> Phrase = Phrase & Cells(Ligne, 1) & " : L'Heure de Fin n'est pas
> numérique ! " & Chr(13)
> End If
> If HeureDébut < HeureFin Then CompteurHeures = CompteurHeures +
> HeureFin - HeureDébut
> JourSemaine = Cells(Ligne, 12)
> If HeureDébut < DixSeptHeuresTrente And HeureDébut > SeptHeures And
> JourSemaine <> 1 Then
> HeureDeb = Format(HeureDébut, "hh:mm")
> ...

> Un grand merci par avance de votre aide.
> Cordialement- Masquer le texte des messages précédents -

> - Afficher le texte des messages précédents -

Bonjour Michdenis,

Merci de ton aide !
Je me suis certainement mal exprimé mais mon projet gère les heures
sous VBA (Avec l'aide du forum bien sur !).
Pour le moment, quand les heures saisies ne sont pas numériques, ma
macro plante.
c'est pour cela que je voulais identifier les heures saisies non
numériques
N'hesites pas a me dire si je ne suis toujours pas clair.
Bonne journée !
Cordialement.
Philippe- Masquer le texte des messages précédents -

- Afficher le texte des messages précédents -



Bonjour Michdenis,
Merci de ta patience ! Decidemment, j'ai des soucis de comprehension :
J'ai un tableau où l'on saisie des heures. Ensuite une macro prend en
charge cette saisie et effectue certains traitements. Avant ce
traitement j'ai une moulinette qui gere les anomalies. Du genre tester
si les heures saisies etaient bien numériques ! si tel n'est pas le
cas ! je voudrais l'indiquer dans une msgbox !

d'ou ce code avec les lignes precedees une étoile :
Ligne = 11
Phrase = ""
CompteurHeures = 0
While Cells(Ligne, 1)
HeureDébut = Cells(Ligne, 3)
HeureFin = Cells(Ligne, 4)
If HeureFin = 0 Then HeureFin = 1
*If IsNumeric(HeureDébut) Then
* Phrase = Phrase & Cells(Ligne, 1) & " : L'Heure de Début n'est
pas numérique ! " & Chr(13)
*End If
*If IsNumeric(HeureFin) Then
* Phrase = Phrase & Cells(Ligne, 1) & " : L'Heure de Fin n'est pas
numérique ! " & Chr(13)
*End If
If HeureDébut < HeureFin Then CompteurHeures = CompteurHeures +
HeureFin - HeureDébut
JourSemaine = Cells(Ligne, 12)
If HeureDébut < DixSeptHeuresTrente And HeureDébut > SeptHeures And
JourSemaine <> 1 Then
HeureDeb = Format(HeureDébut, "hh:mm")
HeureFi = Format(HeureFin, "hh:mm")
Phrase = Phrase & Cells(Ligne, 1) & " de " & HeureDeb & " à " &
HeureFi & " : Heure de Début antérieure à 17h30 " & Chr(13)
End If
If HeureFin < HeureDébut Then
HeureDeb = Format(HeureDébut, "hh:mm")
HeureFi = Format(HeureFin, "hh:mm")
Phrase = Phrase & Cells(Ligne, 1) & " de " & HeureDeb & " à " &
HeureFi & " : Heure de Fin antérieure à l'Heure de Début " & Chr(13)
End If
Ligne = Ligne + 1
Wend
If CompteurHeures > 25 / 24 Then
DiffHeures = Format(CompteurHeures - (25 / 24), "hh:mm")
Phrase = Phrase & Chr(13) & "Dépassement du plafond de 25 heures
pour " & DiffHeures & " Heures ! "
End If
If Phrase <> "" Then MsgBox Phrase, vbInformation, "Information"
End Sub

En esperant avoir été plus clair dans mes explicatiions.

Je te souhaite une bonne journée !

Philippe
Avatar
Calou
Bonjour Michdenis,

Un grand merci pour ton travail et ta patience !
Cela marche exactement que je le souhaitais même si j'ai encore un peu
de travail sous VBA pour passer dans tous les cas de figure !

Je te souhaite une excellente journée.

Cordialement,

Philippe
1 2