Concaténer et vitgules

Bonjour le Forum,

Dans un fichier Excel j'ai deux feuilles. La feuille "saisie" et la "Feuil 1".

Dans la feuille saisie je rentre des noms de pièces (une par ligne) dans la colonne 1. Ce nombre de pièces est variable à chaque fois.

Dans la feuil 1 je souhaite reprendre dans une seule cellule l'ensemble des pièces et je voudrais les séparer par une virgule. J'ai donc utilisé la fonction concaténer sur l'ensemble de la plage des pièces référencées et j'ai séparé les pièces par une virgule.

Mon problème est que quand la page des pièces n'est pas complète, je vois dans la cellule de la Feuil 1 qui regroupe mes pièces les virgules qui ne servent à rien.

Mon but est d'avoir dans la cellule de destination uniquement les pièces saisies sans les virgules après la fin de cette liste.

Avez-vous une idée pour faire cela. Je joins un fichier.

Merci de votre aide.

11test.xlsm (353.36 Ko)

Bonjour rrianrrian, le forum,

Un essai par macro.....elle s'exécute à l'activation de la Feuil1....

Private Sub Worksheet_Activate()
 Dim i As Long, dl As Long
 Dim msg As String

 With Sheets("saisie")
  dl = .Range("A" & Rows.Count).End(xlUp).Row
   For i = 19 To dl
    If .Range("A" & i) <> "" Then msg = msg & "," & .Range("A" & i)
   Next i
 End With
  Range("A17").MergeArea = Right(msg, Len(msg) - 1)
End Sub
10copie-de-test.xlsm (335.10 Ko)

Cordialement,

Bonjour,

Sinon si les macros ne te branchent pas trop, la formule modifié (Heu... je me suis arrêté à 39 mais rien ne t'empêche d'en rajouter !)

=SI(saisie!A19 ="";"";saisie!A19 & SI(saisie!A20 ="";"";", " & saisie!A20 & SI(saisie!A21 ="";"";", " & saisie!A21 &

SI(saisie!A22 ="";"";", " & saisie!A22 & SI(saisie!A23 ="";"";", " & saisie!A23 & SI(saisie!A24 ="";"";", " & saisie!A24 &

SI(saisie!A25 ="";"";", " & saisie!A25 & SI(saisie!A26 ="";"";", " & saisie!A26 & SI(saisie!A27 ="";"";", " & saisie!A27 &

SI(saisie!A28 ="";"";", " & saisie!A28 & SI(saisie!A29 ="";"";", " & saisie!A29 & SI(saisie!A30 ="";"";", " & saisie!A30 &

SI(saisie!A31 ="";"";", " & saisie!A31 & SI(saisie!A32 ="";"";", " & saisie!A32 & SI(saisie!A33 ="";"";", " & saisie!A33 &

SI(saisie!A34 ="";"";", " & saisie!A34 & SI(saisie!A35 ="";"";", " & saisie!A35 & SI(saisie!A36 ="";"";", " & saisie!A36 &

SI(saisie!A37 ="";"";", " & saisie!A37 & SI(saisie!A38 ="";"";", " & SI(saisie!A38 ="";"";", " & saisie!A40 )))))))))))))))))))))

A+

Merci à vous deux. Les 2 propositions fonctionnent super bien !

Petite précisions concernant les macros. J'ai deux autres cellules de destination où je voudrais faire la même chose. Il s'agit dans la même feuille des celulles B1163 et N1866. c'est possible de les intégrer dans la macro ?

Merci

Tu peux aussi transformer la macro en Function : (Module10)

Function Calc()
 Dim i As Long, dl As Long
 Dim msg As String
Application.Volatile
 With Sheets("saisie")
  dl = .Range("A" & Rows.Count).End(xlUp).Row
   For i = 19 To dl
    If .Range("A" & i) <> "" Then msg = msg & "," & .Range("A" & i)
   Next i
 End With
  Calc = Right(msg, Len(msg) - 1)
End Function

Ensuite dans chaque cellule :

= Calc()

ou si tu conserves la macro actuelle :

Dans chaque cellule :

=A17

A+

Re,

Sous réserve que les cellules soient également fusionnées:

Private Sub Worksheet_Activate()
 Dim i As Long, dl As Long
 Dim msg As String

 With Sheets("saisie")
  dl = .Range("A" & Rows.Count).End(xlUp).Row
   For i = 19 To dl
    If .Range("A" & i) <> "" Then msg = msg & "," & .Range("A" & i)
   Next i
 End With
  'Range("A17").MergeArea = Right(msg, Len(msg) - 1)
  'Range("B1163").MergeArea = Right(msg, Len(msg) - 1)
  'Range("N1866").MergeArea = Right(msg, Len(msg) - 1)
  Range("A17:E17,B1163:F1163,N1866:R1866") = Right(msg, Len(msg) - 1)
End Sub

A ce propos, pourquoi fusionner les cellules alors que tu peux adapter la largeur des colonnes ?

Private Sub Worksheet_Activate()
 Dim i As Long, dl As Long
 Dim msg As String

 With Sheets("saisie")
  dl = .Range("A" & Rows.Count).End(xlUp).Row
   For i = 19 To dl
    If .Range("A" & i) <> "" Then msg = msg & "," & .Range("A" & i)
   Next i
 End With
  Range("A17,B1163,N1866") = Right(msg, Len(msg) - 1)
  Range("A17,B1163,N1866").Columns.AutoFit
End Sub
3copie-de-test2.xlsm (337.81 Ko)

Cordialement,

Merci xorsankukai et Galopin01, mon problème est résolu.

Merci de votre aide.

Bonne journée

Ah oui, pour les cellules fusionnées, je suis obligé car j'ai des lignes au dessus qui m'empêchent de jouer avec la largeur des colonnes

Bonjour à tous,

Une solution différente en passant pour ceux qui rencontreraient le même genre de problème (puisque ton problème à toi est déjà résolu)

Exemple avec la fonction JOINDRE_NON_VIDE (nécessite d'avoir installé l'add-in gratuit du site) :

=JOINDRE_NON_VIDE(saisie!A19:G68;", ")
joindre non vide

Cordialement,

Rechercher des sujets similaires à "concatener vitgules"