XL 2016 concatenation

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 !

finarobert

XLDnaute Occasionnel
Supporter XLD
Bonjour je bute depuis hier soir sur ce petit exercice ;
Tout se passe dans la colonne 1 d’une feuille ;
J’ai ces petits groupes :

<Ident1
c12345
678910
111213141516

<Ident2
cazert
dfghjk

<ident 3
c&é »
qsdf
qsdfg

etc ….

j’aimerai avoir tout ce qui est sous ident sur la même ligne et avec un > avant le c du début :

<ident1
>c1234567891011213141516

<ident2
>cazertdfghjk

<ident3
>c&éqsdfqsdfg

Voila ; En sachant que le nombre de ident est variable et le nombre de lignes à concatener aussi

Merci pour le coup de main !

Robert
 
Re,
je vous joints un fichier à 20000 lignes, il peut faire 300000 lignes mais si cela marche pourr 20000, je pourrai découper.
32767 est le nombre max de caractères dans une cellule.
Est ce que ce sera le cas ou est ce qu'il y aura des "<ident xx" dans ces lignes ?
Dans ce cas cela ne posera pas de problèmes car le max est de 32767 caractères après concaténation, non le nombre de lignes.

Quand à gérer 30000 lignes cela ne pose pas de problème, c'est la macro qui cherche la dernière ligne a traiter, ce sera donc automatique.
 
Re-,
Mea culpa, le maximum de caractères n'est pas de 46 137, mais 34 350, soit "seulement", 1 583 caractères de trop....
Quand tu parles de "fusionner", tu veux peut-être dire "fractionner"? (mettre les 32 767 premiers caractères en colonne A, et le restant en colonne B)?
 
Re,

32767 est le nombre max de caractères dans une cellule.
Est ce que ce sera le cas ou est ce qu'il y aura des "<ident xx" dans ces lignes ?
Dans ce cas cela ne posera pas de problèmes car le max est de 32767 caractères après concaténation, non le nombre de lignes.

Quand à gérer 30000 lignes cela ne pose pas de problème, c'est la macro qui cherche la dernière ligne a traiter, ce sera donc automatique.
la ligne des <ident xx ne sera pas plus long et ne change pas. Merci pour tout. Robert
 
Re-,
Stp, arrête d'utiliser le bouton "Répondre", du post (en rouge)
Utilise le bouton "Répondre" du fil (en vert)
1769891454080.png


Le fil est incompréhensible, avec tes réponses mal orientées....
 
J'utilise cette macro dans la feuille "Résultat" :
VB:
Private Sub Worksheet_Activate()
Dim i&, a, n&, j&
Application.ScreenUpdating = False
Cells.ClearContents 'RAZ
On Error Resume Next 'si aucune SpecialCell
With Sheets("Feuil2").UsedRange.Columns(1).SpecialCells(xlCellTypeConstants)
    If Err Then Exit Sub
    On Error GoTo 0
    ReDim resu(1 To 2 * .Areas.Count, 1 To 1)
    For i = 1 To .Areas.Count
        a = .Areas(i).Resize(, 2) 'matrice, au moins 2 éléments
        n = n + 1: resu(n, 1) = a(1, 1)
        n = n + 1: resu(n, 1) = "<"
        For j = 2 To UBound(a)
            resu(n, 1) = resu(n, 1) & a(j, 1)
        Next j
        If Len(resu(n, 1)) > 32767 Then MsgBox Len(resu(n, 1)) & " caractères en ligne " & n, , "Dépassement"
    Next i
End With
'---restitution---
Cells(1).Resize(n) = resu
End Sub
Seule la ligne 828 dépasse les 32767 caractères, on peut vivre avec...
 

Pièces jointes

@Cousinhub,
Yes sir, mea culpa.
Je ne m'en suis rendu compte qu'à la mise au point de la macro.

J'utilise cette macro dans la feuille "Résultat" :
VB:
Private Sub Worksheet_Activate()
Dim i&, a, n&, j&
Application.ScreenUpdating = False
Cells.ClearContents 'RAZ
On Error Resume Next 'si aucune SpecialCell
With Sheets("Feuil2").UsedRange.Columns(1).SpecialCells(xlCellTypeConstants)
    If Err Then Exit Sub
    On Error GoTo 0
    ReDim resu(1 To 2 * .Areas.Count, 1 To 1)
    For i = 1 To .Areas.Count
        a = .Areas(i).Resize(, 2) 'matrice, au moins 2 éléments
        n = n + 1: resu(n, 1) = a(1, 1)
        n = n + 1: resu(n, 1) = "<"
        For j = 2 To UBound(a)
            resu(n, 1) = resu(n, 1) & a(j, 1)
        Next j
        If Len(resu(n, 1)) > 32767 Then MsgBox Len(resu(n, 1)) & " caractères en ligne " & n, , "Dépassement"
    Next i
End With
'---restitution---
Cells(1).Resize(n) = resu
End Sub
Seule la ligne 828 dépasse les 32767 caractères, on peut vivre avec...
Merci beaucoup Job, je regarde
 
- 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
Retour