comment concatener via VBA une liste Variable

pasquetp

XLDnaute Occasionnel
Bonjour,

je tente de concatener une liste qui est variable

l'objectif est que cela donne cela: %2B suivi du nom en a1 puis %2B de nouveau suivi du nom en a2 et ainsi de suite jusqu'au bout.

je dois donc passer par une macro et j'ai tenté celle ci:




sub essaimacro()

Dim i As Integer


Application.ScreenUpdating = False

finnn = Range("a65536").End(xlUp).Row



For i = 1 To finnn Step 1

Cells(i, 1).Select

Range("b1") = "%2B" & ActiveCell & "%2B" & ActiveCell
Range("b1") = Range("b1") & "%2B" & ActiveCell.Offset(1, 0)
Next i

Application.ScreenUpdating = True
End Sub

ca n'a pas marché

je vous ai mis en pièce jointe un fichier exemple de ce que je recherche

Merci à tous
 

Pièces jointes

  • fichier FR.xlsx
    8.4 KB · Affichages: 29

Jack2

XLDnaute Occasionnel
Re : comment concatener via VBA une liste Variable

Bonjour pasquetp, Bonjour le forum,

Tu peux essayer ceci :
Code:
Sub essaimacro()
Dim i As Integer
Dim St As String
Application.ScreenUpdating = False
finnn = Range("a65536").End(xlUp).Row
For i = 1 To finnn
    If Range("A" & i) <> "" Then St = St & "%2B" & Range("A" & i)
Next i
Range("B1") = St
End Sub
A+ Jack2
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Re : comment concatener via VBA une liste Variable

Bonjour pasquetp,

Soit le code dans module1:
VB:
Sub ConcatListe()
  With Sheets("Feuil1")
    .[b1] = Concat(.Range(.[a1], .Cells(.Rows.Count, "a").End(xlUp)), "%2B")
  End With
End Sub

Function Concat$(x As Range, sep$)
Dim t, i
  With Sheets("Feuil1")
    t = x.Value
  End With
  Concat = sep
  For i = 1 To UBound(t)
    Concat = Concat & t(i, 1) & sep
  Next i
End Function

Deux méthodes à disposition:
soit vous saisissez la formule suivante dans ca cellule B1:
Code:
=concat(A1:A3;"%2B")

soit vous exécutez la macro ConcatListe depuis module1
 
Dernière édition:

ROGER2327

XLDnaute Barbatruc
Re : comment concatener via VBA une liste Variable

Bonjour à tous.


Quelques autres bricoles.



  • Une procédure (dans le module de feuille de l'onglet concerné)
VB:
Sub toto()
Dim n&, t$
  With [A1]
    For n = 0 To .Offset(Rows.Count - .Row).End(xlUp).Row - .Row
      If Not IsEmpty(.Offset(n).Value) Then t = t & .Offset(n).Value & "%2B"
    Next
    If t <> "" Then t = "%2" & t
    .Offset(, 1).Value = t
  End With
End Sub

  • Une fonction (dans un module standard quelconque)
VB:
Function tata$(Cel As Range, prefX$, suffX$)
Dim n&
  Application.Volatile
  With Cel
    For n = 0 To .Offset(Rows.Count - .Row).End(xlUp).Row - .Row
      If Not IsEmpty(.Offset(n).Value) Then tata = tata & .Offset(n).Value & suffX
    Next
    If tata <> "" Then tata = prefX & tata
  End With
End Function

  • Une autre fonction (dans un module standard quelconque)
VB:
Function tutu$(Plg As Range, prefX$, suffX$)
Dim Cel As Range
  For Each Cel In Plg.Cells
    If Not IsEmpty(Cel.Value) Then tutu = tutu & Cel.Value & suffX
  Next
  If tutu <> "" Then tutu = prefX & tutu
End Function

  • Une autre fonction (dans un module standard quelconque)
VB:
Function titi$(Plg As Range, prefX$, suffX$)
Dim i&, j&, p
  p = Plg.Value
  If VarType(p) > vbArray Then
    For i = 1 To UBound(p): For j = 1 To UBound(p, 2)
      If Not IsEmpty(p(i, j)) Then titi = titi & p(i, j) & suffX
    Next j, i
  Else
    If p <> "" Then titi = p & suffX
  End If
  If titi <> "" Then titi = prefX & titi
End Function
Voir le classeur joint pour le paramétrage des fonctions.​


Bonne journée.


ℝOGER2327
#7505


Lundi 9 Phalle 141 (Saint Godemiché, économe - fête Suprême Quarte)
2 Fructidor An CCXXII, 1,0886h - millet
2014-W34-2T02:36:46Z
 

Pièces jointes

  • fichier FR_o.xlsm
    19.9 KB · Affichages: 33

Discussions similaires

Statistiques des forums

Discussions
312 294
Messages
2 086 896
Membres
103 404
dernier inscrit
sultan87