Split le contenu d'une cellule en fonction d'une date

Bonjour à tous,

J'aimerais avoir un peu d'aide sur un projet que je suis en train de réaliser. Vous pourrez trouver ci-joint un fichier isolant le problème. J'ai une colonne A dans lequel il y a un historique de commentaire. On reconnait un commentaire lorsque celui-ci commence par une date du format : 13-Jul-2021. Dans une colonne B, j'ai un commentaire.
Voici ce que je veux faire:

Dans la colonne C: s'il y a un commentaire dans la colonne B, affiche ce commentaire dans la cellule de la colonne C correspondante.

s'il n'y a pas de commentaire dans la colonne B, affiche le premier commentaire de la colonne A (voir exemple).

Pas de problème pour la première étape, mais je n'arrive pas à faire en sorte que la macro ne prenne que le premier commentaire. J'ai tout d'abord pensé à un split de string par détection du retour à la ligne (Chr(13) & Chr(10)), mais le problème c'est que parfois, un seul commentaire fait plusieurs lignes. Le seul moyen que j'ai en tête, c'est de détecter la chaîne de caractère de la date du prochain commentaire pour prendre tout ce qu'il y a avant.
Quelqu'un a une méthode pour détecter un string de type **-**-**** sachant que les * varient?

Merci d'avance pour le génie qui trouvera solution à mon problème.

Lucas

6exemple.xlsx (8.59 Ko)

Bonjour, il faut détecter dans la colonne A le moment ou le texte fait un retour de ligne dans la cellule. "Car(10)"

Ensuite on peut demander une partie du texte seulement. du caractère 1 à position du caractère car(10)

=SI(B2<>"";B2;STXT(A2;1;TROUVE(CAR(10);A2)))

1exemple.xlsx (10.50 Ko)

Oops pas vu la ligne "See if it is possible to do that." qu'il faut garder aussi

Salut Luka,
Salut Xmenpl,

peux-tu nous donner (beaucoup) plus de commentaires-types et surtout, quelques uns dont les dates chevauchent DEUX années ?
Il me faudrait aussi toutes les abréviations utilisées pour les mois (janv, fev...).


A+

Bonjour,

Tout d'abord, merci pour ta réponse! En effet il faut garder la ligne "See if it is possible to do that", et c'est là qu'est toute la complexité de la chose! De plus, je suis obligé d'utiliser le vba car l'objectif est d'écrire sur un word pour préparer un email. Le fichier joint avait juste pour but d'isoler le problème, mais une grosse macro bien complexe est derrière tout ceci.
Je viens de penser à une autre solution. Il est peu probable que la deuxième - troisième - nième ligne d'un même commentaire commence par un chiffre. Est-il possible de détecter si après un retour à la ligne, la ligne commence par un chiffre? Exemple:
13-Jul-2021: Comment 1 blablabla
blablablabla
blablabla
12-Jul-2021 : Comment 2

Résultat colonne C:

13-Jul-2021: Comment 1 blablabla
blablablabla
blablabla

Comme 12 est un chiffre et qu'il y a un saut de ligne juste avant, alors la macro ne garde que ce qu'il y a avant le 12. Est-il possible de faire cela par une analyse de la valeur ASCII du premier caractère de chaque ligne pour savoir si c'est un nouveau commentaire?
Merci

Salut Luka,

on ne peut pas déterminer le commencement d'une ligne puisque cela dépend de la largeur de la colonne !

J'ai un début (trop aléatoire, je sais, les gars ! )mais, justement, il nous faudrait vraiment ce que je t'ai demandé.

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
'
sData = Trim(Split(Range("A" & Target.Row).Value, "-2021,")(1))
Target = Left(sData, Len(sData) - 6)
'
End Sub


A+

Salut Curulis,

Merci pour ta réponse.
Pour le moment il n'y a pas de commentaires chevauchant deux années car la base de donnée a été construite cette année.
Pour les abréviations des mois : jan - feb -mar -apr-mai-jun-jul-aug-sep-oct-nov-dec.

Je crois comprendre ta solution curulis57. En effet tu ne te trompes pas, si l'on détecte -2021 il y a à chaque fois la chaîne de caractère **-*** juste avant! C'est une très bonne piste merci!

Je pense que je peux mettre le sujet comme résolu pour ne pas vous faire travailler davantage! Merci de m'avoir débloqué dans mon raisonnement!

Lucas

Salut Luka,

une évolution intéressante mais le problème du chevauchement des années demeure !!

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
'
sData = Trim(Split(Range("A" & Target.Row).Value, "-" & Year(Date) & ",")(1))
Range("D" & Target.Row).Value = Trim(Left(sData, InStrRev(sData, "-") - 4))
'
End Sub


A+

Re, bonjour,

Par formule en partant de la même idée que Curulis .. bonjour à toi

=SI(B2<>"";B2;STXT(A2;1;TROUVE(-2021;A2;20)-7))

On commence la recherche de "-2021" à partir du 20ème caractère (pour éviter un commentaire comme dans l'exemple 2dates qui se suivent ) et on retire 7.

0exemplebis.xlsx (8.85 Ko)

Curulis57,

Merci pour ton évolution, je n'aurai pas besoin de modifier le code quand on passera à l'année suivante et c'est super! De plus, tu diminues fortement la probabilité qu'une personne rajoute "-2021" dans un commentaire car il est encore plus improbable que cette personne écrive "-2021,", ce qui n'est pas négligeable car une centaine de personnes utilisent la macro quotidiennement! Le chevauchement des années n'est pas un problème, la macro ne fonctionnera pas à son plein potentiel pendant la première semaine de janvier de chaque année, ce qui n'est pas très grave. Et j'ai 5 mois pour penser à bricoler une solution qui pourrait pallier ce chevauchement

Bonjour Xmenpl,
Merci pour ta solution sans passer par VBA, cela me sera sûrement utile dans le futur!

Encore merci à vous tous!

Lucas

Ben, alors ? Et notre GIF de génie, stp !!

Bon travail!


A+

Rechercher des sujets similaires à "split contenu fonction date"