Excel VBA : operation sur "chaine caracteres"
Résolu/Fermé
Eaheru
Messages postés
197
Date d'inscription
mercredi 23 juin 2010
Statut
Membre
Dernière intervention
12 mars 2018
-
27 mai 2011 à 12:23
Eaheru Messages postés 197 Date d'inscription mercredi 23 juin 2010 Statut Membre Dernière intervention 12 mars 2018 - 27 juin 2011 à 23:42
Eaheru Messages postés 197 Date d'inscription mercredi 23 juin 2010 Statut Membre Dernière intervention 12 mars 2018 - 27 juin 2011 à 23:42
A voir également:
- Excel VBA : operation sur "chaine caracteres"
- Liste déroulante excel - Guide
- Si et excel - Guide
- Word et excel gratuit - Guide
- Déplacer une colonne excel - Guide
- Excel compter cellule couleur sans vba - Guide
8 réponses
michel_m
Messages postés
16603
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 312
Modifié par michel_m le 27/05/2011 à 16:37
Modifié par michel_m le 27/05/2011 à 16:37
Bonjour
pour récupérer la derniere date quelque soit le nombre de date
si toujours 4 dates
renvoie le numéro de série de la date(a mettre au format date dans la cellule)
si utilisation dans une procédure renvie la valeur directement au type date
Michel
pour récupérer la derniere date quelque soit le nombre de date
Function der_date(cellule As Range) As Date temp = Split(cellule, " : ") der_date = temp(UBound(temp)) End Function
si toujours 4 dates
Function der_date(cellule As Range) As Date der_date= Split(cellule, " : ")(3) End Function
renvoie le numéro de série de la date(a mettre au format date dans la cellule)
si utilisation dans une procédure renvie la valeur directement au type date
Michel
Eaheru
Messages postés
197
Date d'inscription
mercredi 23 juin 2010
Statut
Membre
Dernière intervention
12 mars 2018
20
27 mai 2011 à 17:28
27 mai 2011 à 17:28
Ça a l'air super. Merci Michel.
Je teste au plus vite et je t'informe.
Je teste au plus vite et je t'informe.
Eaheru
Messages postés
197
Date d'inscription
mercredi 23 juin 2010
Statut
Membre
Dernière intervention
12 mars 2018
20
30 mai 2011 à 14:54
30 mai 2011 à 14:54
Bonjour Michel,
Je souhaitais tester la fonction :
Function der_date(cellule As Range) As Date
temp = Split(cellule, " : ")
der_date = temp(UBound(temp))
End Function
Mais je dois dire que je ne sais pas comment la mettre en oeuvre
Est ce quelque chose comme :
ws1.Activate
der_date (Cells(cel1.Row, 48))
?
Merci de votre aide
Je souhaitais tester la fonction :
Function der_date(cellule As Range) As Date
temp = Split(cellule, " : ")
der_date = temp(UBound(temp))
End Function
Mais je dois dire que je ne sais pas comment la mettre en oeuvre
Est ce quelque chose comme :
ws1.Activate
der_date (Cells(cel1.Row, 48))
?
Merci de votre aide
michel_m
Messages postés
16603
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 312
30 mai 2011 à 15:14
30 mai 2011 à 15:14
Bonjour la fonction renvoie une date (donc une valeur
par exemple
range("A1")=der_date(Cells(cel1.Row, 48))
ou si utilisation dans le code
tavar=der_date(.....
tavar déclarée en date
par exemple
range("A1")=der_date(Cells(cel1.Row, 48))
ou si utilisation dans le code
tavar=der_date(.....
tavar déclarée en date
Eaheru
Messages postés
197
Date d'inscription
mercredi 23 juin 2010
Statut
Membre
Dernière intervention
12 mars 2018
20
Modifié par Eaheru le 30/05/2011 à 15:30
Modifié par Eaheru le 30/05/2011 à 15:30
Ok, je vois merci.
Il y a t il le moyen de la lier à l'espace de travail "ws1" ?
J'imagine que c'est faisable mais sans en connaitre la syntaxe.
(Quelque chose dans le genre : ws1.Range("AJ" & cel1.Row).Value )
La j'ai le retour suivant :
"L'indice n'appartient pas à la sélection"
sur la ligne :
der_date = temp(UBound(temp))
Il y a t il le moyen de la lier à l'espace de travail "ws1" ?
J'imagine que c'est faisable mais sans en connaitre la syntaxe.
(Quelque chose dans le genre : ws1.Range("AJ" & cel1.Row).Value )
La j'ai le retour suivant :
"L'indice n'appartient pas à la sélection"
sur la ligne :
der_date = temp(UBound(temp))
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
michel_m
Messages postés
16603
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 312
Modifié par michel_m le 30/05/2011 à 15:34
Modifié par michel_m le 30/05/2011 à 15:34
Si je comprend ton souci: la cible n'est pas sur la m^me feuille que la source ?
si oui, petite démo (classeur d'essai)
si oui, petite démo (classeur d'essai)
Sub essai()
Set ws1 = Sheets(1)
Set ws2 = Sheets(2)
ws2.Range("B2") = der_date(ws1.Range("A1"))
End Sub
Function der_date(cellule As Range) As Date
temp = Split(cellule, " : ")
der_date = temp(UBound(temp))
End Function
Michel
Eaheru
Messages postés
197
Date d'inscription
mercredi 23 juin 2010
Statut
Membre
Dernière intervention
12 mars 2018
20
30 mai 2011 à 15:51
30 mai 2011 à 15:51
C'est effectivement tout à fait ça.
Il ne me reste plus qu'un souci, je pense.
Si la cellule contenant l'historique de date est vide, je la zappe, ça c'est ok,
Si la cellule comprend plus d'une seule date, la fonction der_date prend en charge la dernière date délimitée par le ":" mais comme j'ai encore le message "L'indice n'appartient pas à la sélection" je suppose que ça peut venir du fait que si j'ai une seule date dans cette cellule, je n'ai pas de ":" et la fonction plante ?
Il ne me reste plus qu'un souci, je pense.
Si la cellule contenant l'historique de date est vide, je la zappe, ça c'est ok,
Si la cellule comprend plus d'une seule date, la fonction der_date prend en charge la dernière date délimitée par le ":" mais comme j'ai encore le message "L'indice n'appartient pas à la sélection" je suppose que ça peut venir du fait que si j'ai une seule date dans cette cellule, je n'ai pas de ":" et la fonction plante ?
michel_m
Messages postés
16603
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 312
30 mai 2011 à 16:03
30 mai 2011 à 16:03
??
Je viens d'essayer avec 1 seule date sans ":" ,c'est OK
s'il n'y a qu'une date l'indice est égal à 0 (les tableaux VBA commencent à 0)
par contre ca plante s'il y a ":"
Je viens d'essayer avec 1 seule date sans ":" ,c'est OK
s'il n'y a qu'une date l'indice est égal à 0 (les tableaux VBA commencent à 0)
par contre ca plante s'il y a ":"
Eaheru
Messages postés
197
Date d'inscription
mercredi 23 juin 2010
Statut
Membre
Dernière intervention
12 mars 2018
20
30 mai 2011 à 16:07
30 mai 2011 à 16:07
Ok, alors je vais reprendre mon bout de code pour repartir tout propre a partir de la fonction que tu propose :)
Je te tiens informé !
Je te tiens informé !
Eaheru
Messages postés
197
Date d'inscription
mercredi 23 juin 2010
Statut
Membre
Dernière intervention
12 mars 2018
20
Modifié par Eaheru le 30/05/2011 à 17:17
Modifié par Eaheru le 30/05/2011 à 17:17
Bon, je ne m'en sort pas trop :(
voici le bout de code qui me pose ce probleme :
If Not (ws1.Range("AJ" & cel1.Row)) Like "" Then
varN1 = der_date(ws1.Range("AJ" & cel1.Row))
End If
If Not ws1.Range("O" & cel1.Row) Like "" Then
If (ws2.Range("O" & cel2.Row).Value) <> (ws1.Range("O" & cel1.Row).Value) Then
If Not ((ws1.Range("O" & cel1.Row).Value) = varN1) And (ws1.Range("AJ" & cel1.Row) Like "") Then
ws1.Range("AJ" & cel1.Row).Value = ws2.Range("O" & cel2.Row).Value & " : " & ws1.Range("O" & cel1.Row).Value
End If
Je me retrouve toujours avec le message "l'indice n'appartient pas à la sélection" et la valeur de verN1 est 00:00:00 (donc j'imagine que c'est le 0 dont tu parlais ?)
voici le bout de code qui me pose ce probleme :
If Not (ws1.Range("AJ" & cel1.Row)) Like "" Then
varN1 = der_date(ws1.Range("AJ" & cel1.Row))
End If
If Not ws1.Range("O" & cel1.Row) Like "" Then
If (ws2.Range("O" & cel2.Row).Value) <> (ws1.Range("O" & cel1.Row).Value) Then
If Not ((ws1.Range("O" & cel1.Row).Value) = varN1) And (ws1.Range("AJ" & cel1.Row) Like "") Then
ws1.Range("AJ" & cel1.Row).Value = ws2.Range("O" & cel2.Row).Value & " : " & ws1.Range("O" & cel1.Row).Value
End If
Je me retrouve toujours avec le message "l'indice n'appartient pas à la sélection" et la valeur de verN1 est 00:00:00 (donc j'imagine que c'est le 0 dont tu parlais ?)
michel_m
Messages postés
16603
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 312
31 mai 2011 à 12:33
31 mai 2011 à 12:33
là, je ne comprend pas...
quelle valeur a la cellule: ws1.Range("AJ" & cel1.Row) ?
quelle valeur a la cellule: ws1.Range("AJ" & cel1.Row) ?
Eaheru
Messages postés
197
Date d'inscription
mercredi 23 juin 2010
Statut
Membre
Dernière intervention
12 mars 2018
20
27 juin 2011 à 23:42
27 juin 2011 à 23:42
Houla, désolé je n'avais pas regardé les réponses. Toutes mes excuses.
Au final, J'ai utilisé la commande "Right" afin de capté les 10 Premiers caractères depuis la droite (la dernière date de la ligne donc). une fois cette opération accomplie, je formate la cellule qui va recevoir cette valeur en format "texte" et j'y inscrit ma date toujours au format texte.
Ensuite un coup de CDATE et ma date est exploitable pour faire des comparaisons avec la date du jour.
J'espère avoir été clair ? :) Merci d'avoir pris la peine de me répondre.
Au final, J'ai utilisé la commande "Right" afin de capté les 10 Premiers caractères depuis la droite (la dernière date de la ligne donc). une fois cette opération accomplie, je formate la cellule qui va recevoir cette valeur en format "texte" et j'y inscrit ma date toujours au format texte.
Ensuite un coup de CDATE et ma date est exploitable pour faire des comparaisons avec la date du jour.
J'espère avoir été clair ? :) Merci d'avoir pris la peine de me répondre.