Je souhaiterais concaténer dans une cellule, des entetes de colonnes à partir de criteres. Exemple ce petit tableau joint, je souhaiterais que dans les cellules de la colonne 2008, je puisse cocaténer tous les noms ayant un repère 2008 et ceci par ligne.
Un solution par macro, par formule j'en suis incapable.
Code:
Sub concat()
Dim i As Long, k As Byte
Dim T As String
For i = 2 To Range("B65536").End(xlUp).Row
For k = 2 To 5
If Cells(i, k) = 2008 Then
T = T & Cells(1, k) & ";"
Cells(i, 6) = Left(T, Len(T) - 1)
End If
Next
T = ""
Next
End Sub
Je vous remercie tous les deux, je vais essayer sur mon fichier qui contient beaucoup plus de colonnes que dans le fichiert joint, j'espère que ca va aller
Je viens de m'apercevoir que la solution en langage vba ne fonctionne pas si l'on modifie les dates, de plus il me faudrait quelques explications pour que je l'adapte à mon tableau.
Est ce que cela est trop demandé, d'avance merci
Sub concat()
Dim i As Long, k As Byte
Dim T As String
For i = 2 To Range("B65536").End(xlUp).Row ' De la ligne 2 jusqu'à la dernière ligne écrite
For k = 2 To 5 ' De la colonne 2 (A) à la colonne 5 (E)
If Cells(i, k) = 2008 Then ' Si le contenu de la cellule est égal à 2008
T = T & Cells(1, k) & ";" ' On rajoute le nom situé ligne 1 colonne K
Cells(i, 6) = Left(T, Len(T) - 1) ' On écrit ce que l'on a trouvé en ôtant le dernier ;
End If
Next
T = "" ' Réinitialise la variable
Next
End Sub
Voici le code un peu modifié avec les explications.
Code:
Sub concat()
Dim i As Long, k As Byte
Dim T As String
'effacement de la colonne F
Range("F2:F" & Range("A65536").End(xlUp).Row).ClearContents
'boucle de la ligne 2 à la dernière linge non vide de la colonne B
For i = 2 To Range("B65536").End(xlUp).Row
'boucle de la colonne B à D
For k = 2 To 5
'si la cellule est égale à la cellule F1 alors
If Cells(i, k) = Cells(1, 6) Then
'concaténation des valeurs
T = T & Cells(1, k) & ";"
' suppression du dernier ;
Cells(i, 6) = Left(T, Len(T) - 1)
'fin du test
End If
'colonne suivante
Next
'remise à zéro de la variable T
T = ""
'ligne suivante
Next
End Sub
Tu entres une année en F1 et tu lances la macro.
Cells(1,1) correspond à la cellule A1, Cells(1,2) à B1, Cells(1,3) à C1 .../...
Dans l'exemple Cells(i,k) prendra comme valeurs B2,C2,D2,E2 puis B3,C3,D3,E3 et ainsi de suite jusqu'à B7,C7,D7,E7.
I aura donc comme valeur 2 puis 3,4,5,6 et 7 (ligne de 2 à 7).
K aura comme valeur 2 puis 3,4 et 5 (colonne B à D).
La variable T (qui sert à concaténer les noms ) se remet à zéro à chaque changement de ligne.
A+
Salut Banzai64, y pas de soucis, l'union fait la force
Je suis scotché, je vais essayer sur mon tableau, j'avoue qu'il va falloir que je m'interesse de plus prés au vba, pourtant cela me semble trés compliqué. Qu'elle la meilleure façon de s'initier si ce n'est de venir sur ce forum, qui m'est bien utile je l'avoue
Merci bqtr c'est super, avec tes explications claires je peux l'adapter à l'ensemble des onglets de mon tableau, une belle épine du pied enlevée
Claude