Extraire (à partir d'une date) et concatener de multiples cellules

Bonjour à tous,

Je travaille sur un fichier excel qui résume plusieurs projets et pour lesquels, régulièrement, un CR (projet par projet) est rédigé.

Cela devient vite indigeste et je cherche à extraire les CR par projets pour faire un CR macro.

Cela consisterait à extraire des chaines de caractères à partir d'une date, puis de concatener tout cela dans une cellule.

J'ai essayer tout un tas de trucs, pendant des heures, et je n'ai pas réussi

Je joins une représentation d'une fichier excel et dans le 1er onglet, ce que je souhaite faire.

Je suis preneur de toute aide !

30fichier-excel.xlsx (8.61 Ko)

Salut,

j'ai jeté un œil et avant de tenter quoi que ce soit, je te suggère de disposer les informations avec la date séparée si possible. Du genre une colonne par projet, une colonne date et le texte à côté.

Parce que là on est dans le problème classique d'une disposition pas vraiment appropriée à un classement, ce qui complique les choses.

Merci. Effectivement l'info n'est pas rangée de façon idéale.

Je récupère le fichier tel quel et il y a déjà des centaines d'entrées et je ne peux pas tout changer, malheureusement ...

Ça me gênerai pas si le rendu final est comme le fichier v2 en PJ.

Pour simplifier la formule, l'idéal serait de commencer par splitter (ou fractionner) le contenu des cellules (contenant chacune 2 lignes voire plus).

Tu sélectionnes toutes les cellules contenant plusieurs lignes puis tu vas dans données, convertir, délimité, suivant, autre et à droite tu tapes Ctrl + J, suivant, et tu tapes une cellule de destination (par exemple F4 si la 1ère ligne est en C4), terminer.

Et là on y voit plus clair.

Merci !

Je viens d'essayer, mais ça m'extrait la 1er ligne de la cellule. Je souhaite plutot extraire la dernière ligne. L'idéal serait de splitter le texte pour en extraire la dernière ligne. Et ça, j'y arrive pas.

Chez moi ça extrait bien les 2 lignes, tu as bien tapé Ctrl + J ? Au moment où on le tape on voit la 2ème ligne qui apparaît dans la fenêtre du dessous.

Et il ne faut rien cocher d'autre que "autre", la dernière option.

Bonsoir à tous !

@nicolasdn : Il serait opportun de préciser, dans votre profil, la nature de votre Excel ( 2003 ? 2021 ? 365 ?....). La langue est un élément de faible importance.

@douxreveur : si ça a fonctionné ! Ca me split la ligne qui contient xlignes en xcellules.

Le problème c'est que dans mon excel de départ, parfois, j'ai une 150 lignes... ça me ferait donc 150 cellules.

Est-ce qu'il y a un moyen d'extraire juste la dernière ligne ?

Tu veux dire extraire les lignes de la dernière cellule de la colonne ? Si oui, il suffit de la sélectionner et de faire la même chose, rien ne t'oblige à sélectionner toute la colonne.

Non, plutôt, extraire la dernière ligne de toutes les cellules d'une même colonne.

Je me dis qu'une macro serait peut être plus efficace.

Ok, je ne pense pas que ce soit possible avec cette procédure mais tu peux toujours effacer la colonne dont tu n'as pas besoin après le split.

Oui, c'est sur, je peux toujours supprimer les colonnes supplémentaires.

Dans le cas où il y a >50 lignes, ça peut vite devenir fastidieux. Au final, si je fais ça, ça me prendra plus de temps que de simplement copier coller toutes les dernières lignes. J'imagine qu'une macro VBA devrait faire ce que je souhaite plus facilement.

Plus de 50 lignes par cellule ? Ah oui, c'est beaucoup.

Et il n'y a pas moyen d'importer ces données autrement, par exemple via un csv ? Histoire de séparer les lignes dès l'importation.

Sauf que si le nombre de lignes n'est pas le même dans toutes les cellules, alors tu ne pourras pas effacer facilement les colonnes en trop.

Il faudrait trouver le moyen d'inverser l'ordre des colonnes pour que les dernières se retrouvent toutes en 1ère position et il n'y aurait plus qu'à effacer toutes les suivantes.

oui, certaines cellules sont pleines et pas forcément le même nombre de ligne.

Il faut voir que chaque onglet a de nombreuses cellules, certaines contiennent des dates, d'autres du texte : il faut le voir comme un fichier de suivi de projets.

L'objectif est vraiment que ça soit plus simple, ainsi, je ne me vois pas tout transformer en csv, d'ailleurs, ça ne fera jamais pas ce que je souhaite.

bonsoir le fil,

un début

Sub Extraire()
     Dim s, c  As Range
     Set dict = CreateObject("scripting.dictionary")
     For Each sh In ThisWorkbook.Worksheets
          If StrComp(sh.Name, "C3", 1) <> 0 Then
               On Error Resume Next
               Set c = Nothing
               Set c = sh.Columns("B").SpecialCells(xlConstants)
               On Error GoTo 0
               For Each c0 In c.Cells
                    sp = Split(c0.Offset(, 1).Value, vbLf)
                    For i = 0 To UBound(sp)
                         sp1 = Split(sp(i), ":")
                         If UBound(sp1) = 1 Then
                              s = Trim(sp1(0))
                              dict(s) = dict(s) & IIf(dict(s) = "", "", vbLf) & c0.Value & " : " & sp1(1)
                         End If
                    Next
               Next
          End If
     Next

     With Sheets("CR").Range("A1")
          .Resize(, 2).EntireColumn.ClearContents
          With .Resize(dict.Count)
               .Value = Application.Transpose(dict.keys)
               .Offset(, 1).Value = Application.Transpose(dict.items)
               With .Resize(, 2)
                    .EntireRow.AutoFit
                    .EntireColumn.AutoFit
                    .VerticalAlignment = xlCenter
                    .WrapText = True
               End With
          End With
     End With
End Sub

Ah oui, ça c'est au-dessus de mes compétences.

Sinon à part le VBA, je me disais qu'un moyen de procéder serait de cibler le contenu de la dernière cellule non vide de la ligne (après avoir splitté avec la méthode que je décrivais plus haut) ;

=RECHERCHE(2;1/(NON(ESTVIDE(4:4)));4:4)

C'est pour récupérer ce qu'il y a à la fin de la ligne 4 et est incrémentable (les 4:4 deviennent 5:5 à la ligne suivante). S'il y a une date seule dans la dernière cellule, il risque de la convertir en nombre donc il faudra formater en date.

En fouillant j'ai trouvé cette formule (à adapter)

Ça permettrait d'extraire la dernière ligne de la cellule.

Ça semble pas mal mais il faudrait l'adapter sur tout un onglet... Et rassembler ça dans un autre onglet.

=DROITE(F7;NBCAR(F7)-MAX(SI(STXT(F7;LIGNE(INDIRECT("1:"&NBCAR(F7)));1)=CAR(10);LIGNE(INDIRECT("1:"&NBCAR(F7))))))

J'ai essayé ta formule mais elle garde tout, si ce n'est que toutes les lignes se retrouvent sur une seule.

@doux rêveur, ah bah, c'est pas encore ça la bonne formule !

Non mais presque, je crois que je vois comment faire. Il faut trouver la position du dernier "line break" (symbolisé par CAR(10)) de la cellule et garder ce qu'il y a après.

Rechercher des sujets similaires à "extraire partir date concatener multiples"