Fonction Concaténer VBA

PhilouG

XLDnaute Nouveau
Bonjour,

Je suis en train de créer une base de données (BDD) et lorsqu'on enregistre certaines informations sur un onglet, elles se reportent dans un autre onglet BDD. Dans cet onglet formulaire, j'ai les cases D6 à D20 qui sont des commentaires et que j'aimerais concaténer en une seule case dans l'onglet BDD. J'ai essayé de créer une fonction Concatener() dans VBA, mais j'ai du mal à l'appeler et à faire sortir le résultat dans la BDD.
Si qq'un a une petite piste, je suis preneuse !
Merci beaucoup :)

P.S : Ci-joint mon fichier Excel pour que ce soit plus clair ! L'onglet formulaire est "Original" et l'onglet BDD Prod (possiblement masqué, il faut l'afficher) est la BDD (obviously ahah).
 

Pièces jointes

  • Traçabilité MP Mars 2020 - Macros BONNE VERSION.xlsm
    227.5 KB · Affichages: 7
Solution
Bonjour le fil, PhilouG, Draneb

Une fonction sur le même principe
(mais en moins finalisé que la précédente)
NB:Voir les commentaires en vert
VB:
Function Concat(ByVal Rng As Range)
'Pour concaténer une seule colonne (avec moins de 65536 lignes)
Concat = Join(Application.Transpose(Rng.Value), ";")
End Function

Dranreb

XLDnaute Barbatruc
Bonjour
Vous ne faites rien retourner à votre fonction Concatener. Comme ça elle retournerait quelque chose :
VB:
Function Concatener()
Concatener = ActiveSheet.Range("D6") & "" & ActiveSheet.Range("D7")
End Function
 

PhilouG

XLDnaute Nouveau
Ok merci pour l'info.
Petite question supplémentaire si cela ne vous dérange pas, dans ma fonction je ne mets que 2 cellules D6 et D7 mais j'aimerais pouvoir faire ça avec toute la plage de données de D6 à D20, voire plus... Est-ce que vous avez une idée pour ne pas avoir à tout écrire à la main ?
 

Dranreb

XLDnaute Barbatruc
VB:
Function Concaténer(ByVal Rng As Range, Optional ByVal Sép As String = "")
   Dim TV(), L As Long, C As Long, TC() As String, N As Long
   TV = Rng.Value
   ReDim TC(1 To UBound(TV, 1) * UBound(TV, 2))
   For L = 1 To UBound(TV, 1): For C = 1 To UBound(TV, 2)
      N = N + 1: TC(N) = TV(L, C): Next C, L
   Concaténer = Join(TC, Sép)
   End Function

'À L'utilisation préciser Concaténer(ActiveSheet.[D6:D20])
 

Staple1600

XLDnaute Barbatruc
Bonjour le fil, PhilouG, Draneb

Une fonction sur le même principe
(mais en moins finalisé que la précédente)
NB:Voir les commentaires en vert
VB:
Function Concat(ByVal Rng As Range)
'Pour concaténer une seule colonne (avec moins de 65536 lignes)
Concat = Join(Application.Transpose(Rng.Value), ";")
End Function
 

Discussions similaires

Réponses
21
Affichages
378

Statistiques des forums

Discussions
312 046
Messages
2 084 850
Membres
102 686
dernier inscrit
Franck6950