Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

extraction d'une chaine de caractères

  • Initiateur de la discussion Initiateur de la discussion zbee
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Z

zbee

Guest
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
 
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
 
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
 
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
🙄
édition: Bonsoir mapomme

 
Dernière édition:
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:
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…