Grouper et concaténer

Bonjour, j'aimerais faire une petite manipulation :

ID------------------ VALUE

1------------------12

2 ------------------ 3

2 ------------------5

3 ------------------ 23

3------------------ 43

Grouper sur ID et Concaténer sur VALUE (avec séparateur)

ID------------------ VALUE

1------------------12

2 ------------------ 3,5

3 ------------------23,43

Est-ce possible sous Excel? Peut être sous Access?

Merci d'avance pour votre aide.

[EDIT] c'est mieux ainsi

Bonjour

Un petit code en supposant que tes données commencent en ligne 1, colonne A et colonne B :

Sub grouper()
Dim cel As Range, v As Range
Dim i As Byte
Application.ScreenUpdating = False
For Each cel In Range("A1:A" & Range("A65536").End(xlUp).Row)
For i = 1 To Range("a65536").End(xlUp).Row - 1
Set v = cel.Offset(i, 0)
If v <> "" And v = cel Then
cel.Offset(0, 1) = cel.Offset(0, 1) & "," & v.Offset(0, 1)
Rows(v.Row).Delete
i = i - 1
End If
Next i
Next cel
End Sub

Code à placer en VBA dans un module puis lui associer un bouton.

Si ok, oublie pas de clique sur le v de couleur verte pour cloturer le fil.

Amicalement

bonjour bonjour DAN

comme souvant une solution experimentale ; qui exploite les possibilites ds RECHERCHE V apres un tri sans doublon

nb vba c'est mieux

26concatainer.xls (15.00 Ko)

Bonjour

Où le code de la fonction personnalisée de Soft (que je ressort tous les 3 jours) fonctionne aussi

Cordialement

32concat.zip (6.70 Ko)

Bonjour,

Tout d'abord merci pour votre réponse rapide.

N'ayant jamais pratiquer de VBA je viens de me former (a minima) et c'est la raison pour laquelle j'ai mi du temps à répondre.

Lorsque j'exécute la macro (après avoir supprimer la première ligne contenant les entêtes de mes colonnes), j'obtiens le message d'erreur suivant :

Erreur d'éxécution '6':

Dépassement de capacité

Je sais q'il est possible qu'il y est plus de deux itérations à concaténer pour certains enregistrement. Le code proposé permet-il de concaténer 3, 4 ou même plus de valeurs ?

Autre chose, les tutoriel VB étant quasiment tous réalisés à partir de versions antérieures à la 2007, je ne suis pas parvenus a attacher le code à un bouton? Comment dois-je m'y prendre? Dois-je ouvrir un nouveau post?

Merci d'avance

Greg

-- 21 Avr 2010, 16:02 --

Bonjour,

Je n'arrive pas à éxécuter ce dernier code (le code de Soft). Celui ci commence par Function et non pas par sub: je n'arrive pas à l'intégrer dans une macro, comment dois-je m'y prendre ?

Dsl, je débute ...

Merci à vous ...

Re, bonjour

Exemple2

14concat2.zip (6.76 Ko)

Re,

Pour le dépassement de capacité, change la variable

Dim i as byte

par

Dim i as Integer

Amicalement

Je n'y arrive toujours pas

Lorsque j'exécute la macro 'grouper' rien ne se passe...

Comment cela se fait-il?

Re,

Et si tu mettais ton fichier en ligne (avec données non confidentielles) ? Ce sera plus simple de comprendre ton souci.

A te relire

Bonjour,

Ci joint le fichier en question. N'hésitez pas a commenter et expliquer, ce qui m'intéresse avant le résultat, c'est la méthode.

Merci d'avance

@+

Greg

12vba-allege.xlsx (26.43 Ko)

Bonjour

Avec la Macro que t'a donné Dan, j'ai obtenu le résultat cherché (en attendant un peu)

Donc, ça marche.

Cordialement

Bonjour

Tu es sous 2007 - Pense à enregistrer ton fichier sous .xls ou .xlsm.

Pour dessiner le bouton, Onglet Développeur ==> Insérer ==> Bouton

Pour lui affecter la macro, Click droit ==> Affecter une macro - Tu sélectionnes "Grouper" puis OK

Amicalement

Nad

Ok ca marche nickel !!!

En fait j'essayais de l'exécuter directement depuis le panneau Microsoft Visual Basic.

Pour l'onglet développeur, il n'était pas afficher : il fallait que je coche "afficher l'onglet développeur" dans les options Excel.

Merci à vous.

Bonjour Dan, à tous,

Celle-ci me parait + rapide

Sub Groupe()
'Macros par Claude Dubois pour "gregdetel" Excel-Pratique le 22/04/10
Dim Lg&, i&
Lg = Cells.Find("*", , , , xlByRows, xlPrevious).Row
Application.ScreenUpdating = False
    For i = Lg To 2 Step -1
        If Cells(i - 1, 1) = Cells(i, 1) Then
            Cells(i - 1, 2) = Cells(i - 1, 2) & "," & Cells(i, 2)
            Cells(i, 1).EntireRow.Delete
        End If
    Next i
End Sub

Bonne journée

Claude

re-Bonjour,

J'ai finalement tester le code de Dan sur mon fichier d'origine (environ 150 000 lignes) et j'obtiens à nouveau le message d'erreur (malgré le dimensionnement de la variable i en entier (integer)) du type " erreur '6' - dépassement de capacité. Ce code fonctionnait parfaitement avec 1000 lignes environ.

Le code de Claude fonctionne très bien avec les 150000 lignes. De plus il est compatible avec des valeurs de type texte, donc plus souple.

Merci à tous pour vos contributions.

@+

Greg

Rechercher des sujets similaires à "grouper concatener"