Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Comment Concaténer Si

gratagui

XLDnaute Nouveau
Re-bonjour à toutes et à tous,

Je me permets de vous adresser une nouvelle demande, à laquelle ni moi ni l'équipe
technique avec laquelle je travaille n'avons trouvé de solution.

Alors voilà, dans le cadre de mon travail, je dois rendre une liste nominative des dossiers
traités. Via le loigiciel que nous utilisons, j'ai la possibilité la liste nominative sur Excel,
présentée de la façon suivante :

A1 : Numéro de boite où le dossier est archivé / B1 : Nom, Prénom
A2 : Numéro de boite où le dossier est archivé / B2 : Nom, Prénom

Pour résumer, si la boite n°1 contient 5 dossiers, il y aura 5 lignes sur Excel.

Or, il m'est demandé de CONCATENER tous les dossiers contenus dans un même boite
au sein d'une même cellule, en respectant le format suivant : Nom, Prénom ; Nom, Prénom ;
Nom, Prénom... le dernier nom doit être suivi d'un point.

Aucun problème pour concaténer à la main mais en revanche, je ne sais pas comment
concaténer de façon automatique, sachant que le nombre de dossiers varie suivant la
boite.

Je suis donc à la recherche d'une solution (sachant que je suis nul en Macro et en VBA)
qui me permettrait de concaténer de façon automatique tous les dossiers.

Ci-joint un exemple.

Merci par avance pour votre aide, toujours précieuse.

Cordialement, Gratagui
 

Pièces jointes

  • Exemple.zip
    49.2 KB · Affichages: 70
  • Exemple.zip
    49.2 KB · Affichages: 65
  • Exemple.zip
    49.2 KB · Affichages: 66

Nairolf

XLDnaute Accro
Re : Comment Concaténer Si

Salut Efgé, salut gratagui,

J'y vais de ma petite contribution qui est un mixte vba/fonction, avec une fonction créée en vba qui permet de concaténer les cellules de la première colonne d'une plage de cellule avec un séparateur et une fin à entrer.
 

Pièces jointes

  • Exemple_Nairolf.xls
    528.5 KB · Affichages: 64
  • Exemple_Nairolf.xls
    528.5 KB · Affichages: 56
  • Exemple_Nairolf.xls
    528.5 KB · Affichages: 52

Nairolf

XLDnaute Accro
Re : Comment Concaténer Si

Une amélioration permettant de concaténer une plage de cellule de n'importe qu'elle forme avec le choix du sens de concaténation.
 

Pièces jointes

  • Exemple_Nairolf.xls
    527 KB · Affichages: 62
  • Exemple_Nairolf.xls
    527 KB · Affichages: 66
  • Exemple_Nairolf.xls
    527 KB · Affichages: 60

Paf

XLDnaute Barbatruc
Re : Comment Concaténer Si

bonjour à tous

une solution par macro, pas trop rapide (10s pour 10 000 lignes traitées)

la feuille Liste est copiée en feuille Feuil2 (qui doit exister) puis concaténation et suppression des lignes devenues inutiles, puis mise en forme

Code:
Sub gratagui()
Dim Ws1 As Worksheet, Ws2 As Worksheet, DerLig As Long, TabloA, i As Long

Set Ws1 = Worksheets("Liste") ' Nom de la feuille ou se trouvent les données
Set Ws2 = Worksheets("Feuil2") ' Nom de la feuille ou les données seront copiées et traitées
   
'suppression des lignes feuil2
Ws2.Cells.Delete

DerLig = Ws1.Range("A" & Rows.Count).End(xlUp).Row ' recherche du N° de la dernière ligne
TabloA = Ws1.Range("A4:D" & DerLig)  'copie des données dans un tableau

Application.ScreenUpdating = False

With Ws2
.Range("A4").Resize(UBound(TabloA, 1), 4) = TabloA 'copie du tableau dans la feuille de travail
'copie des entêtes
    Ws1.Range("A1:D3").Copy
    With .Range("A1:D3")
        .PasteSpecial 'Paste:=xlPasteAll
        .PasteSpecial Paste:=xlPasteColumnWidths
        .PasteSpecial Paste:=xlPasteFormats
    End With
    .Range("A1:D" & DerLig).HorizontalAlignment = xlCenter
    .Range("B4:B" & DerLig).HorizontalAlignment = xlLeft
    .Range("C2:D" & DerLig).Interior.ColorIndex = 16

    
'suppression et regroupement des lignes
For i = DerLig To 4 Step -1 ' de la dernière à la 4ème ligne
    If .Cells(i, 1) = .Cells(i - 1, 1) Then 'si N° de boite est ègal celui de la ligne précédente
        .Cells(i - 1, 2) = .Cells(i - 1, 2) & " ; " & .Cells(i, 2) 'copie la description dans la ligne du dessus
        .Rows(i).Delete Shift:=xlUp 'suppression de la ligne courante
    End If
Next

End With

Application.ScreenUpdating = True

End Sub

A+
 

Discussions similaires

Réponses
18
Affichages
1 K
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…