XL 2019 Concaténation aléatoire de cellules texte

Jybe

XLDnaute Nouveau
Bonjour,
Petit défi :
Je cherche à concaténer les cellules texte de 3 colonnes de façon aléatoire
 

job75

XLDnaute Barbatruc
Bonjour Jybe,

Si les textes son en colonnes A B C à partir de la ligne 2 :

- entrez dans chacune des 3 cellules D2 E2 F2 la formule =ALEA()

- entrez en G2 la formule :
VB:
=INDEX(A2:C2;RANG(D2;D2:F2))&INDEX(A2:C2;RANG(E2;D2:F2))&INDEX(A2:C2;RANG(F2;D2:F2))
- tirez la plage D2:G2 vers le bas

- touche F9 pour obtenir un nouveau tirage.

A+
 

job75

XLDnaute Barbatruc
Une solution par fonction VBA qui permet d'éviter les colonnes intermédiaires :
VB:
Function ConcatAlea$(plage As Range)
Application.Volatile
Dim a(), b(), i&
ReDim a(plage.Count - 1) 'base 0
ReDim b(UBound(a))
Randomize
For i = 0 To UBound(a)
    a(i) = Rnd
    b(i) = plage(i + 1)
Next
tri a, b, 0, UBound(a)
For i = 0 To UBound(a)
    ConcatAlea = ConcatAlea & b(i)
Next
End Function

Sub tri(a, b, gauc, droi) ' Quick sort
Dim ref, g, d, temp
ref = a((gauc + droi) \ 2)
g = gauc: d = droi
Do
    Do While a(g) < ref: g = g + 1: Loop
    Do While ref < a(d): d = d - 1: Loop
    If g <= d Then
      temp = a(g): a(g) = a(d): a(d) = temp
      temp = b(g): b(g) = b(d): b(d) = temp
      g = g + 1: d = d - 1
    End If
Loop While g <= d
If g < droi Then Call tri(a, b, g, droi)
If gauc < d Then Call tri(a, b, gauc, d)
End Sub
Le code doit impérativement être placé dans un module standard.

Voyez le fichier .xlsm joint, la fonction est utilisée en D2 avec la formule =ConcatAlea(A2:C2)

Le nombre de colonnes à concaténer peut être quelconque.
 

Pièces jointes

  • Concaténation aléatoire VBA(1).xlsm
    17.7 KB · Affichages: 3

Discussions similaires

Réponses
10
Affichages
201
Réponses
24
Affichages
403

Statistiques des forums

Discussions
312 104
Messages
2 085 337
Membres
102 865
dernier inscrit
FreyaSalander