XL 2013 concaténer du texte en vba (le retour)

coline741

XLDnaute Junior
Bonjour,

En dépit de quelques heures de lecture et d'essais infructueux, je m'en remets aux spécialistes et les remercie d'avance pour leur aide.
Avec certains collages spéciaux issus d'un fichier pdf j'obtiens ceci:
15092-7Rarebutterfly
15093-16Blueon blue
15094-129:20special (*)

Après sélection des cellules texte, et avec une petite macro, j'espère obtenir ceci:
15092-7Rare butterfly
15093-16Blue on blue
15094-129:20 special (*)

Comme ça arrive assez souvent, je suis fatigué d'écrire par exemple =CONCATENER(C4365;" ";D4365)
Alors!
Merci d'avance tout le monde sauf aux ricaneurs colériques
 

Pièces jointes

  • concaténer texte.xls
    46.5 KB · Affichages: 4
  • concaténer texte.xls
    46.5 KB · Affichages: 1
Solution
Bonsoir à tous,

Sélectionne la zone à traiter puis cliquer sur le bouton Hop!
Le code de la macro dans module1:
VB:
Sub Col23()
Dim i&
   With Selection
      If .Columns.Count <> 3 Or .Columns.Areas.Count <> 1 Then MsgBox "il faut sélectionner une zone à 3 colonnes consécutives!", vbCritical: Exit Sub
      For i = 1 To .Rows.Count: .Cells(i, 2) = .Cells(i, 2) & " " & .Cells(i, 3): .Cells(i, 3).ClearContents: Next
   End With
End Sub

Staple1600

XLDnaute Barbatruc
Re

@coline741
Cela pourrait donner quelque chose comme cela
VB:
Sub Macro1()
Dim Der_Lig As Long 'variable
Der_Lig = Cells(Rows.Count, "B").End(xlUp).Row '1er ligne non vide Colonne A
Range("D2").FormulaR1C1 = "=RC[-2]&"" ""&RC[-1]" 'concaténation
Range("D2:D" & Der_Lig).FillDown 'recopie vers le bas
Range("D2:D" & Der_Lig) = Range("D2:D" & Der_Lig).Value ' suppression formules
Range("B:C").EntireColumn.Delete 'suppression colonne B et C
End Sub
 

coline741

XLDnaute Junior
Re

@coline741
Cela pourrait donner quelque chose comme cela
VB:
Sub Macro1()
Dim Der_Lig As Long 'variable
Der_Lig = Cells(Rows.Count, "B").End(xlUp).Row '1er ligne non vide Colonne A
Range("D2").FormulaR1C1 = "=RC[-2]&"" ""&RC[-1]" 'concaténation
Range("D2:D" & Der_Lig).FillDown 'recopie vers le bas
Range("D2:D" & Der_Lig) = Range("D2:D" & Der_Lig).Value ' suppression formules
Range("B:C").EntireColumn.Delete 'suppression colonne B et C
End Sub
Merci pour l'essai, mais cette macro ne fonctionne pas pour mes fichiers :
- aucune colonne ne peut être supprimée après
- pas de recopie vers le bas
- je dois pouvoir sélectionner les lignes intereressées, lancer la macro et bingo
 

Pièces jointes

  • concaténer texte2.xls
    56 KB · Affichages: 1

mapomme

XLDnaute Barbatruc
Supporter XLD
Bonsoir à tous,

Sélectionne la zone à traiter puis cliquer sur le bouton Hop!
Le code de la macro dans module1:
VB:
Sub Col23()
Dim i&
   With Selection
      If .Columns.Count <> 3 Or .Columns.Areas.Count <> 1 Then MsgBox "il faut sélectionner une zone à 3 colonnes consécutives!", vbCritical: Exit Sub
      For i = 1 To .Rows.Count: .Cells(i, 2) = .Cells(i, 2) & " " & .Cells(i, 3): .Cells(i, 3).ClearContents: Next
   End With
End Sub
 

Pièces jointes

  • coline741- concaténer texte- v1.xls
    36.5 KB · Affichages: 4
Dernière édition:

Staple1600

XLDnaute Barbatruc
Bonjour @mapomme

Comme j'ai pondu, je poste ;
VB:
Sub a()
Dim t, x, i&
t = Range("B3").CurrentRegion.Value
ReDim x(UBound(t, 1), 1)
For i = LBound(t, 1) To UBound(t, 1)
x(i, 0) = t(i, 1)
x(i, 1) = t(i, 2) & Chr(32) & t(i, 3)
Next
[B6].Resize(UBound(x) + 1).Value = x
End Sub
Mais si j'étais moi, j'opterais pour le maquereau de Poméranie ;) (à pécher au #6)
(Désolé, @mapomme, pour cet humour de piètre qualité ;)
 

coline741

XLDnaute Junior
Bonsoir à tous,

Sélectionne la zone à traiter puis cliquer sur le bouton Hop!
Le code de la macro dans module1:
VB:
Sub Col23()
Dim i&
   With Selection
      If .Columns.Count <> 3 Or .Columns.Areas.Count <> 1 Then MsgBox "il faut sélectionner une zone à 3 colonnes consécutives!", vbCritical: Exit Sub
      For i = 1 To .Rows.Count: .Cells(i, 2) = .Cells(i, 2) & " " & .Cells(i, 3): .Cells(i, 3).ClearContents: Next
   End With
End Sub
Merci à Newton pour son effort! ça fonctionne parfaitement sans rien désorganiser
 

coline741

XLDnaute Junior
Bonjour @mapomme

Comme j'ai pondu, je poste ;
VB:
Sub a()
Dim t, x, i&
t = Range("B3").CurrentRegion.Value
ReDim x(UBound(t, 1), 1)
For i = LBound(t, 1) To UBound(t, 1)
x(i, 0) = t(i, 1)
x(i, 1) = t(i, 2) & Chr(32) & t(i, 3)
Next
[B6].Resize(UBound(x) + 1).Value = x
End Sub
Mais si j'étais moi, j'opterais pour le maquereau de Poméranie ;) (à pécher au #6)
(Désolé, @mapomme, pour cet humour de piètre qualité ;)
Merci pour cette solution. Je vais tenter de l'adapter avec une sélection.
 

Staple1600

XLDnaute Barbatruc
Re

La version avec Selection
VB:
Sub Avec_Selection()
Dim t, x, i&
t = Selection.Value
ReDim x(1 To UBound(t, 1), 1 To 3)
For i = 1 To 3
x(i, 1) = t(i, 1)
x(i, 2) = t(i, 2) & Chr(32) & t(i, 3)
x(i, 3) = Null
Next
Selection.Item(1).Resize(UBound(x, 1), 3).Value = x
End Sub
 

Statistiques des forums

Discussions
312 287
Messages
2 086 829
Membres
103 398
dernier inscrit
alya34030