extraction d'une chaine de caractères

zbee

XLDnaute Nouveau
Bonsoir,

Je souhaiterais en code VBA extraire la date et l'heure (dans l'es ci-dessous: 01/09/11 09:45:57) dans la chaine de caractères suivante:
Cette chaine de caractères se trouve dans un tableau avec entêtes à la colonne G (donc G2) et se trouve sur plusieurs lignes.

{, "Related Incident IN09-22228 closed.", "01/01/11 09:45:57 (LE BART, Olivier):", "J'ai appelé Mr HAZIBAR qui m'a confirmé la résoltion et l'origine de l'incident.", "Il y a eu un défaut de synchronisation entre l'entrée et la sortie du serveur qui gère l'application centralisant les mails des boites 3634 des plateaux babévente.", , "*** *** Resolution updated by IN09-22228 Related records exist, call not closed"}

Je souhaiterais utiliser la fonction mid
Le code ci-dessous ne marche pas, pourquoi?

Sub extraction()

Dim i As Integer

Range("G1").Select
ActiveCell.Offset(1, 0).Select

derligne = Range("G65000").End(xlUp).Row 'Pour éviter de boucler sur 65536 lignes
i = 7
For i = 2 To derligne
maValeur = Mid(Range("G" & i).Value, 1, 44)

Next i

End Sub


Merci
 

Softmama

XLDnaute Accro
Re : extraction d'une chaine de caractères

Bonjour zbee,

tu peux tester ainsi :
VB:
Sub test()
Set c = Range("G2")
Do While Not (c Like "*##/##/## ##:##:##*")
  Set c = c.Offset(1)
  If c = "" Then Exit Sub
Loop
MsgBox Mid(c, InStr(c, "/") - 2, InStr(c, ":") - InStr(c, "/") + 8)
End Sub
 

Softmama

XLDnaute Accro
Re : extraction d'une chaine de caractères

re,

pour les explications :

VB:
Sub test()
Set c = Range("G2") 'affecte à la variable c la plage G2
Do While Not (c Like "*##/##/## ##:##:##*") 'On cherche le format Date Heure (Nombres séparés par des / et des :
  Set c = c.Offset(1) 'Si pas trouvé on regarde la cellule du dessous
  If c = "" Then Exit Sub 'si la cellule est vide on quitte la macro (fin de tableau)
Loop 'Boucle
'On a trouvé la cellule qui contient le texte recherché et on peut l'afficher :
MsgBox Mid(c, InStr(c, "/") - 2, InStr(c, ":") - InStr(c, "/") + 8)
End Sub

Y a t-il des cellules vides après la cellule G2 ? en ce cas modifier la macro ainsi :
VB:
Sub test()
Set c = Range("G2") 'affecte à la variable c la plage G2
Do While Not (c Like "*##/##/## ##:##:##*") 'On cherche le format Date Heure (Nombres séparés par des / et des :
  Set c = c.Offset(1) 'On regarde la cellule du dessous tant que pas trouvé
Loop 'Boucle
'On a trouvé la cellule qui contient le texte recherché et on peut l'afficher :
MsgBox Mid(c, InStr(c, "/") - 2, InStr(c, ":") - InStr(c, "/") + 8)
End Sub
 

zbee

XLDnaute Nouveau
Re : extraction d'une chaine de caractères

Merci pour l'explication du code
mais cela ne semble pas fonctionner
ci-joint un exemple de tableau à traiter, ce sera + clair
 

Pièces jointes

  • extraction_date_forum_excel.xls
    26.5 KB · Affichages: 69

Staple1600

XLDnaute Barbatruc
Re : extraction d'une chaine de caractères

Bonsoir à tous

zbee
Le code de Yan (Salutations ;) ) fonctionne très bien (mais il faut évidemment adapter ;))
Sub testII()
Dim c As Range, i
For i = 1 To 14
Set c = Range("F1").Offset(i) 'affecte à la variable c la plage G2
Do While Not (c Like "*##/##/## ##:##:##*") 'On cherche le format Date Heure (Nombres séparés par des / et des :
Set c = c.Offset(1) 'Si pas trouvé on regarde la cellule du dessous
If c = "" Then Exit Sub 'si la cellule est vide on quitte la macro (fin de tableau)
Loop 'Boucle
'On a trouvé la cellule qui contient le texte recherché et on peut l'afficher :
c.Offset(, 1) = CDate(Mid(c, InStr(c, "/") - 2, InStr(c, ":") - InStr(c, "/") + 8))
Next i
End Sub

PS: zbee: F2 et non pas G2
:rolleyes:
édition: Bonsoir mapomme

 
Dernière édition:

mapomme

XLDnaute Barbatruc
Supporter XLD
Re : extraction d'une chaine de caractères

Bonjour zbee,

Si comme votre exemple le suggère, la date+heure débute toujours à la même position, votre code (à quelque corrections près) semble fonctionner.
Mais les autres codes sont plus robustes.

Code:
Sub extraction()
Dim i As Integer, derligne, mavaleur

derligne = Range("F65000").End(xlUp).Row 'Pour éviter de boucler sur 65536 lignes
For i = 2 To derligne
    'extraction
    mavaleur = Mid(Range("F" & i), 44, 17)
    'écriture colonne J et K
    Range("J" & i) = mavaleur '(en format texte)
    Range("K" & i) = CDate(mavaleur) '(en format date + heure)
Next i

End Sub
 
Dernière édition:

Statistiques des forums

Discussions
312 327
Messages
2 087 315
Membres
103 515
dernier inscrit
Cherbil12345