Sub Macro1()
Dim O As Worksheet 'déclare la variable O (Onglet)
Dim TV As Variant 'déclare la variable TV (Tableau des Valeurs)
Dim D As Object 'déclare la variable D (Dictionnaire)
Set O = Worksheets("Feuil1") 'définit l'onglet O (à adapter à ton cas)
TV = O.Range("B2").CurrentRegion 'définit le tableau des valeurs TV (à adapter à ton cas)
Set D = CreateObject("Scripting.Dictionary") 'définit le dictionnaire D
For I = 1 To UBound(TV, 1) 'boucle 1 : sur toutes les lignes I du tableau des valeurs TV
For J = 1 To UBound(TV, 2) 'boucle 2 : sur toutes les colonnes J du tableau des valeurs TV
If TV(I, J) <> "" Then D(TV(I, J)) = "" 'si la donnée ligne I colonne J de TV n'est pas vide, alimente le dictionnaire D avec la donnée
Next J 'prochaine colonne de la boucle 2
Next I 'prochaine ligne de la boucle 1
O.Range("I11").Resize(1, D.Count).Value = D.keys 'renvoie dans I11 (cellule à adapter) redimensionnée de l'onglet O les éléments du dictionanire D asns doublon
End Sub
Bonjour @pierrejeanbonjour Francois
A tester
EDit : Salut ROBERT
Sub test()
Set d = CreateObject("Scripting.dictionary")
Range("B2:G5").Select
For Each cel In Selection
If cel.Value <> "" Then
x = cel.Value
d(x) = x
End If
Next
Range("I11").Resize(, UBound(d.keys)) = d.keys
End Sub
Range("I11").Resize(, UBound(d.keys)) = d.keys
Range("I11").Resize(d.Count) = Application.Transpose(d.keys)
Bonjour @job75Bonjour hamphilos,
pierrejean n'est peut-être pas disponible, je réponds à sa place.
Il suffit en fin de macro de remplacer :
par :VB:Range("I11").Resize(, UBound(d.keys)) = d.keys
Edit: pierrejean s'est trompé, il faut utiliser d.Count à la place de UBound(d.keys)VB:Range("I11").Resize(d.Count) = Application.Transpose(d.keys)
Attention, la fonction Transpose est limitée à 65536 lignes.
Au-delà il faut faire une boucle pour transposer le tableau.
A+