Besoin d'une formule de concaténation/conditionnelle

Fermé
Sawk_ Messages postés 3 Date d'inscription jeudi 28 mars 2013 Statut Membre Dernière intervention 28 mars 2013 - Modifié par Sawk_ le 28/03/2013 à 11:01
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 - 28 mars 2013 à 17:53
Bonjour

Je suis entrain de travailler sur un fichier excel ou j'ai des noms de commune dans une première colonne qui se répètent, (par exemple Paris en ligne 2 et Paris en ligne 3), un numéro unique (code SAP) dans une seconde colonne, correspondant à un centre de soin unique
Par exemple

C1 C2 C3
Paris 400001 centre-hospitalier-Delta
Paris 400002 centre-hospitalier-Victor
Lyon 400003 centre-hospitalier-zulu
Lyon 400004 centre-hostitalier-charlie
Je souhaite une formule qui me permettre, dans une 4Ième colonne, d'afficher les deux numéros en colonne deux, dans la première ligne, séparée par un espace pour obtenir la chose suivante


C1 C2 C3 C4
Paris 400001 centre-hospitalier-Delta 400001 400002
Paris 400002 centre-hospitalier-Victor
Lyon 400003 centre-hospitalier-zulu 400003 400004
Lyon 400004 centre-hostitalier-charlie

En gros, une formule qui puisse, sortir les deux numéros de la colonne deux d'une même ville(conditionnelle donc) en colonne 1, pour les placer cote a cote dans la première ligne de la commune en colonne 4, séparés par un espace.

Si quelqu'un peut me proposer une solution, je lui en serais très redevable (celà fait quelques temps que je fais toujours ces milles lignes à la main, et si une formule pouvait résoudre ce problème ce serait des heures de travail gagnées)
A voir également:

5 réponses

michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 304
Modifié par michel_m le 28/03/2013 à 11:12
Bonjour,

Combien as tu de lignes dans ton tableau ?

Les noms de villes sont ils toujours groupés ?

Version Excel ?

Michel
0
Sawk_ Messages postés 3 Date d'inscription jeudi 28 mars 2013 Statut Membre Dernière intervention 28 mars 2013
28 mars 2013 à 11:18
milles lignes, les noms de ville sont en effet toujours groupées, et c'est excel 2010
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 304
28 mars 2013 à 12:33
re,

Solution par macro VBA , OK ?
0
Sawk_ Messages postés 3 Date d'inscription jeudi 28 mars 2013 Statut Membre Dernière intervention 28 mars 2013
28 mars 2013 à 13:02
re michel, oui, ca serait ok!
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 304
Modifié par michel_m le 28/03/2013 à 17:54
J'ai annulé le post de 14:41 car je m'étais mélangé les pinceaux entre les variables cptr et Index
https://www.cjoint.com/?3CCrWVR4AsI

600 lignes durée: >= 0,03 secondes (Ram 512 Mo, Proc 3 ghz)

la cellule A2 nommée origine permet de déplacer le tableau où on veut sans avoir d'effet sur la macro

le code rectifié:
Option Explicit 

Sub concatener_sap() 
Dim Deb_lig As Byte, Deb_col As Byte, Der_lig As Integer, Tablo() 
Dim Cptr As Integer, Ville As String, Concat As String, Index As Integer 
Dim start As Single 
start = Timer 

Application.ScreenUpdating = False 
With Sheets(1) 
'----- initialisations 
     Deb_lig = .Range("origine").Row 
     Deb_col = .Range("origine").Column 
     Der_lig = .Columns(Deb_col).Find("*", , , , , xlPrevious).Row 
     'mémorisation en mémoire RAM des données 
     Tablo = .Range(.Cells(Deb_lig, Deb_col), .Cells(Der_lig, Deb_col + 3)).Value 

'------concaténation  des sap dans la colonne 4 de tablo 
     For Cptr = 1 To UBound(Tablo) 
          Ville = Tablo(Cptr, 1) 
          Index = Cptr 
          Concat = "" 
          While Tablo(Cptr, 1) = Ville 
               Concat = Concat & " " & Tablo(Cptr, 2) 
               Tablo(Index, 4) = Trim(Concat) 
               '.Cells(Index + 1, "D") = Concat 'essai 
                If Cptr = UBound(Tablo) Then Exit For 
               Cptr = Cptr + 1 
          Wend 
          Cptr = Cptr - 1 
     Next 
      
'-----restitution du tableau avec les concaténations 
     .Range("origine").Resize(UBound(Tablo), 4) = Tablo 
     .Range(.Cells(Deb_lig, Deb_col), .Cells(Der_lig, Deb_col + 3)).Borders.Weight = xlThin 
     .Columns(Deb_col + 3).AutoFit 
End With 

Application.ScreenUpdating = False 
MsgBox "durée des concaténations: " & Timer - start & " sec." 

End Sub





Michel
0