Récupérer heure dans une chaine de caractère d'une variable

Bonjour,

Voici mon pb que je ne sais pas résoudre.

J'ai une variable contenant un phrase, par ex :

Phrase1 = "Toto a rdv à 16h40 au médecin"
OU
Phrase1 "Toto a rdv à 16h avec son accompagnateur"

Je voudrais récupérer "16h40" de la variable Phrase1 OU "16h" de la variable Phrase2.

Pourriez vous m'aider à résoudre ce problème svp?

Je vous remercie de votre aide

Cordialement

Hello,

C'est quoi une variable pour toi ? Cellule Excel ou variable VBA ?

Variable vba

Bonjour,

Je laisse Rag gérer le souci des heures.

Si tu veux, on peut essayer de régler l'autre problème. Toto ne peut pas aller "au" médecin !

Ok. Merci 😉

Hello tout le monde,

Voici ce que je propose :

Sub testing()

Dim x As String, i As Byte
Dim Phrase1 As String, Phrase2 As String, Resultat As String

Phrase1 = "Toto a rdv à 16h40 au médecin"
Phrase2 = "Toto a rdv à 16h avec son accompagnateur"
Phrase3 = "18h59, Toto a rdv  avec son accompagnateur"

For i = 1 To Len(Phrase3)
    If IsNumeric(Mid(Phrase3, i, 1)) Then x = x & Mid(Phrase3, i, 1)
Next i

Select Case Len(x)
    Case Is = 4
        Resultat = Left(x, 2) & "H" & Right(x, 2)
    Case Is = 3
        Resultat = Left(x, 1) & "H" & Right(x, 2)
    Case Is = 2
        Resultat = x & "H"
End Select

End Sub

Bonsoir Sylvainpyc, JoyeuxNoel, Rag02700,

Par VBA, le résultat sera dans le HH final.

Quelque soit la longueur de la phrase et l'emplacement de l'horaire.

Sub RecupHor()
Dim H%, HH, Mn As String
Dim Phrase(4) 'Augmenter la valeur si plus de phrases

Phrase(1) = "Toto a rdv à 16h40 au médecin"
Phrase(2) = "Tata a rdv à 16h avec son marchand de tutu"
Phrase(3) = "12h35, Titi a rdv avec Gros Minet"
For i = 1 To 3
Phrase(i) = Replace(Phrase(i), " ", "00", 1): H = InStr(1, Phrase(i), "h") - 1
If IsNumeric(H) Then HH = Replace(Trim(Mid(" " & Phrase(i), H, 5)), "h", ":"): Mn = Right(HH, 2)
HH = Left(CStr(TimeValue(HH)), 5 + (Mn = "00") * 2)
HH = Replace(HH, ":", "h")
Next i
End Sub

Merci

Les 2 réponses fonctionnent à merveille

Merci beaucoup

Encore besoin de votre aide svp

J'ai une erreur si il n'y a pas d'heure dans la phrase
Ou si c'est écrit par exemple dans la phrase "h1" : "Toto a rdv à h1 au médecin" => le résultat est 0h10
Ou si c'est écrit par exemple dans la phrase "h" : "Toto a rdv à h au médecin" => le résultat est 0h

Est il possible svp de remédier à ces situations ?

Je vous remercie

Encore besoin de votre aide svp

J'ai une erreur si il n'y a pas d'heure dans la phrase. Ex "Toto a rdv avec rh au médecin"
Ou si c'est écrit par exemple dans la phrase "h1" : "Toto a rdv à h1 au médecin" => le résultat est 0h10
Ou si c'est écrit par exemple dans la phrase "h" : "Toto a rdv à h au médecin" => le résultat est 0h

Est il possible svp de remédier à ces situations ?

Je vous remercie

J'ai essayé

Sub Feuil5_Rectangleàcoinsarrondis1_Cliquer()
Dim H%, HH, Mn As String
Dim s As Integer

Phrase = Range("a2").Value
Phrase = Replace(Phrase, " ", "00", 1): H = InStr(1, Phrase, "h") - 1
If H = -1 Then Exit Sub
If IsNumeric(H) Then HH = Replace(Trim(Mid(" " & Phrase, H, 5)), "h", ":"): Mn = Right(HH, 2)
If HH = "0r:00" Or HH = "0r:" Then Exit Sub
HH = Left(CStr(TimeValue(HH)), 5 + (Mn = "00") * 2)
HH = Replace(HH, ":", "h")
If Left(HH, 1) = 0 Then
HH = Right(HH, Len(HH) - 1)
End If
MsgBox Phrase & " => " & HH
End Sub

je croyais avoir réglé le pb
ca règle le pb de "Toto a rdv au médecin" et "Toto a rdv au rh" et "Toto a rdv au rh au medecin"

mais pas avec par exemple "Toto a rdv avec thorgal"

Je n'arrive pas trouver la solution.

Je vous remercie de votre aide

Cordialement

J'ai créé un code qui fonctionne

Le voici

    For Index = 1 To Len(Range("b7"))
        char = UCase(Range("b7").Characters(Index, 1).Text)
        If char = "H" Then
            If IsNumeric(Range("b7").Characters(Index - 1, 1).Text) And IsNumeric(Range("b7").Characters(Index - 2, 1).Text) And IsNumeric(Range("b7").Characters(Index + 1, 1).Text) And IsNumeric(Range("b7").Characters(Index + 2, 1).Text) Then
                MsgBox Range("b7").Characters(Index - 2, 1).Text & Range("b7").Characters(Index - 1, 1).Text & char & Range("b7").Characters(Index + 1, 1).Text & Range("b7").Characters(Index + 2, 1).Text
            ElseIf IsNumeric(Range("b7").Characters(Index - 1, 1).Text) And IsNumeric(Range("b7").Characters(Index - 2, 1).Text) Then
                MsgBox Range("b7").Characters(Index - 2, 1).Text & Range("b7").Characters(Index - 1, 1).Text & char
            ElseIf IsNumeric(Range("b7").Characters(Index - 1, 1).Text) Then
                MsgBox Range("b7").Characters(Index - 1, 1).Text & char
            End If
        End If
    Next Index

Je vous remercie

Cordialement

Bonjour Sylvainpyc, le Forum,

D'abord regarde bien le titre de ton sujet. C'est Récupérer l'heure....

Soit ta phrase comporte une heure correctement orthographiée. Soit ce n'est pas un format utilisée pour l'heure.

"Toto a rdv à h1 au médecin" => le résultat est 0h10

Aucun médecin (ni un membre de son secrétariat) n'écrira rdv à h1. Soit ce sera rdv à 0h10 ou rdv à 0h01.

Ou alors c'est un interne (à cette heure là) en 1ière année de médecine et il va redoubler. Car quel patient comprendrait rdv à h1.

Si tu utilises h pour désigner l'heure c'est qu'il existe au minimum un chiffre avant. Sinon on prends les mn (minutes).

Ensuite ton titre supposait qu'il y avait toujours une heure dans ta variable.

Donc j'ai omis la gestion d'erreur de ce fait.

Maintenant tu peux l'ajouter juste avant If IsNumeric

On Error GoTo Suite
If IsNumeric(H) Then HH = Replace(Trim(Mid(" " & Phrase(i), H, 5)), "h", ":"): Mn = Right(HH, 2)
HH = Left(CStr(TimeValue(HH)), 5 + (Mn = "00") * 2)
HH = Replace(HH, ":", "h")
Suite:
Next i

Par contre que feras tu dans le cas ou

"Toto a rdv avec rh dès 15h45 avec son dentiste"

Tu vas t'en mordre les doigts

Bonjour à tous,

Bon juste pour l'exercice où je me suis arraché pas mal de cheveux, en reprenant les modèles déjà bâti :

Sub HEURE()
Dim P(2)
Dim i%, A$, B$, C$, D$, E$
P(0) = "Toto a rdv à h1 au médecin"
P(1) = "Toto a rdv à h au médecin"
P(2) = "Thoto a rdv à 18h59 au médecin"
For i = 0 To UBound(P)
    A = Split(P(i), " ")
    For B = 0 To UBound(A)
        If A(B) Like "*h#*" Or A(B) Like "*#h*" Or A(B) Like "*#h#*" Or A(B) Like "h" Then
            C = Left(Left(A(B), InStr(1, A(B), "h") - 1) & "00", 2)
            D = Left(Mid(A(B), InStr(1, A(B), "h") + 1, Len(A(B))) & "00", 2)
            E = C & "H" & D
            MsgBox E
        End If
    Next B
Next i
End Sub

J'espère avoir couvert tous les cas.

Cdlt,

Bonjour Ergotamine,

Tu n'as pas oublié un Dim ou tu est mal réveillé

Cela bug avec Ubound(A).

Bonjour,

Merci pour la remarque, réveillé mais le désavantage de travailler sans Option Explicit et de déclarer les variables ultérieurement sans réessayer ...

Le code corrigé qui fonctionne (testé chez moi en tout cas) :

Sub HEURE()
Dim P(2)
Dim i%, B%, C$, D$, E$
Dim A As Variant
P(0) = "Toto a rdv à h1 au médecin"
P(1) = "Toto a rdv à h au médecin"
P(2) = "Thoto a rdv à 18h59 au médecin"
For i = 0 To UBound(P)
    A = Split(P(i), " ")
    For B = 0 To UBound(A)
        If A(B) Like "*h#*" Or A(B) Like "*#h*" Or A(B) Like "*#h#*" Or A(B) Like "h" Then
            C = Left(Left(A(B), InStr(1, A(B), "h") - 1) & "00", 2)
            D = Left(Mid(A(B), InStr(1, A(B), "h") + 1, Len(A(B))) & "00", 2)
            E = C & "H" & D
            MsgBox E
        End If
    Next B
Next i
End Sub

Cdlt,

Merci beaucoup pour toutes vos réponses.

Mon pb est résolu.

Merci beaucoup

Rechercher des sujets similaires à "recuperer heure chaine caractere variable"